Use this file to discover all available pages before exploring further.
Windsurf et son assistant Cascade peuvent générer du code d’intégration LigdiCash. En ajoutant un fichier de règles à votre projet, Cascade connaît les conventions de l’API dès le départ.
Téléchargez le ZIP ou installez via npx skills. Les fichiers references/ peuvent être ajoutés via Add Context dans Cascade pour enrichir chaque session.
Créez .windsurf/rules.md à la racine de votre projet :
# 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## 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.
Utilisez ces prompts dans le chat Cascade (Cmd+L ou Ctrl+L).
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
Cascade comprend le contexte de vos fichiers ouverts. Ouvrez le fichier où vous intégrez LigdiCash avant de lancer un prompt — la réponse sera directement adaptée à votre code existant.