Technique 10 Juin 2026 · 15 min

Comment intégrer Wave et Orange Money dans une app Node.js en 2026

Par KOUAME Ulrich

Le Mobile Money est le moyen de paiement numéro 1 en Afrique francophone. Avec plus de 30 millions de comptes actifs en Côte d'Ivoire et dans la zone UEMOA, ignorer Wave, Orange Money et MTN MoMo dans votre application, c'est ignorer vos utilisateurs.

Pourquoi intégrer le Mobile Money ?

En 2026, moins de 10% des Ivoiriens ont une carte bancaire. En revanche, plus de 80% ont un compte Mobile Money actif. Si vous construisez un SaaS destiné au marché africain, le paiement par Mobile Money n'est pas une option, c'est une nécessité.

  • Orange Money : Leader en Côte d'Ivoire, Sénégal, Mali, Burkina Faso
  • Wave : Croissance explosive au Sénégal et en Côte d'Ivoire
  • MTN MoMo : Dominant dans la zone CEMAC (Cameroun, Congo, etc.)

Architecture recommandée

L'approche la plus propre est d'utiliser une API Gateway qui centralise tous vos providers de paiement.

payment/
├── providers/
│   ├── orange-money.ts
│   ├── wave.ts
│   └── mtn-momo.ts
├── gateway.ts
├── webhook.ts
└── types.ts

1. Intégration Orange Money API

Orange Money expose deux APIs principales : le paiement direct (via USSD) et le paiement via API REST.

import axios from 'axios';

const ORANGE_BASE_URL = process.env.ORANGE_API_URL;
const ORANGE_CLIENT_ID = process.env.ORANGE_CLIENT_ID;
const ORANGE_CLIENT_SECRET = process.env.ORANGE_CLIENT_SECRET;

export async function initierPaiementOrange({
  montant, telephone, reference
}) {
  const token = await getOrangeToken();
  const response = await axios.post(
    ORANGE_BASE_URL + '/v2/payment/request',
    {
      amount: { value: montant, unit: 'XOF' },
      customer: { phone: telephone },
      reference,
    },
    { headers: { Authorization: 'Bearer ' + token } }
  );
  return response.data;
}

2. Intégration Wave API

Wave est particulièrement apprécié des développeurs pour sa documentation claire et son API bien conçue.

export async function initierPaiementWave({
  montant, telephone
}) {
  const response = await fetch(WAVE_API_URL + '/v1/checkout', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + WAVE_API_KEY,
    },
    body: JSON.stringify({
      amount: montant,
      currency: 'XOF',
      error_url: APP_URL + '/paiement/erreur',
      success_url: APP_URL + '/paiement/succes',
      client_reference: crypto.randomUUID(),
    }),
  });
  return response.json();
}

3. Webhooks : gérer les notifications

Le point critique de toute intégration Mobile Money est la gestion des webhooks.

export async function handlePaymentWebhook(req) {
  const body = await req.json();
  const signature = req.headers.get('x-signature');
  if (!verifySignature(body, signature)) {
    return new Response('Invalid signature', { status: 401 });
  }
  switch (body.provider) {
    case 'orange': await handleOrangeNotification(body); break;
    case 'wave': await handleWaveNotification(body); break;
    case 'mtn': await handleMtnNotification(body); break;
  }
  return new Response('OK', { status: 200 });
}

Pièges à éviter

  • Timeouts : Les APIs Mobile Money peuvent être lentes (5-15 secondes). Utilisez des webhooks.
  • Idempotence : Toujours gérer les doublons. Un même paiement peut être notifié plusieurs fois.
  • Frais : Chaque provider a sa structure de frais. Wave est généralement moins cher.
  • Montants minimum : Orange Money impose un minimum de 100 FCFA par transaction.

Solutions clé en main

Si vous ne voulez pas gérer l'intégration vous-même, des solutions comme CinetPay ou Paystack proposent une API unifiée qui couvre Orange Money, Wave et MTN MoMo.

Article rédigé par l'équipe technique de Codeur Innovation. Besoin d'aide ? Contactez-nous.