Cette checklist couvre les points critiques à valider avant d’ouvrir votre intégration aux clients finaux. Parcourez-la dans l’ordre — chaque section s’appuie sur la précédente.Documentation Index
Fetch the complete documentation index at: https://developers.ligdicash.com/llms.txt
Use this file to discover all available pages before exploring further.
Sécurité
Les clés API ne sont pas exposées côté client
Les clés API ne sont pas exposées côté client
- Variables d’environnement serveur uniquement (
process.env,.envnon commité) -
.gitignoreinclut le fichier.env - Pas de clé dans les logs applicatifs
- Pas de clé dans les réponses d’API retournées au frontend
Le callback re-vérifie le statut via l'endpoint confirm
Le callback re-vérifie le statut via l'endpoint confirm
/confirm avec le token stocké à la création.- Le handler de callback appelle
/checkout-invoice/confirmavant toute action métier - Le token utilisé pour
confirmest celui stocké à la création (pas letokendu callback) - Un payload malformé ou avec un
transaction_idinconnu est ignoré silencieusement - Voir Sécurisation du callback
La callback_url est accessible publiquement
La callback_url est accessible publiquement
- URL accessible depuis une IP externe (pas
localhostou IP privée) - HTTPS recommandé (HTTP accepté par LigdiCash, mais déconseillé en production)
- Pas de règle firewall bloquant les IPs LigdiCash
- Si whitelisting requis : contactez le support LigdiCash pour obtenir les IPs à autoriser (max 3 IPs par projet)
Les identifiants de transaction sont non-devinables
Les identifiants de transaction sont non-devinables
transaction_id séquentiel (1, 2, 3…) permet à un attaquant d’énumérer vos transactions.- Utilisez un UUID v4 ou un ID préfixé avec suffixe aléatoire (
txn_+ timestamp + aléatoire) - Voir Pattern transaction_id
Technique
Flux payin avec redirection
Flux payin avec redirection
-
customerest vide ("") dans tous les exemples de payin redirect -
cancel_urlpointe vers la page d’annulation,return_urlvers la page de succès (pas inversé) - L’URL de paiement s’ouvre dans le même onglet, un nouvel onglet ou un popup — jamais dans une iframe
- Le frontend vérifie le statut réel via le backend après retour sur
return_url(la redirection n’est pas une preuve de paiement)
Flux payin sans redirection (le cas échéant)
Flux payin sans redirection (le cas échéant)
-
external_idetotpsont vides ("") dans les requêtes où ils ne sont pas utilisés - Le mode d’authentification (OTP USSD / SMS / Approbation) est correctement documenté dans l’UX pour chaque opérateur
- Pour le mode OTP SMS : la requête initiale est soumise avec
otp: "", puis re-soumise avec l’OTP reçu - Pour le mode Approbation (Moov) : le callback est la seule confirmation — pas de polling insuffisant
Gestion du callback
Gestion du callback
- Le handler est idempotent (deux appels avec le même
transaction_idn’exécutent la logique qu’une fois) - Les deux formats de callback sont gérés (
application/jsonetapplication/x-www-form-urlencoded) - Voir Idempotence du callback et Parser custom_data
Base de données et traçabilité
Base de données et traçabilité
- La transaction est créée en base avant l’appel à LigdiCash
- Le
tokenLigdiCash est stocké dès la création de la facture - Les logs d’entrée et de sortie (requêtes LigdiCash + callbacks reçus) sont conservés
- Voir Architecture recommandée
Fallback polling
Fallback polling
- Un job périodique vérifie les transactions restées
pendingdepuis plus de quelques minutes - Le polling s’arrête après un délai raisonnable (ex : 24h) — les transactions ne passent jamais automatiquement en
notcompleted - Le polling utilise le
tokenstocké à la création, pas un token issu du callback
Payout (si applicable)
Flux payout vers wallet LigdiCash
Flux payout vers wallet LigdiCash
- Le client destinataire possède un compte LigdiCash (requis pour
/withdrawal/create) - La sémantique de
top_up_walletest correctement implémentée :1= fonds dans le wallet,0= virement automatique vers le mobile money lié
Flux payout vers mobile money direct
Flux payout vers mobile money direct
- Le numéro de téléphone est au format
22670XXXXXXX(sans+, sans espaces) - L’endpoint
/straight/payoutest utilisé (pas/withdrawal/create) pour les destinataires sans compte LigdiCash
Business et opérationnel
Compte marchand et projet API
Compte marchand et projet API
- Le compte marchand LigdiCash est actif et vérifié (KYC complété)
- Le projet API est en mode production (pas de compte de test)
- Les opérateurs souhaités sont activés sur le projet API (vérifiez dans le dashboard)
- Visa activé séparément si vous en avez besoin (contrat spécifique)
Gestion des erreurs côté UX
Gestion des erreurs côté UX
- Chaque code d’erreur LigdiCash est mappé à un message lisible par l’utilisateur
- L’utilisateur est informé clairement si son paiement échoue, avec une invitation à réessayer
- Voir Erreurs courantes
Communication avec LigdiCash
Communication avec LigdiCash
- Votre
callback_urla été testée en conditions réelles - Vous avez un groupe d’intégration Microsoft Teams LigdiCash pour les urgences en production
- Si whitelisting IP requis : les IPs de votre serveur ont été transmises au support technique LigdiCash
Tests pré-production
Avant le go-live, effectuez au moins un test de bout en bout pour chaque flux que vous intégrez.| Scénario | À tester |
|---|---|
| Paiement réussi | Le statut passe à completed, la commande est confirmée |
| Paiement annulé par l’utilisateur | La cancel_url est atteinte, la commande reste pending puis expire |
| Callback reçu deux fois | La logique métier n’est exécutée qu’une fois |
Transaction toujours pending après 10 min | Le polling de fallback la met à jour correctement |
| Clé API invalide | L’erreur est capturée et loggée, l’utilisateur voit un message générique |
Pages associées
- Architecture recommandée — structure backend
- Sécurisation du callback — pattern de re-vérification
- Pattern transaction_id — identifier les transactions
- Gestion des erreurs — codes et stratégies
