Jèko
Webhooks

Intégration des Webhooks

Guide complet pour intégrer les webhooks Jèko dans votre application

Configuration initiale

1. Configurer l'URL du webhook

Pour configurer votre URL de webhook :

  1. Connectez-vous au Dashboard Business
  2. Naviguez vers Paramètres > API & Webhooks
  3. Entrez votre URL de webhook (doit être HTTPS)
  4. Copiez votre secret webhook (nécessaire pour vérifier les signatures)

Important : Votre endpoint webhook doit :

  • Utiliser HTTPS
  • Être accessible publiquement
  • Retourner un code de statut HTTP 2xx (le délai d'attente est de 5 secondes, voir Comportement des webhooks)

2. Créer votre endpoint webhook

Votre endpoint doit :

  • Accepter les requêtes POST
  • Vérifier la signature HMAC-SHA256
  • Traiter le payload JSON
  • Retourner un code HTTP 200 pour confirmer la réception

Structure du payload

Le corps de la requête est la transaction elle-même, sans enveloppe ni champ d'événement :

{
    "id": "txn_1234567890",
    "amount": {
      "amount": 10000,
      "currency": "XOF"
    },
    "fees": {
      "amount": 100,
      "currency": "XOF"
    },
    "status": "success",
    "counterpartLabel": "John Doe",
    "counterpartIdentifier": "+2250701234567",
    "paymentMethod": "wave",
    "transactionType": "PaymentRequest",
    "businessName": "Ma Boutique",
    "storeName": "Magasin Principal",
    "description": "Payment for order #12345",
    "executedAt": "2024-01-15 14:30:25",
    "transactionDetails": {
      "id": "d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc",
      "reference": "PAY-2024-001",
      "paymentLinkId": "abc123def456"
    }
  }

Les Service Providers réutilisent cette même URL d'entreprise () pour une demande de rattachement déjà configurée : Jèko y POSTe le JSON de la demande (id, status accepted/rejected, merchantBusinessId, …), signé avec Jeko-Signature. Ce n'est pas le payload transaction ci-dessus (pas de champ event). Voir Rattacher un marchand déjà inscrit.

Quand le webhook est envoyé

Il n'existe qu'un seul webhook transaction. Il est envoyé lorsque :

  • Une transaction de paiement est complétée avec succès
  • Une transaction de transfert est complétée avec succès
  • Une transaction de transfert échoue

Champs du payload

ChampTypeDescription
idstringIdentifiant unique de la transaction
amountMoneyModelMontant de la transaction
feesMoneyModelFrais de la transaction
statusstringStatut de la transaction (pending, success ou error)
counterpartLabelstringNom du contrepartie (client ou bénéficiaire)
counterpartIdentifierstringIdentifiant du contrepartie (numéro de téléphone, etc.)
paymentMethodstringMéthode de paiement utilisée (wave, orange, mtn, moov, djamo, bank)
transactionTypestringType de transaction (PaymentRequest)
businessNamestringNom de l'entreprise
storeNamestringNom du magasin
descriptionstringDescription de la transaction
executedAtstringDate d'exécution de la transaction, au format YYYY-MM-DD HH:mm:ss
transactionDetailsobjectDétails supplémentaires de la transaction
transactionDetails.idstring?ID de la demande de paiement ou du transfert (optionnel)
transactionDetails.referencestring?Référence de la transaction (optionnel)
transactionDetails.paymentLinkIdstring?ID du lien de paiement si applicable (optionnel)

Types de transactions

Le champ transactionType vaut "PaymentRequest".

Ne le confondez pas avec le champ type de l'endpoint , qui vaut payment ou transfer : ce sont deux modèles différents.

Statuts de transaction

Le champ status indique le statut :

  • "pending" : Transaction en cours de traitement
  • "success" : Transaction réussie
  • "error" : Transaction échouée

Vérification de la signature

Tous les webhooks sont signés avec HMAC-SHA256. Vous devez vérifier la signature pour authentifier la requête.

Algorithme de vérification

L'en-tête Jeko-Signature contient le HMAC-SHA256 du corps brut, encodé en hexadécimal minuscule, sans préfixe ni horodatage : a3f5c9…, et rien d'autre.

  1. Récupérez l'en-tête Jeko-Signature
  2. Calculez le HMAC-SHA256 du corps de la requête (raw body) avec votre secret webhook
  3. Comparez la signature calculée avec celle reçue

Important : Utilisez le corps de la requête brut (raw body), pas le JSON parsé.

Exemples d'intégration

Consultez Exemples de code pour des implémentations complètes dans différents langages.

Bonnes pratiques

  1. Vérifiez toujours la signature : Ne traitez jamais un webhook sans vérifier sa signature
  2. Idempotence : Traitez les webhooks de manière idempotente (évitez les traitements en double)
  3. Réponse rapide : Accusez réception sans attendre la fin de votre traitement. Le délai d'attente est de 5 secondes, au-delà le webhook est réessayé
  4. Logging : Enregistrez tous les webhooks reçus pour le débogage
  5. Gestion d'erreurs : Gérez les erreurs gracieusement et retournez toujours un code HTTP approprié

Consultez Bonnes pratiques pour plus de détails.

On this page