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.

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.

Installation

npm install ligdicash
Prérequis : Node.js. La dépendance cross-fetch est installée automatiquement.

Initialisation

import Ligdicash from "ligdicash";

const client = new Ligdicash({
  apiKey: "{API_KEY}",
  authToken: "{AUTH_TOKEN}",
  platform: "live",
  baseUrl: "https://app.ligdicash.com",
});
Obtenez votre apiKey et votre authToken depuis le dashboard LigdiCash en créant un projet API.

Payin avec redirection

Le client est redirigé vers la page de paiement hébergée par LigdiCash. C’est le flux recommandé pour les boutiques en ligne.
TypeScript
// 1. Créer la facture
const 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",
});

// 2. Ajouter les articles
invoice.addItem({ name: "Chemise kente", description: "Taille M", quantity: 2, unit_price: 15000 });
invoice.addItem({ name: "Frais de livraison", description: "", quantity: 1, unit_price: 1500 });

// 3. Lancer le paiement
const response = await invoice.payWithRedirection({
  return_url: "https://masuperboutique.com/commande/succes",
  cancel_url: "https://masuperboutique.com/commande/annulation",
  callback_url: "https://backend.masuperboutique.com/ligdicash/callback",
  custom_data: { transaction_id: "ORD-20240512" },
});

// 4. Rediriger le client
const paymentUrl = response.response_text;
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.

Payin sans redirection

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 facture
const 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érieure
const 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é.

Payout

Envoyez de l’argent vers un client — remboursement, salaire, gain.

Vers le wallet LigdiCash du client

TypeScript
const withdrawal = client.Withdrawal(5000, "Remboursement commande ORD-20240510", "22670123456");

const response = await withdrawal.send({
  type: "client",
  to_wallet: false,  // false = virement automatique vers le mobile money lié
  callback_url: "https://backend.masuperboutique.com/ligdicash/callback-payout",
  custom_data: { transaction_id: "REFUND-20240512" },
});

const token = response.token;

Directement vers le mobile money

TypeScript
const response = await withdrawal.send({
  type: "merchant",  // Payout direct, sans wallet intermédiaire
  callback_url: "https://backend.masuperboutique.com/ligdicash/callback-payout",
  custom_data: { transaction_id: "PAY-20240512" },
});
type: "client" utilise POST /pay/v01/withdrawal/create (via wallet LigdiCash). type: "merchant" utilise POST /pay/v01/straight/payout (mobile money direct, plus lent). Voir Payout — Introduction.

Vérification de statut

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

// Payin
const 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éTypeDescription
statusstring"completed", "pending", "cancelled"
response_codestring"00" succès, "01" échec
amountnumberMontant de la transaction
operator_idstringIdentifiant de l’opérateur
operator_namestringNom de l’opérateur
customerstringNuméro du client
tokenstringToken de la transaction
custom_dataobjectDonnées personnalisées envoyées à la création
wikistring[]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.

Types TypeScript

Le SDK exporte les types suivants pour vos signatures de fonction et vos interfaces :
TypeScript
import type {
  InvoiceParam,
  InvoiceItemParam,
  PayWithRedirectionParam,
  PayWithoutRedirectionParam,
  BaseResponseType,
} from "ligdicash";
TypeUsage
InvoiceParamParamètres du constructeur Invoice
InvoiceItemParamParamètres de addItem
PayWithRedirectionParamParamètres de payWithRedirection
PayWithoutRedirectionParamParamètres de payWithoutRedirection
BaseResponseTypeRéponse retournée par les appels payin/payout

Gestion des erreurs

TypeScript
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.

Liens utiles