Configuration des Webhooks
Configuration dans le Dashboard
Vous pouvez configurer vos webhooks directement depuis votre dashboard Lygos dans la section Configurations.URL du Webhook
L’URL du webhook doit être :- Sécurisée : Utilisez HTTPS avec un certificat SSL valide
- Accessible publiquement : L’URL doit être accessible depuis Internet
- Valide : Format d’URL correct (ex:
https://my-webhook-url.com/lygos)
Description du Webhook
Vous pouvez ajouter une description optionnelle pour vous souvenir de l’usage de chaque webhook (ex: “Webhook pour tag et lien de paiement”).Sécurité et Authentification
Authentification HMAC-SHA256
Lygos utilise l’algorithme HMAC avec SHA256 pour signer tous les webhooks envoyés. Cette signature permet de vérifier que les requêtes proviennent bien de Lygos et n’ont pas été modifiées en transit.Clé Secrète
Lors de la création d’un webhook, vous recevrez par email une clé secrète unique que vous devrez conserver précieusement. Cette clé est utilisée pour vérifier l’authenticité des webhooks. Vous pouvez régénérer votre clé secrète à tout moment depuis le dashboard. La régénération invalide immédiatement l’ancienne clé.Headers des Webhooks
Chaque webhook envoyé par Lygos contient les headers suivants :X-Signature: Signature HMAC-SHA256 calculée à partir du body et du timestampX-Timestamp: Timestamp Unix (en millisecondes) de la requêteContent-Type:application/json
Vérification de la Signature
Pour vérifier l’authenticité d’un webhook :- Récupérez les headers
X-SignatureetX-Timestamp - Concaténez le body de la requête (en string) avec le timestamp
- Calculez le HMAC-SHA256 de cette chaîne en utilisant votre clé secrète
- Comparez le résultat avec la valeur de
X-Signature - Si les valeurs correspondent, le webhook est authentique
Exemples de Code
Node.js / JavaScript
Python
Types d’Événements Disponibles
Vous pouvez sélectionner les types d’événements pour lesquels vous souhaitez recevoir des notifications :Marketplace
marketplace_deposit_completed- Dépôt marketplace réussimarketplace_deposit_failed- Dépôt marketplace échouémarketplace_deposit_submitted- Dépôt marketplace soumis
Lien de Paiement
payment_link_deposit_completed- Dépôt de lien de paiement réussipayment_link_deposit_failed- Dépôt de lien de paiement échouépayment_link_deposit_submitted- Dépôt de lien de paiement soumis
Passerelle de Paiement
gateway_deposit_completed- Dépôt passerelle réussigateway_deposit_failed- Dépôt passerelle échouégateway_deposit_submitted- Dépôt passerelle soumis
Structure du Payload
Chaque webhook reçu contient les informations suivantes dans le body de la requête :Champs du Payload
operationId(UUID) : Identifiant unique de l’opération (format UUID)status(string) : Statut de la transaction (voir Statuts possibles)amount(number) : Montant de la transactionbuyer(object, optionnel) : Informations sur l’acheteurname(string) : Nom de l’acheteuremail(string) : Email de l’acheteurphoneNumber(string) : Numéro de téléphone de l’acheteurcountry(string) : Pays de l’acheteur (ex: “CMR”)operator(string) : Opérateur Mobile Money utilisé (ex: “MTN_MOMO_CMR”)
Le champ
buyer peut être absent pour certaines transactions. Assurez-vous de
gérer ce cas dans votre code.Statuts Possibles
Les statuts suivants peuvent être renvoyés dans le webhook :INITIATED- Transaction initiée, en attente de traitementDEPOSIT_PENDING- Dépôt en cours de traitementDEPOSIT_COMPLETED- Dépôt complété avec succèsDEPOSIT_FAILED- Dépôt échouéDEPOSIT_REJECTED- Dépôt rejetéPAYOUT_PAID- Paiement sortant effectuéMANUAL_PAYOUT- Paiement sortant manuel
Exemples de Payloads
Exemple 1 : Transaction réussie avec buyer
Exemple 2 : Transaction en attente sans buyer
Exemple 3 : Paiement sortant
Bonnes Pratiques
- Validation : Validez toujours les données reçues dans le webhook
- Idempotence : Utilisez
operationIdpour éviter de traiter deux fois le même événement - Sécurité : Vérifiez toujours la signature des webhooks en utilisant votre clé secrète (voir Sécurité et Authentification)
- Variables d’environnement : Stockez votre clé secrète dans des variables d’environnement, ne la commitez jamais dans votre code
- Vérification du timestamp : Vérifiez que le timestamp n’est pas trop ancien pour éviter les attaques de replay (recommandé)
- Gestion d’erreurs : Répondez avec un code HTTP 200 même en cas d’erreur de traitement pour éviter les tentatives de retry
- Logging : Enregistrez tous les webhooks reçus pour le débogage et l’audit