Le verdict en trois phrases
Un webhook de paiement mobile money n'est ni unique ni garanti : il peut arriver 1 à 3 fois selon le provider et parfois avec 10 secondes de retard. La fiabilité repose sur deux piliers : idempotence (dédup par référence) et vérification de signature (HMAC) pour rejeter les faux appels. Négliger l'un ou l'autre expose à 3 à 5 % de commandes dupliquées ou à des validations frauduleuses.
Idempotence : dédupliquer par référence
Le principe est simple : chaque transaction porte une reference unique. À la réception du webhook, vous vérifiez si cette référence a déjà été traitée. Si oui, vous renvoyez 200 immédiatement sans re-jouer la logique métier. Un stockage à TTL 24h (Redis ou table dédiée) suffit car les retries des providers s'étalent rarement au-delà d'une journée.
Les comportements de renvoi varient. MoMo (MTN) peut appeler votre callback 2 fois, Wave 1 à 3 fois selon les timeouts, Orange Money jusqu'à 3 fois. La latence moyenne d'arrivée du webhook après paiement se situe entre 4 et 12 secondes en 2026.
| Provider | Nb d'appels possibles | Latence moyenne | Sécurité | Fenêtre de retry |
|---|---|---|---|---|
| Wave | 1 à 3 | 4-8 s | HMAC-SHA256 | ~jusqu'à 3x |
| Orange Money | jusqu'à 3 | 6-12 s | Token + IP allowlist | ~jusqu'à 3x |
| MoMo MTN | jusqu'à 2 | 5-10 s | Signature + API key | selon config |
| Paystack | jusqu'à 5 | 3-8 s | x-paystack-signature | 24h |
Sécurité et stratégies de retry
Côté sécurité, vérifiez toujours la signature sur le corps brut de la requête, ajoutez une allowlist d'IP quand le provider la publie, et rejetez tout appel non signé avec un 401. Côté fiabilité de VOS propres traitements aval (facture, e-mail, mise à jour stock), utilisez une file d'attente et un retry exponentiel pour absorber les pannes temporaires.
| Étape aval | Stratégie retry | Délais | Statut final |
|---|---|---|---|
| Écriture commande payée | Immédiat + idempotent | 0 s | confirmed |
| Génération facture PDF | Exponentiel | 2s, 8s, 32s | invoiced |
| Envoi e-mail / SMS | Exponentiel | 2s, 8s, 32s | notified |
| Mise à jour stock | Immédiat transactionnel | 0 s | stock_ok |
| Sync comptable | File batch | jusqu'à 5 min | synced |
| Alerte échec | Dead-letter + humain | après 3 échecs | escalated |
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
Mini cas pratique
Fatou, développeuse pour une épicerie en ligne à Dakar, encaissait 900 commandes/mois via Wave et Orange Money. Un pic de trafic provoquait des timeouts et des webhooks rejoués : environ 4,5 %, soit 40 commandes/mois, étaient dupliquées. Après ajout d'une clé d'idempotence à TTL 24h et d'une file avec retry exponentiel (2s, 8s, 32s), le taux de doublons est passé à 0,3 %. Le temps de support mensuel consacré aux litiges de double-paiement a chuté d'environ 12 heures, soit près de 90 000 FCFA de charge évitée.
FAQ
Pourquoi un webhook arrive-t-il plusieurs fois ? Parce que le provider considère l'appel échoué s'il ne reçoit pas un 200 rapide. Une réponse lente ou une erreur transitoire déclenche un renvoi : jusqu'à 3 fois pour Wave et Orange Money, 5 fois pour Paystack sur 24h.
Que stocker pour l'idempotence ? Au minimum la reference traitée et son statut, avec un TTL de 24h. Si la même référence revient, renvoyez 200 sans re-jouer la facture, l'e-mail ou la mise à jour stock.
Comment vérifier la signature correctement ? Calculez le HMAC sur le corps brut reçu, avant tout parsing JSON, puis comparez en temps constant. Un JSON re-sérialisé casse la signature et produit de faux 401.
Quel délai avant de considérer un paiement perdu ? Si aucun webhook n'arrive après 60 secondes, interrogez l'endpoint de vérification (GET status). La latence normale étant de 4 à 12 secondes, 60 secondes laisse une marge confortable.
Faut-il une file d'attente pour tout ? Non pour l'écriture « commande payée », qui doit être immédiate et idempotente. Oui pour les tâches aval (PDF, e-mail, sync compta) qui bénéficient d'un retry exponentiel et d'une dead-letter queue.
Discutons de votre projet. Nous fiabilisons vos encaissements mobile money avec webhooks idempotents, signatures vérifiées et files de retry. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.

