Idempotence des webhooks : éviter les effets de paiement en double

·4 min de lecture

L’idempotence donne à une opération logique son effet prévu même si le transport ou l’exécution se répète.

Des registres sombres reliés par des chemins de transaction indigo et un repère de rapprochement.

L’idempotence donne à une opération logique son effet prévu même si le transport ou l’exécution se répète. Elle ne promet pas une livraison unique du message. Traitez la réception, la conservation durable, la transition métier et les tâches suivantes comme des frontières distinctes.

Choisir la bonne identité

L’identifiant d’événement reconnaît les livraisons du même événement. Celui du paiement relie plusieurs événements à un objet métier. La clé d’idempotence d’une requête sortante protège une autre frontière, selon les règles du prestataire. Un client et un montant ne suffisent pas : deux achats légitimes peuvent leur correspondre. Définissez également les transitions d’état autorisées.

Conserver avant de confirmer

Vérifiez la signature selon la documentation du prestataire, puis conservez durablement l’événement ou placez-le dans une file durable avant de confirmer sa prise en charge. Reliez la modification métier et sa preuve de traitement de manière atomique ou équivalente. Une boîte d’envoi transactionnelle peut reprendre les tâches externes après une interruption. Protégez les données personnelles présentes dans les messages avec des règles d’accès et de conservation.

Tester la reprise comme un cas normal

Livrez un événement successivement et simultanément, puis interrompez le worker à chaque frontière durable. Vérifiez écritures, accès et appels externes, pas seulement les réponses. Un événement tardif ne doit pas rétablir un état obsolète parce qu’il arrive en dernier. Surveillez l’âge et le statut des événements inachevés. Une procédure de rejeu contrôlée doit appliquer les mêmes protections que le traitement ordinaire.

Un exemple à vérifier

Un worker peut enregistrer la commande puis s’arrêter avant de marquer l’événement terminé. Au redémarrage, la même tâche revient. Vérifiez d’abord la protection durable de la commande, puis l’état de la livraison. Une nouvelle exécution ne doit pas créer un deuxième accès. Si la livraison manque, une tâche reprenable doit encore exister. Ce scénario sépare deux défauts différents : répéter un effet et perdre le travail suivant.

Questions fréquentes

Une liste en mémoire suffit-elle ?

Non. Redémarrages et workers multiples demandent une preuve persistante partagée.

L’idempotence du prestataire protège-t-elle le webhook ?

Elle protège sa frontière de requête ; les effets internes restent à protéger.

Faut-il tout conserver indéfiniment ?

Non. Définissez pertinence, besoin d’enquête et durée de conservation.

Un rejeu peut-il créer un remboursement supplémentaire ?

Oui sans protection de l’opération métier ; vérifiez-le avec des données synthétiques.

Comment détecter un traitement bloqué ?

Par l’état durable, l’ancienneté, les tentatives et les résultats du rapprochement.

Transformons votre besoin en périmètre réalisable

Partagez le parcours utilisateur, les intégrations et les contraintes de lancement. Nous pouvons préparer une estimation avec hypothèses et exclusions.

Pour aller plus loin

Rapprochement des paiements : expliquer chaque écart

Le rapprochement compare des enregistrements décrivant la même activité économique et explique leurs différences.

Concevoir un ledger fintech : soldes, corrections et traçabilité

Un ledger décrit des mouvements financiers selon des règles vérifiables.

Auditer une intégration de paiement : doublons et paiements manquants

Une page de confirmation ne prouve pas que tout le paiement est correctement traité.