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 Python LigdiCash expose trois objets principaux — Invoice, Withdrawal et get_transaction — qui couvrent l’ensemble des flux de paiement. Contrairement aux autres SDK, l’initialisation se fait via des variables globales de module, pas via une instance de classe.

Installation

pip install ligdicash
Prérequis : Python ≥ 3.0. La dépendance requests est installée automatiquement.

Initialisation

Python
import ligdicash

ligdicash.api_key   = "{API_KEY}"
ligdicash.auth_token = "{AUTH_TOKEN}"
ligdicash.platform  = "live"
Obtenez votre api_key et votre auth_token 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.
Python
import ligdicash

# 1. Décrire la facture
invoice = ligdicash.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.add_item(name="Chemise kente", description="Taille M", quantity=2, unit_price=15000)
invoice.add_item(name="Frais de livraison", description="", quantity=1, unit_price=1500)

# 3. Lancer le paiement
response = invoice.pay_with_redirection(
    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
payment_url = response.response_text
redirect_user(payment_url)
Ne jamais ouvrir payment_url dans une iframe — LigdiCash la bloque. Redirigez dans le même onglet, un nouvel onglet, ou un popup. Sur mobile natif, utilisez une WebView.
Laissez toujours customer vide dans le payin avec redirection (c’est le comportement par défaut). Si vous passez un numéro, LigdiCash filtre la page de paiement pour ne montrer que les opérateurs de ce numéro.

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.
Python
import ligdicash

# 1. Décrire la facture (identique au payin avec redirection)
invoice = ligdicash.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.add_item(name="Chemise kente", description="Taille M", quantity=2, unit_price=15000)

# 2. Lancer le paiement (avec OTP fourni par le client)
response = invoice.pay_without_redirection(
    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
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

Python
import ligdicash

withdrawal = ligdicash.Withdrawal(
    amount=5000,
    description="Remboursement commande ORD-20240510",
    customer="22670123456",
)

response = 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"},
)

token = response.token

Directement vers le mobile money

Python
response = 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 l’endpoint 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 get_transaction avec le token stocké à la création (pas le token du callback, qui est différent).
Python
import ligdicash

token = "eyJ0eXAiOiJ..."   # Token retourné lors de la création

# Payin
transaction = ligdicash.get_transaction(token, "payin")

# Payout client (withdrawal/create)
# transaction = ligdicash.get_transaction(token, "client_payout")

# Payout marchand (straight/payout)
# transaction = ligdicash.get_transaction(token, "merchant_payout")

if transaction.status == "completed":
    # Livrer la commande / valider le paiement
    pass
elif transaction.status == "pending":
    # Paiement en cours — relancer dans quelques secondes
    pass
else:
    # Paiement échoué ou annulé
    pass
Champs disponibles sur transaction :
AttributTypeDescription
statusstr"completed", "pending", "cancelled"
response_codestr"00" succès, "01" échec
amountintMontant de la transaction
operator_idstrIdentifiant de l’opérateur
operator_namestrNom de l’opérateur
customerstrNuméro du client
tokenstrToken de la transaction
custom_datadictDonnées personnalisées envoyées à la création
wikilistLiens vers les codes d’erreur de l’endpoint
Ne livrez jamais une commande uniquement sur la base d’un callback entrant. Appelez toujours get_transaction avec le token stocké à la création pour confirmer le statut côté serveur LigdiCash. Voir Sécurisation du callback.

Gestion des erreurs

Toutes les erreurs héritent de ligdicash.LigdicashError et exposent .code et .message.
Python
import ligdicash

try:
    response = invoice.pay_with_redirection(
        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"},
    )
except ligdicash.AuthenticationError as e:
    # Clé API ou token d'authentification invalide
    print(e.message)
except ligdicash.MerchantPayinDisabledError as e:
    # La fonctionnalité payin n'est pas activée pour ce projet
    print(e.message)
except ligdicash.InvalidAmountError as e:
    # Montant hors de la plage [20 ; 1 000 000] XOF
    print(e.message)
except ligdicash.LigdicashError as e:
    # Toute autre erreur LigdiCash
    print(f"{e.code}: {e.message}")
Classes d’erreur disponibles :
ClasseDéclenchée quand
AuthenticationErrorapi_key ou auth_token invalide
ApplicationAuthenticationErrorApplication non authentifiée
MerchantPayinDisabledErrorPayin non activé sur le projet
MerchantPayoutDisabledErrorPayout non activé sur le projet
MerchantBalanceLowErrorSolde marchand insuffisant
CustomerDoesNotExistErrorClient non enregistré sur la plateforme
InvalidAmountErrorMontant hors de la plage [20 ; 1 000 000]
InvalidTokenErrorToken invalide ou absent
InvoiceNotFoundErrorFacture introuvable
TransactionAlreadyExistErrorTransaction déjà créée
RecipientOperatorNotIdentifiedErrorOpérateur du destinataire non identifié
FeatureNotTestableErrorFonctionnalité indisponible en mode "test"

Liens utiles