Skip to content

Webhooks ​

Soyez notifié des événements en temps réel, de serveur à serveur.

Événements ​

ÉvénementÉmis quand
payment.confirmedPaiement confirmé on-chain.
payment.failedPaiement en échec (montant, réseau, délai).
conversion.settledConversion USDT → FCFA verrouillée.
payout.settledVersement Mobile Money effectué.

Vérifier la signature ​

Vérifier la signature (Node.js)

js
import { createHmac, timingSafeEqual } from "node:crypto";

export function signatureValide(corpsBrut, entete, secret) {
  const attendu = createHmac("sha256", secret).update(corpsBrut).digest("hex");
  const a = Buffer.from(attendu);
  const b = Buffer.from(entete ?? "");
  // Longueurs différentes : timingSafeEqual lève au lieu de rendre false.
  if (a.length !== b.length) return false;
  // Comparaison à temps CONSTANT : un === fuite la position du premier octet
  // faux, ce qui suffit à reconstituer la signature par essais successifs.
  return timingSafeEqual(a, b);
}

Signature obligatoire

Vérifiez TOUJOURS la signature avant de traiter un webhook, et refusez au-delà de la fenêtre d’horodatage. La signature est un HMAC-SHA256 de « timestamp.corps » — le corps BRUT, avant tout parsing — transmis dans X-Coinnective-Signature, l’horodatage dans X-Coinnective-Timestamp. Sans cette vérification, n’importe qui devinant l’URL pourrait forger un événement ; sans la fenêtre, un webhook intercepté resterait rejouable indéfiniment.

Paiement crypto vers Mobile Money.