Saltar al contenido principal

Comunicación con punto de venta

Tu terminal habla con SPIDI en dos fases: pairing (una sola vez) y luego operación firmada con HMAC (en cada petición).

Comunicación con punto de venta: pairing y firma HMAC

Fase 1 — Pairing (vinculación)

Ocurre una sola vez en la vida del dispositivo.

# 1) el admin (con Bearer) registra el serial y genera un OTP
POST /api/v1/merchants/{merchantId}/pos-terminals/{serialNumber}/pairing
Authorization: Bearer <token>

# 2) el POS canjea el OTP y obtiene su Secret Key
POST /api/v1/pos-terminals/{serialNumber}/pairing/activate
{ "code": "889904" }

El servidor valida el código, genera una Secret Key y la asocia al serial; el POS la guarda en memoria segura. A partir de aquí, la Secret Key nunca vuelve a viajar por internet.

Fase 2 — Firma HMAC en cada petición

Ya vinculado, toda petición del POS se firma con HMAC-SHA256 a partir de cuatro elementos:

#ElementoDetalle
1BodyEl JSON del cuerpo. En GET o sin cuerpo, cadena vacía ""
2TimestampISO 8601, enviado en x-pos-timestamp
3URLEl path completo, incluyendo query string
4Secret KeyLa clave persistida en el pairing
message = body + "\n" + timestamp + "\n" + url
signature = HMAC_SHA256(message, secret_key)

Cabeceras obligatorias en toda petición POS:

CabeceraValor
x-pos-signatureLa firma HMAC-SHA256 en hexadecimal
x-pos-timestampEl mismo timestamp ISO 8601 usado en la firma

En un GET (sin cuerpo), body = "", así que el message empieza por el salto de línea. La URL debe llevar el query string tal cual se envía.

Operaciones del terminal

OperaciónMétodoEndpointBody
Listar transaccionesGET/api/v1/pos-terminals/{serial}/transactions?status=PENDING""
Consultar una ordenGET/api/v1/pos-terminals/{serial}/transactions/{orderId}""
Confirmar pagoPOST/api/v1/pos-terminals/{serial}/transactions/{orderId}/commitJSON
Confirmar anulaciónPOST/api/v1/pos-terminals/{serial}/transactions/{orderId}/cancellation/commit""
Cierre de lotePOST/api/v1/pos-terminals/{serial}/settlementsJSON

Por qué es seguro

  • Sin contraseñas en el dispositivo: nada que anotar en un papel.
  • Integridad: si alguien altera el monto, la URL o el timestamp, la firma falla y el servidor rechaza.
  • Anti-replay: el x-pos-timestamp permite descartar peticiones viejas o duplicadas.
  • Control: si el POS se pierde, el admin lo desvincula y la Secret Key queda invalidada al instante.

Conceptos (Merchant) · ¿Para quién es?