PayRouterDocs

Callbacks

PayRouter résout les paiements de façon asynchrone. Lorsqu'un fournisseur confirme le résultat final, PayRouter fait avancer la transaction dans sa machine à états puis notifie votre callback_url.

Votre callback marchand

Fournissez callback_url lors de la création d'une transaction. PayRouter y envoie l'état final en POST :

http
POST https://your-app/payments/callback
Content-Type: application/json

{
  "reference": "<payrouter-reference>",
  "merchant_reference": "INV-2026-0001",
  "transaction_status": "Success",        // ou "Failed"
  "amount": "100.00",
  "currency": "CDF",
  "customer_number": "0810000000",
  "provider_reference": "<provider-txn-id>"
}

Répondez 200 OK. Traitez le callback comme idempotent — vous pouvez le recevoir plusieurs fois pour la même transaction ; indexez votre traitement sur reference.

Ne faites pas aveuglément confiance aux montants. Re-récupérez GET /api/payments/transaction/<reference>/ pour confirmer le statut faisant autorité avant de libérer des biens ou des fonds.

Webhooks fournisseur → PayRouter (entrants)

PayRouter expose des endpoints vérifiés que les fournisseurs appellent. Vous ne les appelez pas ; ils sont documentés par souci d'exhaustivité. Chacun est vérifié cryptographiquement et échoue en mode fermé (HTTP 401) sur une signature invalide :

FournisseurEndpointVérification
FreshPayPOST /api/callbacks/freshpay/AES-128-CBC + HMAC-SHA256
UnipesaPOST /api/callbacks/unipesa/HMAC-SHA512

Les callbacks vérifiés sont stockés comme enregistrements RawCallback et traités de façon asynchrone, ce qui déclenche ensuite votre callback marchand ci-dessus. Les administrateurs peuvent auditer chaque callback entrant dans le portail admin (Callbacks).