Passer au contenu principal

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.

Cursor peut générer du code d’intégration LigdiCash en quelques secondes. En ajoutant un fichier de règles à votre projet, vous lui transmettez les conventions de l’API une seule fois.

Skill LigdiCash

Skill LigdiCash — téléchargement et installation

Téléchargez le ZIP ou installez via npx skills. Les fichiers references/ peuvent être glissés directement dans le chat Cursor comme contexte de session.

Pré-requis

  • Cursor installé
  • Accès au projet à intégrer

Fichier de règles à créer

Cursor supporte deux emplacements pour les règles de projet :
  • Cursor ≥ 0.45 : créez .cursor/rules/ligdicash.mdc à la racine
  • Ancienne version : créez .cursorrules à la racine
Ajoutez le contenu suivant :
# Intégration LigdiCash

## Contexte

LigdiCash 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/json
Content-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 transactions

Le `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 :
```javascript
const 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.

Prompts prêts à l’emploi

Utilisez ces prompts dans le chat Cursor (Cmd+L ou Ctrl+L).
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.
Écris un handler de callback LigdiCash en [langage/framework].

Comportement requis :
1. Accepter POST en application/json ET application/x-www-form-urlencoded
2. Dédupliquer par token (idempotence)
3. Re-vérifier le statut en appelant l'endpoint confirm avec le token stocké en base
4. 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"
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
Activez Codebase indexing dans les paramètres Cursor pour qu’il analyse automatiquement vos fichiers existants et génère du code cohérent avec votre architecture.