Use this file to discover all available pages before exploring further.
Le SDK JavaScript LigdiCash fonctionne en Node.js et dans les environnements TypeScript. Tous les appels réseau sont asynchrones (async/await). Les types TypeScript sont inclus dans le package.
Tous les appels réseau (payWithRedirection, payWithoutRedirection, send, getTransaction) retournent une Promise. Un await manquant provoque une comparaison silencieuse sur un objet Promise au lieu du résultat réel.
Ne jamais ouvrir paymentUrl dans une iframe — LigdiCash la bloque. Redirigez dans le même onglet, un nouvel onglet ou un popup. Sur mobile natif, utilisez une WebView.
Pattern popup anti-bloqueur : ouvrez window.open("about:blank") au clic utilisateur (avant le await), puis naviguez vers paymentUrl après réception de la réponse. Cela contourne les bloqueurs de popups navigateur.
Le client paie directement depuis votre interface. Vous devez collecter son numéro de téléphone et, selon l’opérateur, son code OTP.
TypeScript
// 1. Créer la factureconst invoice = client.Invoice({ currency: "xof", description: "Commande #ORD-20240512", customer_firstname: "Amadou", customer_lastname: "Ouédraogo", customer_email: "amadou@exemple.com", store_name: "MaSuperBoutique", store_website_url: "https://masuperboutique.com",});invoice.addItem({ name: "Chemise kente", description: "Taille M", quantity: 2, unit_price: 15000 });// 2. Lancer le paiement (avec OTP fourni par le client)const response = await invoice.payWithoutRedirection({ otp: "123456", // Code OTP saisi par le client customer: "22670123456", // Numéro du client, sans + ni espaces callback_url: "https://backend.masuperboutique.com/ligdicash/callback", custom_data: { transaction_id: "ORD-20240512" },});// 3. Stocker le token pour vérification ultérieureconst token = response.token;
Le mode OTP varie selon l’opérateur. Par exemple, pour un opérateur en mode USSD, le client génère son OTP sur son téléphone avant que vous ne soumetttiez. Pour un opérateur en mode approbation (ex. Moov Africa), envoyez otp: "" — le client approuve directement sur son application. Consultez la page de l’opérateur concerné.
Appelez getTransaction avec le token stocké à la création (pas le token du callback, qui est différent).
TypeScript
const token = "eyJ0eXAiOiJ..."; // Token retourné lors de la création// Payinconst transaction = await client.getTransaction(token, "payin");// Payout client (withdrawal/create)// const transaction = await client.getTransaction(token, "client_payout");// Payout marchand (straight/payout)// const transaction = await client.getTransaction(token, "merchant_payout");if (transaction.status === "completed") { // Livrer la commande / valider le paiement} else if (transaction.status === "pending") { // Paiement en cours — relancer dans quelques secondes} else { // Paiement échoué ou annulé}
Champs disponibles sur transaction :
Propriété
Type
Description
status
string
"completed", "pending", "cancelled"
response_code
string
"00" succès, "01" échec
amount
number
Montant de la transaction
operator_id
string
Identifiant de l’opérateur
operator_name
string
Nom de l’opérateur
customer
string
Numéro du client
token
string
Token de la transaction
custom_data
object
Données personnalisées envoyées à la création
wiki
string[]
Liens vers les codes d’erreur de l’endpoint
Ne livrez jamais une commande uniquement sur la base d’un callback entrant. Appelez toujours getTransaction avec le token stocké à la création pour confirmer le statut côté serveur LigdiCash. Voir Sécurisation du callback.
try { const response = await invoice.payWithRedirection({ return_url: "https://masuperboutique.com/succes", cancel_url: "https://masuperboutique.com/annulation", callback_url: "https://backend.masuperboutique.com/callback", custom_data: { transaction_id: "ORD-20240512" }, });} catch (error) { // Le SDK lève une exception en cas d'erreur HTTP ou d'erreur API console.error(error);}
Vérifiez aussi response.response_code après chaque appel : "00" indique un succès, "01" une erreur. En cas d’erreur, consultez response.wiki pour obtenir l’URL de détail des sous-codes.