Avec plusieurs millions d'abonnés au Sénégal, Orange Money est un canal de paiement incontournable pour toute entreprise qui veut toucher l'ensemble du marché. L'API Orange Money eWallet permet d'initier des collectes et des virements directement depuis votre application.
Comment fonctionne le paiement Orange Money
Contrairement à Wave (qui utilise un lien de redirection), Orange Money fonctionne via un système d'OTP (One Time Password). Le client génère un code en composant #144#391*code_secret# sur son téléphone, puis vous saisissez ce code dans votre formulaire.
- Votre formulaire demande le numéro de téléphone et l'OTP au client
- Le client compose #144#391*code_secret# sur son téléphone pour générer l'OTP
- Votre serveur appelle l'API Paydeck avec le numéro, l'OTP et le montant
- Orange Money valide immédiatement — la réponse est synchrone
- Vous recevez status: 'success' en retour direct (pas de webhook nécessaire)
Intégration avec Paydeck
const payment = await client.payments.collect({
amount: 10000,
currency: 'XOF',
provider: 'orange_money_sn',
phone: '+221776543210',
otp: '123456', // Code OTP saisi par le client
reference: 'facture_2025_001',
})
if (payment.status === 'success') {
// Paiement confirmé immédiatement !
console.log('Paiement reçu :', payment.transactionId)
}Gérer le formulaire côté client
Le formulaire de paiement Orange Money doit guider l'utilisateur pour générer son OTP. Voici un exemple d'UI React qui explique la démarche :
function OrangeMoneForm({ onSubmit }) {
return (
<form onSubmit={onSubmit}>
<div className="otp-instructions">
<p>Composez <strong>#144#391*votre_code_secret#</strong> sur votre téléphone Orange.</p>
<p>Un code à 6 chiffres s'affiche. Saisissez-le ci-dessous.</p>
</div>
<input
type="tel"
placeholder="Numéro Orange Money"
pattern="^\+221[0-9]{9}$"
required
/>
<input
type="text"
placeholder="Code OTP (6 chiffres)"
maxLength={6}
inputMode="numeric"
required
/>
<button type="submit">Payer avec Orange Money</button>
</form>
)
}Virements sortants Orange Money
L'API Paydeck supporte aussi les virements vers des numéros Orange Money (disbursement). Utile pour les remboursements, paiements de salaires ou de commissions.
const disburse = await client.payments.disburse({
amount: 25000,
currency: 'XOF',
provider: 'orange_money_sn',
phone: '+221771234567',
reference: 'remboursement_2025_042',
description: 'Remboursement commande #042',
})Gestion des erreurs courantes
| Code | Signification | Solution |
|---|---|---|
| INVALID_OTP | Code OTP incorrect ou expiré | Demandez à l'utilisateur de regénérer un OTP |
| INSUFFICIENT_BALANCE | Solde insuffisant | Informer l'utilisateur d'approvisionner son compte |
| DUPLICATE_TRANSACTION | Transaction identique trop récente | Attendre 60s avant de réessayer |
| PHONE_NOT_FOUND | Numéro non enregistré Orange Money | Vérifier le numéro de téléphone |
Pourquoi utiliser Paydeck plutôt que l'API Orange Money directe
- Pas besoin d'un compte Orange Money Business — Paydeck gère tout
- API unifiée : même code pour Wave, Orange Money et carte bancaire
- Dashboard temps réel : toutes vos transactions au même endroit
- Gestion automatique des tokens OAuth2 Orange Money (expiry, renouvellement)
- Support et suivi si une transaction reste bloquée
