Webhooks
Comment Wajub informe votre serveur de ce qui s'est passé, et comment vous fier à cette information.
Un webhook informe votre serveur du résultat d'un paiement, d'un transfert ou de tout autre changement, sans que vous ayez à le demander. Trois règles rendent une intégration correcte ; le reste de cette section les détaille.
| Règle | Pourquoi |
|---|---|
| Vérifiez la signature avant de lire le corps | N'importe qui peut envoyer un POST à votre URL |
| Répondez en moins de 10 secondes, traitez ensuite | Un handler lent déclenche une nouvelle tentative, donc un doublon |
| Utilisez l'id de l'événement comme clé | Le même événement peut légitimement arriver deux fois |
L'enveloppe
Chaque livraison a la même forme. Le payload ne varie jamais selon le type d'événement, seul data change.
Le type d'événement est dans `event`, pas dans `type`
Lire event.type vous renvoie undefined, et un switch sur cette valeur tombe silencieusement
dans votre branche par défaut. Le champ s'appelle event. Les SDKs renvoient cette enveloppe telle
quelle, la règle s'applique donc que vous l'analysiez vous-même ou non.
data est la ressource complète, octet pour octet ce que GET /payments/{id} renvoie sous
transaction. Vous n'avez jamais besoin d'un second appel pour savoir ce qui s'est passé, même si
en faire un reste un bon moyen de revérifier un paiement que vous jugez à forte valeur. Associez un
événement à votre propre commande grâce à data.reference, la reference que vous avez fournie, ou
data.metadata.
| Champ | Ce qu'il contient |
|---|---|
id | L'id de l'événement, votre clé de déduplication |
event | Le type, par exemple payment.succeeded |
livemode | false en sandbox, true en live |
created | Le moment où l'événement a été enregistré, au format ISO 8601 |
api_version | La version selon laquelle le payload a été sérialisé |
pending_webhooks | Le nombre d'endpoints auxquels cet événement est destiné |
data | La ressource elle-même |
Les en-têtes
X-Wajub-Signature: v1=8f3c1b0e4a7d...
X-Wajub-Timestamp: 1748081269
X-Wajub-Event: payment.succeeded
X-Wajub-Delivery-Id: whd_7Yh2MpL4tRb3nP8sZcXv
Content-Type: application/jsonLes deux premiers servent à la vérification. X-Wajub-Event vous permet d'aiguiller la requête
avant de l'analyser, et X-Wajub-Delivery-Id identifie la livraison de cet événement à cet endpoint : il
reste le même à chaque nouvelle tentative, et diffère d'un endpoint à l'autre.
Ce qui se passe de bout en bout
- 1
Vous enregistrez un endpoint
Une URL, dans Konsole ou via
POST /webhooks. Un endpoint live doit utiliserhttps://; un endpoint sandbox peut utiliserhttp://. Chaque endpoint a son propre secret de signature. - 2
Quelque chose se produit
Un paiement réussit, un transfert échoue, un litige s'ouvre. Wajub enregistre un événement.
- 3
Wajub l'envoie
Signé, à chaque endpoint abonné à ce type, avec un délai de réponse de 10 secondes.
- 4
Vous répondez 2xx
Pour toute autre réponse, ou sans réponse dans le délai, la livraison est retentée pendant 72 heures au plus.
Pour aller plus loin
| Vous voulez | Lisez |
|---|---|
| En recevoir un sur votre ordinateur | Démarrage rapide |
| Prouver qu'il vient de Wajub | Vérification de signature |
| Savoir quels événements existent | Catalogue des événements |
| Comprendre un doublon | Nouvelles tentatives et échecs |
| Choisir de ne pas utiliser les webhooks | Webhooks ou polling |
Pas besoin d'URL publique pour commencer
wajub listen --forward-to http://localhost:3000/webhooks transmet les événements en temps réel à
votre machine, signés de la même façon qu'en production. Le démarrage rapide
commence par là.
Pages associées
- Démarrage rapideUn événement signé sur votre ordinateur en cinq minutes environ.
- Vérification de signatureLa seule étape à ne jamais sauter.
- Nouvelles tentatives et échecsDes tentatives pendant 72 heures, et comment rester idempotent.
- Dépannage des webhooksRien n'arrive, ou la signature ne correspond jamais.