E-commerce11 min de lecture

Webhooks Wave: idempotence, signature et sécurité (Sénégal 2026)

Mohamed Bah·Fondateur, Kolonell
27 juin 2026
Partager :
Webhooks Wave: idempotence, signature et sécurité (Sénégal 2026)

Webhooks Wave: idempotence, signature et sécurité (Sénégal 2026)

E-commerce

Le verdict en trois phrases

Le webhook est la seule source de vérité d'un paiement Wave : ne validez jamais une commande sur le retour navigateur, toujours sur l'événement serveur. Trois mécanismes le rendent fiable : vérifier la signature HMAC pour authentifier Wave, une table d'idempotence indexée sur event_id pour ne traiter chaque événement qu'une fois, et répondre 200 immédiatement (< 10 s) puis traiter en queue. Sans ces trois piliers, vous risquez double-crédit, fausses confirmations et commandes fantômes.

Les événements webhook Wave à gérer

Wave envoie plusieurs types d'événements ; votre handler doit les router proprement. Ordres de grandeur 2026 (estimation, vérifier la doc Wave Business) :

ÉvénementStatutAction recommandée
checkout.session.completedcompletedValider commande, débloquer livraison
checkout.session.failedfailedNotifier client, proposer autre wallet
checkout.session.processingprocessingAttendre, ne rien débloquer
refund.completedrefundedAnnuler commande, mettre à jour stock
refund.failedfailedAlerter le support
balance.payoutsettledMarquer settlement T+1 reçu

Signature, idempotence et retries

Wave signe chaque payload (HMAC) et retente en cas d'échec. Paramètres de référence 2026 :

MécanismeValeur de référencePourquoi
Algorithme de signatureHMAC-SHA256Authentifier l'origine Wave
Header de signatureWave-SignatureÀ comparer au calcul local
Nombre de retries5 tentatives sur 24 hTolérer une panne temporaire
BackoffExponentiel (1m, 5m, 30m, 2h, 6h)Éviter le martèlement
Timeout attendu10 s maxAu-delà, Wave considère l'échec
Réponse attendueHTTP 200 rapideConfirme la réception

La table d'idempotence stocke chaque event_id avec une contrainte d'unicité : si l'événement arrive deux fois (retry après timeout), l'insertion échoue et le traitement est ignoré — le crédit n'a lieu qu'une fois.

Un handler Next.js robuste

`ts

export async function POST(req: Request) {

const raw = await req.text();

const sig = req.headers.get("Wave-Signature");

if (!verifyHmac(raw, sig, process.env.WAVE_SECRET))

return new Response("invalid signature", { status: 401 });

const event = JSON.parse(raw);

const inserted = await db.insertIfAbsent("wave_events", event.id);

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.

// Répondre 200 tout de suite, traiter ensuite en queue

if (inserted) await queue.enqueue("wave", event);

return new Response("ok", { status: 200 });

}

`

Le handler fait trois choses et rend la main : vérifier la signature, dédupliquer via insertIfAbsent, répondre 200. Tout le métier (validation commande, e-mail, stock) part en queue asynchrone pour rester sous les 10 s.

Mini cas pratique

Ibrahim, restaurateur à Dakar avec livraison, recevait 2 % de commandes payées mais jamais confirmées car son handler validait sur le retour navigateur — coupé quand le client fermait l'app. Sur 1 500 commandes/mois à 6 500 FCFA, cela représentait 30 commandes perdues, soit 195 000 FCFA/mois de litiges et remboursements manuels. En basculant sur le webhook signé + idempotent, le taux de confirmation est passé à 99,7 % et les litiges ont quasiment disparu.

FAQ

Pourquoi répondre 200 avant de traiter ?

Si votre traitement dépasse 10 s, Wave considère l'envoi en échec et déclenche un retry, ce qui crée des doublons. Répondre 200 vite puis traiter en queue casse ce cercle.

Que faire si la signature ne correspond pas ?

Renvoyer un 401 et ne rien traiter : un payload non signé correctement n'est pas authentifié et pourrait être une tentative de fraude.

Combien de temps Wave réessaie-t-il ?

En général 5 tentatives réparties sur 24 h avec un backoff exponentiel (estimation 2026). Votre table d'idempotence garantit qu'aucun de ces retries ne double-crédite.

Faut-il stocker tous les événements ?

Oui, au minimum l'event_id, le statut et l'horodatage. C'est indispensable pour la réconciliation comptable et pour rejouer un événement en cas de bug.

Discutons de votre projet. Nous livrons des webhooks Wave signés, idempotents et monitorés, prêts pour la production. WhatsApp +221 77 596 93 33.

Tags :#wave#webhook#idempotence#securite#api#nextjs#senegal#2026
Partager :

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.