Webhooks
Inflow utilise les webhooks pour notifier votre application en temps réel lorsque des événements surviennent au sein de votre organisation (tels que la finalisation des règlements ou la confirmation des retraits).Signature des Livraisons et Gestion du Secret
Les livraisons peuvent être signées, mais uniquement si un secret est configuré sur l’adresse de destination (endpoint). Si aucun secret n’est défini (hasSigningSecret: false), les webhooks sont envoyés non signés.
- Création & Rotation du Secret : Lors de la création d’un endpoint webhook, un secret de signature peut être fourni ou généré automatiquement (
secret: "whsec_..."). Les secrets générés par la plateforme ne sont renvoyés qu’une seule fois lors de la création. L’appel àPOST /organizations/{id}/webhooks/{endpointId}/rotate-secretinvalide le secret précédent immédiatement et renvoie le nouveau secret. - Vérification de Signature : Lorsqu’un secret est actif, les livraisons sortantes incluent les en-têtes HTTP suivants :
X-Webhook-Signature: Formatsha256=<hex_digest>(ouv1=<hex_digest>).X-Webhook-Timestamp: Horodatage Unix (en secondes) de la tentative de livraison.
- Calcul HMAC : La signature est calculée par HMAC-SHA256 sur la chaîne exacte du corps brut de la requête (
{timestamp}.{rawBody}ou chaîne JSON exacte). Ne parsez pas et ne ré-sérialisez pas le JSON avant vérification.
Exemple de Vérification de Signature en Node.js
Enveloppe d’Événement & Schémas des Données
Tous les webhooks sortants utilisent une structure d’enveloppe standardisée :Champs des Données de Paiement
Pour les événements de statut de paiement, l’objetdata comprend :
id: Identifiant unique du paiement (uuid)reference: Votre référence de paiement uniquesourceAmount: Montant dans la devise sourcesourceCurrency: Code de devise source ISO 4217targetAmount: Montant dans la devise cibletargetCurrency: Code de devise cible ISO 4217exchangeRate: Taux de change appliquéstatus: Statut actuel (created,initiated,executed,settled,failed,cancelled)previousStatus(facultatif) : Statut antérieur du paiement avant la transition
Cycle de Vie du Paiement : payment.executed vs payment.settled
Important :payment.succeededn’est pas un nom d’événement sortant mis en œuvre. Les événements de succès réellement émis par la plateforme sontpayment.executedetpayment.settled.
payment.executed: Le prestataire a confirmé la réception des fonds. Les fonds sont crédités sur le solde en attente de votre organisation.payment.settled: Les fonds ont terminé leur traitement de règlement et sont disponibles sur le solde de votre portefeuille.
payment.executed, mais les retraits automatiques ne peuvent être déclenchés qu’une fois les fonds réglés (payment.settled).
Catalogue des Événements Sortants
La plateforme définit les types d’événements webhook sortants suivants :Politique de Nouvelle Tentative & Anti-Rejeu
Calendrier de Nouvelle Tentative avec Backoff Exponentiel
Si votre serveur renvoie un code d’erreur HTTP non-2xx ou ne répond pas dans les 30 secondes, les tentatives de livraison sont réitérées selon le calendrier suivant :- 1 heure après le premier échec
- 2 heures après le deuxième échec
- 4 heures après le troisième échec
- 8 heures après le quatrième échec
- 16 heures après le cinquième échec
- Les tentatives s’arrêtent après 5 échecs (le délai suivant dépassant 24 heures).
Protection Anti-Rejeu et Déduplication
Chaque charge utile contient un identifiant d’événementid unique et un horodatage ISO createdAt dans son corps. Votre serveur peut enregistrer ces identifiants pour ignorer les livraisons en doublon.
Tests et Renvois Manuels
- Renvoi Manuel : L’historique des livraisons est conservé. Vous pouvez réémettre manuellement un événement à l’aide de
POST /organizations/{id}/webhooks/{endpointId}/deliveries/{deliveryId}/resend. - Tests de Signature : Vous pouvez tester la vérification de signature à l’aide de vos clés de test ou dans vos suites de tests d’intégration.