Ir al contenido
StampyWalletDocs
API y webhooks / TPV / Recibir tu TPV

Recibir los eventos de tu TPV

POST /v1/entrants/:jeton recibe las ventas de Square, Shopify, SumUp, Zettle o de cualquier herramienta, y añade la visita al cliente correcto.

POST/v1/entrants/:jeton

Una dirección que darle a tu TPV: en cada venta pagada, el TPV la llama y StampyWallet añade la visita a la tarjeta del cliente, encontrado por su correo o su teléfono. No hay clave que escribir en el TPV: basta con el token de la dirección. Una dirección desconocida o revocada responde 404.

Las fuentes

Cada dirección se crea para una fuente en Ajustes › Integraciones, con una clave de firma opcional. StampyWallet lee entonces el formato de ese TPV tal cual:

FuenteLo que cuentaClienteImporteReferencia
squarepayment.created / payment.updated con estado COMPLETEDCorreo del comprador, o correo y teléfono del clienteSin propinaEl id del pago
shopifyorders/paidCorreo y teléfono del cliente o del pedidoSubtotal del pedidoEl id del pedido
sumup (beta)Transacción PAID o SUCCESSFULCorreo o teléfonoImporte de la transacciónCódigo de transacción
zettle (beta)PurchaseCreatedCorreo o teléfono del clienteImporte de la compraEl id de la compra
generiqueEl cuerpo de POST /v1/passagesclientmontantreference (opcional)

Nota : las fuentes de los TPV nunca crean clientes: una venta sin cliente conocido se ignora. Una venta sin correo ni teléfono, o sin referencia, también se ignora. Solo la fuente generique puede crear un cliente, con creer_si_absent: true.

La firma

Cuando hay una clave de firma guardada para la dirección, cada llamada debe ir firmada; si no, 401 signature_invalide. Pégala siempre que el TPV proporcione una.

FuenteCabeceraFirma
generiqueX-Stampy-SignatureHMAC-SHA256 hexadecimal del cuerpo sin procesar, con la clave de la dirección (se acepta sha256= delante)
squarex-square-hmacsha256-signatureHMAC-SHA256 base64 de la URL de notificación seguida del cuerpo sin procesar
shopifyX-Shopify-Hmac-Sha256HMAC-SHA256 base64 del cuerpo sin procesar
sumupX-Payload-SignatureHMAC-SHA256 hexadecimal del cuerpo sin procesar
zettleX-iZettle-SignatureHMAC-SHA256 hexadecimal de timestamp + "." + payload

El formato genérico

Para un script, una herramienta sin código o un TPV sin formato conocido, envía el mismo cuerpo que POST /v1/passages:

corps='{"client": {"telephone": "+33612345678"}, "montant": 18.9, "reference": "T-2026-1025-0091"}'
signature=$(printf '%s' "$corps" | openssl dgst -sha256 -hmac "$STAMPY_ENTRANT_SECRET" | sed 's/^.* //')

curl https://app.stampywallet.com/v1/entrants/9QkT2vX7pL4mR8sN1bC6dF3gH5jK0wYz \
  -H "Content-Type: application/json" \
  -H "X-Stampy-Signature: $signature" \
  -d "$corps"

Las respuestas

Una vez autenticada la llamada, la respuesta es siempre 200, para que el TPV no averigüe nada de tu fichero de clientes:

  • { "ok": true, "ignore": true }: el evento no nos concierne (no pagado, otro asunto, sin cliente, o sin referencia en el caso de un TPV);
  • { "ok": true }: en todos los demás casos, exista o no el cliente, y se haya puesto o rechazado la visita (demasiado pronto, importe demasiado bajo).

Solo una avería real responde 500: el TPV reintenta, y la referencia garantiza que un nuevo intento no sella dos veces. Cada dirección acepta 300 llamadas por minuto.

Los ajustes paso a paso, TPV por TPV: Conectar tu TPV.

Actualizado el

¿Te ha sido útil esta página?