lomi.
SDKs

SDK Python

SDK Python officiel pour l’API de paiement lomi.

SDK Python officiel pour l’API de paiement lomi. Compatible Django, Flask, FastAPI et Python 3.9+.

Installation

pip install lomi-sdk

Ou avec Poetry :

poetry add lomi-sdk

Démarrage rapide

import os
from lomi import LomiClient

client = LomiClient(
    api_key=os.environ["LOMI_API_KEY"],
    environment="test"  # « test » = bac à sable ; « live » = production
)

Environnements :

  • 'test'https://sandbox.api.lomi.africa
  • 'live'https://api.lomi.africa

Exemples de paiement

Créer une session de paiement

session = client.checkout_sessions.create({
    "amount": 10000,
    "currency_code": "XOF",
    "title": "Abonnement Premium",
    "description": "Accès mensuel aux fonctionnalités premium",
    "customer_email": "customer@example.com",
    "success_url": "https://yoursite.com/success",
    "cancel_url": "https://yoursite.com/cancel",
    "metadata": {"order_id": "ORD-123"}
})

print(f"Redirection vers : {session['checkout_url']}")

Créer un lien de paiement

link = client.payment_links.create({
    "link_type": "product",
    "title": "Formule Pro",
    "currency_code": "XOF",
    "product_id": "prod_abc123...",
    "allow_coupon_code": True
})

print(f"Partagez ce lien : {link['url']}")

Lister les transactions avec filtres

transactions = client.transactions.list(
    status="completed",
    provider="WAVE",
    startDate="2024-01-01T00:00:00Z",
    pageSize=50
)

for tx in transactions:
    print(f"{tx['id']}: {tx['gross_amount']} {tx['currency_code']}")

Gestion des clients

Créer un client

customer = client.customers.create({
    "name": "Fatou Diop",
    "email": "fatou@example.com",
    "phone_number": "+221771234567",
    "country": "Senegal",
    "city": "Dakar",
    "metadata": {"source": "website"}
})

print(f"ID client : {customer['id']}")

Transactions d’un client

transactions = client.customers.get_transactions("cus_abc123...")

Produits et abonnements

Créer un produit

product = client.products.create({
    "name": "Formule Premium",
    "description": "Accès à l’ensemble des fonctionnalités",
    "product_type": "recurring",
    "prices": [
        {
            "amount": 15000,
            "currency_code": "XOF",
            "billing_interval": "month",
            "is_default": True
        }
    ],
    "trial_enabled": True,
    "trial_period_days": 7
})

Ajouter un nouveau tarif

price = client.products.add_price("prod_abc123...", {
    "amount": 150000,
    "currency_code": "XOF",
    "billing_interval": "year"
})

Annuler un abonnement

cancelled = client.subscriptions.cancel("sub_abc123...", {
    "cancel_at_period_end": True,
    "reason": "Demande du client"
})

Virements

Initier un retrait

payout = client.payouts.create({
    "amount": 100000,
    "currency_code": "XOF",
    "payout_method_id": "pm_abc123...",
    "description": "Retrait mensuel"
})

Payer un bénéficiaire

beneficiary_payout = client.beneficiary_payouts.create({
    "amount": 50000,
    "currency_code": "XOF",
    "beneficiary_phone": "+221771234567",
    "beneficiary_name": "Nom du prestataire",
    "provider_code": "WAVE"
})

Compte et organisation

Obtenir le solde du compte

balances = client.accounts.get_balance()
xof_balance = client.accounts.get_balance(currency="XOF")

print(f"Disponible : {xof_balance['available']}")

Indicateurs de l’organisation

metrics = client.organizations.get_metrics()

print(f"MRR : {metrics['mrr']}")
print(f"Nombre de clients : {metrics['total_customers']}")

Gestion des erreurs

from lomi import LomiClient, LomiError, LomiNotFoundError

try:
    customer = client.customers.get("invalid_id")
except LomiNotFoundError:
    print("Client introuvable")
except LomiError as e:
    print(f"Erreur API [{e.status_code}] : {e.message}")

Intégration Django

# settings.py
LOMI_API_KEY = os.environ.get("LOMI_API_KEY")
LOMI_WEBHOOK_SECRET = os.environ.get("LOMI_WEBHOOK_SECRET")

# views.py
import hmac
import hashlib
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings

@csrf_exempt
def lomi_webhook(request):
    signature = request.headers.get("x-lomi-signature")
    expected = hmac.new(
        settings.LOMI_WEBHOOK_SECRET.encode(),
        request.body,
        hashlib.sha256
    ).hexdigest()

    if not hmac.compare_digest(signature, expected):
        return JsonResponse({"error": "Invalid signature"}, status=400)

    event = json.loads(request.body)

    if event["type"] == "PAYMENT_SUCCEEDED":
        # Traiter le paiement réussi
        transaction = event["data"]
        print(f"Paiement reçu : {transaction['gross_amount']}")

    return JsonResponse({"received": True})

Intégration Flask

import hmac
import hashlib
import os
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    signature = request.headers.get("x-lomi-signature")
    secret = os.environ["LOMI_WEBHOOK_SECRET"].encode()
    expected = hmac.new(secret, request.data, hashlib.sha256).hexdigest()

    if not hmac.compare_digest(signature, expected):
        return jsonify({"error": "Invalid signature"}), 400

    event = request.json

    if event["type"] == "PAYMENT_SUCCEEDED":
        # Traiter le paiement
        pass

    return jsonify({"received": True})

Services disponibles

ServiceMéthodes
accountslist, get, get_balance, get_balance_breakdown, check_balance
beneficiary_payoutslist, get, create
checkout_sessionslist, get, create
customerslist, get, create, update, delete, get_transactions
discount_couponslist, get, create, get_performance
organizationslist, get, get_metrics
payment_linkslist, get, create
payment_requestslist, get, create
payoutslist, get, create
productslist, get, create, add_price, set_default_price
refundslist, get, create
subscriptionslist, get, get_by_customer, cancel
transactionslist, get
webhook_delivery_logslist, get
webhookslist, get, create, update, delete

Ressources

Sur cette page