Aller au contenu
StampyWalletDocs
API et webhooks / Caisses / Recevoir votre caisse

Recevoir les événements de votre caisse

POST /v1/entrants/:jeton reçoit les ventes de Square, Shopify, SumUp, Zettle ou de n'importe quel outil, et ajoute le passage au bon client.

POST/v1/entrants/:jeton

Une adresse à donner à votre caisse : à chaque vente payée, la caisse l'appelle, et StampyWallet ajoute le passage à la carte du client, retrouvé par son e-mail ou son téléphone. Pas de clé à écrire dans la caisse : le jeton de l'adresse suffit. Une adresse inconnue ou révoquée répond 404.

Les sources

Chaque adresse est créée pour une source dans Réglages › Intégrations, avec une clé de signature facultative. StampyWallet lit alors le format de cette caisse tel quel :

SourceCe qui compteClientMontantRéférence
squarepayment.created / payment.updated au statut COMPLETEDE-mail de l'acheteur, ou e-mail et téléphone du clientHors pourboireL'id du paiement
shopifyorders/paidE-mail et téléphone du client ou de la commandeSous-total de la commandeL'id de la commande
sumup (bêta)Transaction PAID ou SUCCESSFULE-mail ou téléphoneMontant de la transactionCode de transaction
zettle (bêta)PurchaseCreatedE-mail ou téléphone du clientMontant de l'achatL'id de l'achat
generiqueLe corps de POST /v1/passagesclientmontantreference (facultative)

Note : les sources des caisses ne créent jamais de client : une vente sans client connu est ignorée. Une vente sans e-mail ni téléphone, ou sans référence, est ignorée aussi. Seule la source generique peut créer un client, avec creer_si_absent: true.

La signature

Quand une clé de signature est enregistrée pour l'adresse, chaque appel doit être signé, sinon 401 signature_invalide. Collez-la toujours quand la caisse en fournit une.

SourceEn-têteSignature
generiqueX-Stampy-SignatureHMAC-SHA256 hexadécimal du corps brut, avec la clé de l'adresse (sha256= accepté devant)
squarex-square-hmacsha256-signatureHMAC-SHA256 base64 de l'URL de notification suivie du corps brut
shopifyX-Shopify-Hmac-Sha256HMAC-SHA256 base64 du corps brut
sumupX-Payload-SignatureHMAC-SHA256 hexadécimal du corps brut
zettleX-iZettle-SignatureHMAC-SHA256 hexadécimal de timestamp + "." + payload

Le format générique

Pour un script, un outil sans code ou une caisse sans format connu, envoyez le même corps 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"

Les réponses

Une fois l'appel authentifié, la réponse est toujours 200, pour que la caisse n'apprenne rien de votre fichier de clients :

  • { "ok": true, "ignore": true } : l'événement ne nous concerne pas (non payé, autre sujet, sans client, ou sans référence pour une caisse) ;
  • { "ok": true } : dans tous les autres cas, que le client existe ou non, que le passage soit posé ou refusé (trop tôt, montant trop petit).

Seule une vraie panne répond 500 : la caisse réessaie, et la référence garantit qu'un nouvel essai ne tamponne pas deux fois. Chaque adresse accepte 300 appels par minute.

Les réglages pas à pas, caisse par caisse : Relier votre caisse.

Mis à jour le

Cette page vous a aidé ?