Comment tester en sécurité dans la sandbox ?
Utilisez les clés de test, les moyens de paiement de test, les soldes de test et la vérification webhook avant le passage en production.
L’environnement de test lomi. vous permet d’exécuter des parcours de paiement complets, checkout hébergé, formulaire carte intégré et mobile money, sans mouvement de fonds réels ni impact sur les soldes live. Cette page est la référence unique pour simuler les paiements : quels numéros de carte utiliser, le comportement de Wave et MTN MoMo en test, et ce que vous devez observer dans le tableau de bord et via les webhooks.
Pour les clés API, les URL de base et les limites, voir Authentification. Pour votre première requête authentifiée, voir Intégration API.
Les transactions de test n’affectent jamais les soldes live, la trésorerie plateforme ni les virements sortants. Les e-mails et messages WhatsApp clients ne sont pas envoyés en mode test.
Environnement de test en bref
| Test | Live | |
|---|---|---|
| URL API | https://sandbox.api.lomi.africa | https://api.lomi.africa |
| Clé secrète | lomi_sk_test_… | lomi_sk_live_… |
| Clé publiable | lomi_pk_test_… | lomi_pk_live_… |
| Soldes | Solde de test du tableau de bord uniquement | Solde marchand réel |
| Réponses | "environment": "test" sur les ressources | "environment": "live" |
L’environnement est déterminé par votre clé API, pas par le nom d’hôte : une clé de test crée et lit toujours des données de test.
Checkout hébergé: démarrage rapide
Paiement carte bac à sable en cinq étapes (recettes complètes dans Recettes API et checkout hébergé) :
- Créer une session:
POST https://sandbox.api.lomi.africa/checkout-sessionsaveclomi_sk_test_…(amount,currency_code,success_url,cancel_urlminimum). Voir API sessions checkout. - Ouvrir l’URL: la réponse contient
checkout_url. - Payer avec une carte test: Carte,
4242 4242 4242 4242, expiration12/34, CVC123(liste complète). - Finaliser: transaction
completed; le solde test augmente. - Vérifier: mode Test du tableau de bord et webhooks (
"environment": "test").
POST /checkout-sessions → { "checkout_url": "https://…" } → paiement client → webhook + solde testComment le mode test est choisi
| Ce qui fixe l’environnement | Conséquence |
|---|---|
| Clé API test ou live | Les ressources portent "environment": "test" ou "live" |
| Lien de paiement ou session checkout | Le checkout hébergé suit l’environnement de ce lien ou de cette session |
| Même environnement partout | Solde test vs comptes live ; paiements carte, Wave ou MTN MoMo dans cet environnement |
API REST
Toute requête authentifiée avec une clé secrète de test s’exécute en mode test. Les sessions checkout, payment intents, liens de paiement et transactions créés portent "environment": "test".
Checkout hébergé
L’environnement du lien de paiement ou de la session checkout pilote le grand livre et le mode formulaire carte. Créez liens et sessions en mode Test dans le portail.
Tableau de bord
Basculez Test / Live dans le portail. Les liens, QR codes et articles créés en test n’apparaissent que dans les rapports et soldes de test.
Soldes de test et effets de bord
Lorsqu’une transaction de test passe à completed :
- Votre solde de test augmente (grand livre interne de test), pas votre solde retirable live.
- La trésorerie plateforme et les flux live ne sont pas mis à jour.
- Les métadonnées de transaction peuvent indiquer un crédit sur le grand livre de test.
Les e-mails et WhatsApp clients sont ignorés en mode test.
Pour le fonctionnement des soldes live après complétion, voir Soldes et règlement.
Tester les paiements par carte
En bac à sable, les paiements carte s’appuient sur des numéros de carte de test qui reproduisent le comportement des émetteurs, approbation, refus et authentification forte, sans débiter quiconque. Utilisez-les uniquement avec des clés API de test et des sessions checkout en mode test.
N’utilisez jamais de vraies cartes en test, ni des numéros de test en production. Les vraies cartes en test sont interdites ; les numéros de test en live ne fonctionnent pas.
Comment un paiement carte se termine en test
| Parcours | Ce que vous faites | Ce que fait lomi. |
|---|---|---|
| Checkout hébergé | URL de test → Carte → saisie d’un numéro de test | Transaction en attente, puis completed et crédit du solde de test après confirmation réussie |
| API encaissement carte | POST /charge/card avec lomi_sk_test_… → confirmation avec lomi_pk_test_… côté client | Même logique : en attente jusqu'à confirmation, puis completed et solde de test crédité |
Le formulaire carte du checkout hébergé suit toujours l’environnement du lien de paiement ou de la session (test ou live).
Saisir une carte de test
Dans le navigateur ou dans votre formulaire carte :
- Numéro : une valeur des tableaux ci-dessous (les espaces sont optionnels ;
4242 4242 4242 4242et4242424242424242sont équivalents). - Expiration : toute date future, par exemple
12/34. - CVC : trois chiffres pour la plupart des marques ; quatre chiffres pour les numéros de test American Express.
- Titulaire et facturation : toute valeur acceptée par votre formulaire.
Pour tester un échec de validation du CVC, vous devez saisir un CVC. Si le champ est vide, le contrôle peut être ignoré et une carte « CVC incorrect » ne se comportera pas comme prévu.
Paiements réussis par marque
Ces numéros aboutissent à un débit standard en test lorsque la confirmation réussit.
| Marque | Numéro de carte |
|---|---|
| Visa | 4242 4242 4242 4242 |
| Visa (débit) | 4000 0566 5556 5556 |
| Mastercard | 5555 5555 5555 4444 |
| Mastercard (série 2) | 2223 0031 2200 3222 |
| Mastercard (débit) | 5200 8282 8282 8210 |
| Mastercard (prépayée) | 5105 1051 0510 5100 |
| American Express | 3782 822463 10005 |
| Discover | 6011 1111 1111 1117 |
| Diners Club | 3056 930009 02004 |
| JCB | 3566 0020 2036 0505 |
| UnionPay | 6200 0000 0000 0005 |
Pour la QA quotidienne, 4242 4242 4242 4242 (Visa) est le choix par défaut.
Paiements refusés ou en échec
Servez-vous de ces numéros pour vérifier les messages d’erreur, les échecs de checkout et les webhooks PAYMENT_FAILED. La transaction ne doit pas passer en completed et le solde de test ne doit pas augmenter.
| Scénario | Numéro de carte | Résultat typique |
|---|---|---|
| Refus générique | 4000 0000 0000 0002 | Carte refusée |
| Fonds insuffisants | 4000 0000 0000 9995 | Fonds insuffisants |
| Carte perdue | 4000 0000 0000 9987 | Carte perdue |
| Carte volée | 4000 0000 0000 9979 | Carte volée |
| Carte expirée | 4000 0000 0000 0069 | Carte expirée |
| CVC incorrect | 4000 0000 0000 0127 | CVC incorrect (saisir un CVC à 3 chiffres) |
| Numéro de carte invalide | 4242 4242 4242 4241 | Numéro invalide |
| Erreur de traitement | 4000 0000 0000 0119 | Erreur de traitement |
| Plafond de vélocité dépassé | 4000 0000 0000 6975 | Limite de vélocité |
| Refus après enregistrement de la carte | 4000 0000 0000 0341 | Enregistrement OK ; débits ultérieurs refusés |
Voir Erreurs pour la forme des échecs dans les réponses API.
Authentification forte (3D Secure)
Certains numéros déclenchent une étape d’authentification (redirection ou fenêtre modale) avant la réussite du paiement. Utilisez-les pour les cartes enregistrées, les abonnements et les parcours où il faut gérer « authentifier » ou « paiement refusé ».
| Scénario | Numéro de carte | Comportement attendu |
|---|---|---|
| Authentification requise (paiement présent) | 4000 0025 0000 3155 | Le client doit s’authentifier ; succès après le défi |
| Authentification toujours requise | 4000 0027 6000 3184 | Authentification à chaque paiement |
| Déjà configurée pour hors session | 4000 0038 0000 0446 | En session, auth possible ; hors session peut réussir sans nouvelle invite |
| Auth OK puis fonds insuffisants | 4000 0082 6000 3178 | Auth possible ; le débit échoue malgré tout pour fonds insuffisants |
| 3D Secure obligatoire (succès) | 4000 0000 0000 3220 | Auth obligatoire ; paiement réussi après complétion |
| 3D Secure obligatoire (refus après auth) | 4000 0084 0000 1629 | Auth obligatoire ; paiement refusé après auth |
| 3D Secure optionnel (succès) | 4000 0000 0000 3055 | Auth possible ; paiement peut réussir sans défi |
| 3D Secure frictionless | 4000 0000 0322 0000 | Auth avec succès frictionless |
| Non inscrit au 3D Secure | 4242 4242 4242 4242 | Pas de défi ; Visa réussie classique |
| 3D Secure non pris en charge (Amex) | 3782 822463 10005 | Paiement sans 3D Secure sur cette marque |
Testez l’authentification sur votre checkout hébergé ou formulaire carte intégré, pas seulement via l’API, afin de reproduire l’expérience client de production.
Aide-mémoire: numéros les plus utiles
| Objectif | Numéro |
|---|---|
| Parcours nominal | 4242 4242 4242 4242 |
| Refus net | 4000 0000 0000 0002 |
| Défi 3D Secure | 4000 0025 0000 3155 |
| CVC incorrect | 4000 0000 0000 0127 |
| Fonds insuffisants | 4000 0000 0000 9995 |
Formulaires carte intégrés
Avec lomi Payment Elements ou l’API Payment Intents : créez un payment intent avec lomi_sk_test_…, montez l’UI carte avec lomi_pk_test_…, puis confirmez avec le client_secret retourné. Utilisez les numéros de test ci-dessus dans le champ carte.
Tester le mobile money
Wave
En mode test, lomi. crée une transaction completed et crédite votre solde de test dès l’enregistrement du checkout Wave. Le client peut encore voir l’interface Wave, mais le solde de test du tableau de bord se met à jour sans attendre un débit réel du portefeuille.
Comment tester :
- Créer un lien ou une session checkout en test avec Wave activé.
- Ouvrir le checkout et choisir Wave.
- Saisir un numéro valide au format E.164 (par ex.
+225 07 00 00 00 00pour la Côte d’Ivoire). - Compléter ou annuler sur l’écran Wave ; vérifier transaction et solde de test.
MTN MoMo
En mode test, la transaction est aussi completed et le solde de test est crédité à l’initiation du paiement MTN. Les mises à jour de statut en test sont traitées comme réussies pour le grand livre. Le checkout utilise le bac à sable MTN lorsque la session est en test.
Comment tester :
- Lien ou session en test avec MTN activé.
- Saisir un numéro de téléphone valide pour le pays (format international).
- Vérifier la transaction completed dans la vue test du tableau de bord.
Pour les numéros autorisés en bac à sable MTN, voir le portail développeur MTN MoMo.
Pays pris en charge (checkout hébergé)
| Pays | Indicatif | Environnement cible MTN |
|---|---|---|
| Côte d’Ivoire (CI) | +225 | mtnivorycoast |
| Cameroun (CM) | +237 | mtncameroon |
| Ghana (GH) | +233 | mtnghana |
| Ouganda (UG) | +256 | mtnuganda |
| Zambie (ZM) | +260 | mtnzambia |
| Bénin (BJ) | +229 | mtnbenin |
| Congo (CG) | +242 | mtncongo |
| Eswatini (SZ) | +268 | mtnswaziland |
| Guinée (GN) | +224 | mtnguineaconakry |
| Afrique du Sud (ZA) | +27 | mtnsouthafrica |
| Liberia (LR) | +231 | mtnliberia |
| Nigeria (NG) | +234 | mtnnigeria |
Carte vs mobile money en test
| Moyen | Crédit du solde de test | Argent réel |
|---|---|---|
| Cartes | Après confirmation carte réussie | Jamais |
| Wave | À la création de la transaction de test | Jamais |
| MTN MoMo | À la création de la transaction de test | Jamais |
Virements en mode test
Avec une clé API test, POST /payouts se comporte ainsi :
rail | destination | Clé test |
|---|---|---|
wave | self ou beneficiary | 400: virements Wave réservés au live ; aucun appel Wave |
bank, spi | self | Retraits test selon les enregistrements applicables |
spi | beneficiary | Peut créer des bénéficiaires en attente (pas de Wave live) |
Les virements Wave vers un tiers exigent recipient.name et recipient.phone avec une clé live. Le numéro n’a pas besoin de correspondre à un payout_method_id. Voir Virements.
GET /payouts avec une clé test ne liste que les retraits test ; les virements bénéficiaires live sont exclus.
Recettes API et checkout hébergé
curl -sS \
-H "X-API-Key: $LOMI_SECRET_KEY" \
"https://sandbox.api.lomi.africa/accounts"curl -sS -X POST "https://sandbox.api.lomi.africa/checkout-sessions" \
-H "X-API-Key: $LOMI_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency_code": "XOF",
"title": "Test bac à sable",
"success_url": "https://example.com/success",
"cancel_url": "https://example.com/cancel"
}'Ouvrez le checkout_url retourné et payez avec une carte de test ou le mobile money.
curl -sS -X POST "https://sandbox.api.lomi.africa/charge/card" \
-H "X-API-Key: $LOMI_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency_code": "XOF",
"customer_email": "test@example.com",
"customer_name": "Utilisateur test"
}'Utilisez le client_secret avec lomi_pk_test_… côté client. Voir Encaissements directs et lomi Payment Elements.
Créez des liens en mode Test dans le tableau de bord, ou via l’API avec votre clé de test pour environment: test. Voir Liens de paiement.
Tester les abonnements
Utilisez des clés API test et les flux de Paiements en bac à sable.
- Créez un produit récurrent avec
trial_enabled: trueoufirst_payment_type: non_initial(voir Produits). - Lien de paiement ou session: ouvrez le tunnel hébergé ou l’URL S’abonner de la vitrine avec le
product_idrécurrent. - Essai + carte: utilisez
4242 4242 4242 4242; le tunnel enregistre la carte via SetupIntent avec 0 dû aujourd’hui. AttendezSUBSCRIPTION_CREATEDà la fin de l’inscription. - Essai + Wave / MTN: complétez les coordonnées ; l’inscription doit réussir sans prélèvement en mode test.
- Inscription payante:
first_payment_type: initialet paiement test normal ; vérifiezstatus: activeet une transactioninstalment. - Webhooks: abonnez-vous à
SUBSCRIPTION_CREATED,SUBSCRIPTION_RENEWED,SUBSCRIPTION_CANCELLEDetPAYMENT_FAILEDpour les échecs de renouvellement.
Les renouvellements planifiés en test utilisent des dates futures ; inspectez next_billing_date via le tableau de bord ou l’API.
Webhooks en test
- Dans le tableau de bord (Developers → Webhooks), ajoutez une URL en mode Test.
- Utilisez le secret de signature de cette URL pour vérifier la signature sur le corps brut de la requête.
- Les paiements de test réussis émettent des événements comme
PAYMENT_SUCCEEDEDavec"environment": "test"le cas échéant. - Utilisez Test webhook pour envoyer un exemple
PAYMENT_SUCCEEDEDsans paiement réel.
Voir Webhooks. Pour l’automatisation, voir le Guide de tests.
Dépannage
| Symptôme | Cause probable | Action |
|---|---|---|
| Données live dans les réponses API | Utilisation de lomi_sk_live_… | Passer à lomi_sk_test_… et https://sandbox.api.lomi.africa |
| Échec carte immédiat | Numéro de refus ou règle CVC | Utiliser 4242…, expiration future, CVC à 3 chiffres |
| Carte OK mais pas de solde de test | Webhook absent ; mauvais environnement sur la session | Lien/session en test ; statut transaction dans le tableau de bord |
| Clé de test mais checkout « live » | Lien créé en mode Live | Recréer le lien en mode Test (tableau de bord ou clé API de test) |
| Wave/MTN OK, solde inchangé | Consultation du solde live au lieu du test | Basculer le tableau de bord en Test |
| Erreurs bac à sable MTN | numéro de téléphone ou identifiants invalides | Numéros documentés par MTN pour votre pays |
| Pas d’e-mail client | Normal en test | Notifications désactivées en test |
Documentation associée
- Authentification: clés, environnements, sécurité
- Intégration API: première requête et index API
- Sessions checkout: API checkout hébergé
- Encaissements directs: Wave, MTN et carte (
POST /charge/card) - Liens de paiement: liens réutilisables
- lomi Payment Elements: UI carte côté client
- Webhooks: abonnements aux événements
- Soldes et règlement: règles des soldes live
- Guide de tests: automatisation, CI, écouteurs webhook
Passer en production
Passez aux clés live uniquement quand votre intégration est validée de bout en bout. Voir la checklist de mise en production.
Comment faire un paiement de test ?
Créez une session de checkout en sandbox, ouvrez l’URL hébergée, payez avec un moyen de test et vérifiez le résultat.
Que vérifier avant de passer en live ?
Vérifiez les clés, URLs de checkout, webhooks, moyens de paiement, réconciliation et support avant d’activer les paiements réels.