Use this file to discover all available pages before exploring further.
Claude Code est l’outil CLI d’Anthropic. En ajoutant un fichier CLAUDE.md à la racine de votre projet, vous lui transmettez le contexte LigdiCash une seule fois — il respectera ensuite les conventions API dans chaque réponse.
Installez le skill pour que Claude Code connaisse l’API LigdiCash dès le départ — téléchargement ZIP, installation via npx skills et prompts prêts à l’emploi.
Créez un fichier CLAUDE.md à la racine de votre projet avec le contenu suivant :
# Intégration LigdiCash## ContexteLigdiCash est un agrégateur de paiement mobile money en Afrique de l'Ouest.API base URL : https://app.ligdicash.com## Headers obligatoires sur chaque requête```Apikey: {API_KEY}Authorization: Bearer {AUTH_TOKEN}Accept: application/jsonContent-Type: application/json```## Format des données- Numéros de téléphone : format E.164 sans `+` ni espaces — ex. `22670000000`- Montants : entiers (XOF n'a pas de décimales) — ex. `5000`- Devise : `XOF` exclusivement- Clés API dans les exemples : toujours `{API_KEY}` et `{AUTH_TOKEN}`, jamais de vraies valeurs## Règle d'or — identification des transactionsLe `token` retourné à la création est différent du `token` reçu dans le callback.Ne jamais utiliser ce token pour identifier une transaction.Toujours passer un identifiant marchand dans `custom_data` à la création :```json"custom_data": { "transaction_id": "ORD-2025-00042" }```Dans le callback, `custom_data` revient sous forme de tableau d'objets. LigdiCash y ajoute ses propres champs (`hash`, `logfile`). Extraire avec :```javascriptconst entry = custom_data.find(e => e.keyof_customdata === "transaction_id");const transactionId = entry?.valueof_customdata;```## Payin avec redirection — pièges- `customer` doit rester `""` — sinon LigdiCash filtre les opérateurs visibles- Ne jamais ouvrir l'URL de paiement dans un `<iframe>` — utiliser le même onglet, un nouvel onglet, un popup ou une WebView native- Popup : ouvrir `about:blank` avant le `await fetch`, puis naviguer après réception de l'URL## Callback- LigdiCash envoie deux POST : un `application/x-www-form-urlencoded` + un `application/json`. Dédupliquer.- Re-vérifier chaque callback en appelant l'endpoint `confirm` avec le token stocké à la création. Ne jamais faire confiance au payload reçu.
Copiez-collez ces messages dans Claude Code pour les cas d’usage les plus fréquents.
Payin avec redirection (checkout-invoice)
Implémente un payin LigdiCash avec redirection en [langage].- Endpoint : POST https://app.ligdicash.com/pay/v01/redirect/checkout-invoice/create- Montant : variable (paramètre de la fonction)- customer doit rester "" (vide)- Passer transaction_id dans custom_data (objet) : { "transaction_id": "..." }- Ouvrir l'URL retournée dans un nouvel onglet (pas d'iframe)- Gérer les erreurs HTTP et les response_code != "00"Retourner l'URL de paiement ou lever une exception.
Handler de callback sécurisé
Écris un handler de callback LigdiCash en [langage/framework].Comportement requis :1. Accepter POST en application/json ET application/x-www-form-urlencoded2. Dédupliquer par token (idempotence)3. Re-vérifier le statut en appelant l'endpoint confirm avec le token stocké en base4. custom_data dans le callback est un tableau d'objets — extraire via keyof_customdata === "transaction_id"5. Mettre à jour la commande en base seulement si le statut confirm est "00"
Payout vers mobile money
Implémente un payout LigdiCash direct vers mobile money en [langage].- Endpoint : POST https://app.ligdicash.com/pay/v01/straight/payout- Paramètres : montant, numéro de téléphone (format 22670XXXXXXX), description- Passer transaction_id dans custom_data (objet) : { "transaction_id": "..." }- Gérer les erreurs et logger la wiki URL en cas d'échec
Payin sans redirection (OTP USSD)
Implémente un payin LigdiCash sans redirection (mode OTP USSD) en [langage].- Endpoint : POST https://app.ligdicash.com/pay/v01/straight/checkout-invoice/create- external_id doit rester "" (vide)- L'utilisateur génère son OTP via le menu USSD de son opérateur AVANT la soumission- Passer transaction_id dans custom_data (objet) : { "transaction_id": "..." }- La confirmation définitive passe par le callback (ne pas implémenter de polling)