Orange Money pèse encore ~38 % des paiements mobiles au Sénégal en 2026. Ne pas l'intégrer, c'est laisser un gros tiers de votre marché payer par cash à la livraison ou abandonner le panier. Mais l'onboarding développeur est moins direct que Wave.
TL;DR
- Compte développeur Orange : validation 5-10 jours ouvrés (prévoir avant le sprint).
- L'API a 3 endpoints clés :
/oauth/token(auth),/webpayment(init),/webpayment/{id}(statut).- Pas de webhook officiel grand public en mai 2026 → polling + redirection retour.
- Comptez 2 heures pour une intégration fonctionnelle, 4 heures pour la version production-ready.
Étape 1 — créer le compte développeur
- Aller sur
developer.orange.com(oui, pasorange.sn). - Souscrire l'API "Orange Money Web Payment".
- Renseigner : raison sociale, numéro NINEA, RCCM, IBAN du compte de réception.
- Validation manuelle Orange : 5 à 10 jours ouvrés. Préparez-vous à relancer.
Étape 2 — récupérer un access_token
`ts
// lib/orange-money.ts
const OM_BASE = 'https://api.orange.com/orange-money-webpay/dev/v1';
async function getAccessToken() {
const auth = Buffer.from(
${process.env.OM_CLIENT_ID}:${process.env.OM_CLIENT_SECRET}
).toString('base64');
const res = await fetch(${OM_BASE}/oauth/token, {
method: 'POST',
headers: {
'Authorization': Basic ${auth},
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'grant_type=client_credentials',
});
const { access_token, expires_in } = await res.json();
return { access_token, expires_in };
}
`
Le token expire en 3600s. Cachez-le en Redis ou en mémoire avec TTL pour éviter de le re-générer à chaque paiement.
Étape 3 — initier un paiement
`ts
async function initPayment(orderId: string, amountXof: number) {
const { access_token } = await getAccessToken();
const res = await fetch(${OM_BASE}/webpayment, {
method: 'POST',
headers: {
'Authorization': Bearer ${access_token},
'Content-Type': 'application/json',
},
body: JSON.stringify({
merchant_key: process.env.OM_MERCHANT_KEY,
currency: 'OUV', // unités UEMOA = XOF
order_id: orderId,
amount: amountXof,
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
return_url: https://kolonell.com/checkout/om-return?order=${orderId},
cancel_url: https://kolonell.com/checkout/om-cancel?order=${orderId},
notif_url: https://kolonell.com/api/webhooks/orange-money,
lang: 'fr',
reference: orderId,
}),
});
return res.json(); // { pay_token, payment_url, notif_token }
}
`
L'utilisateur est redirigé vers payment_url. Il paie sur l'interface Orange Money, puis revient sur return_url.
Étape 4 — vérifier le statut au retour
L'absence de webhook fiable rend le polling obligatoire :
`ts
// app/checkout/om-return/page.tsx
async function verifyPayment(payToken: string) {
const { access_token } = await getAccessToken();
const res = await fetch(${OM_BASE}/webpayment/${payToken}, {
headers: { 'Authorization': Bearer ${access_token} },
});
const { status, txnid } = await res.json();
// status: SUCCESS | FAILED | PENDING | EXPIRED
return { status, txnid };
}
`
Sur SUCCESS → marquer la commande paid. Sur PENDING → afficher un écran "Vérification en cours" et re-poller toutes les 5s pendant 60s max.
Pièges à éviter
| Piège | Symptôme | Solution |
|---|---|---|
| Cacher le token au-delà de 3600s | 401 sur init | TTL Redis = expires_in − 60s |
| URL retour sans param order_id | Impossible de matcher au retour | Toujours encoder order=${id} |
Compter sur notif_url seul | Commandes "fantômes" | Polling au retour + nuit cron rattrapage |
| Tester en prod direct | Pertes financières si bug | Compte sandbox Orange + petits montants 100 XOF |
Mauvais format currency | Erreur 400 | UEMOA = "OUV" pas "XOF" |
Coût et frais
- Frais Orange Money commerçant : 1.5 % à 2.5 % selon volume négocié.
- Pas de frais de mise en place côté API.
- Reversement : T+1 ouvré sur compte bancaire ou IBAN renseigné.
FAQ
Q : Orange Money fonctionne-t-il avec un numéro non-Orange ?
R : Non, le payeur doit avoir un compte Orange Money actif. Les numéros Free/Expresso sont rejetés.
Q : Faut-il une intégration différente pour la Côte d'Ivoire ?
R : Oui — l'environnement OM CI a un endpoint et des merchant_keys séparés. Code structuré : un connector par pays.
Q : Comment gérer les remboursements ?
R : Voir notre guide remboursement Wave + OM →.
Conclusion
Orange Money n'est pas le plus moderne des fournisseurs de paiement, mais 38 % du marché justifie l'effort. Couplé à Wave (~52 %) et un fallback carte, vous couvrez 95 % des modes de paiement préférés au Sénégal.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.
