Aller au contenu

Introduction

L'orchestrateur de paiement qui réunit Mobile Money, cartes et virements derrière une seule API.

Wajub est une plateforme d'orchestration de paiement pensée pour l'Afrique. Au lieu d'intégrer séparément chaque opérateur Mobile Money, chaque banque ou chaque agrégateur, vous intégrez une seule API. Wajub route ensuite chaque transaction vers le meilleur prestataire disponible, gère les échecs et expose des webhooks standardisés.

Vous découvrez les paiements en Afrique ?

Des termes comme Mobile Money, USSD, MTN MoMo, Orange Money, canal ou règlement vous sont peut-être inconnus. Lisez d'abord le Glossaire. Il définit chaque terme en langage simple, avant que vous n'écriviez la moindre ligne de code.

Avant de commencer

Pour suivre les exemples de ce site, il vous faut trois choses.

  1. Un compte Wajub. Créez-en un gratuitement sur dashboard.wajub.com.
  2. Vos API keys. Une fois connecté, ouvrez Settings → Developer → API Keys.
  3. Un client HTTP, curl, ou un SDK serveur (Node.js, Python, PHP, Go, Ruby, Java, C#).

Chaque compte possède quatre clés, deux par environnement :

CléEnvironnementOù l'utiliser
pk_test.…SandboxPublique. Sans risque dans un navigateur, initialise les paiements côté client.
sk_test.…SandboxPrivée. Côté serveur uniquement, aucun argent réel ne circule.
pk.…ProductionPublique. Même rôle côté client, sur des fonds réels.
sk.…ProductionPrivée. Côté serveur uniquement, déplace de l'argent réel.

Consultez Configurer votre compte pour une visite guidée du Dashboard, étape par étape.

Ce que vous pouvez construire

  • Encaissez des paiements par Mobile Money (MTN MoMo, Orange Money, Wave, Airtel), carte et virement bancaire.
  • Versez des fonds sur des portefeuilles Mobile Money via l'API des transferts ou gérez vos bénéficiaires.
  • Intégrez le checkout directement dans votre application avec Wajub Components, en React, Vue, Svelte ou JS natif.
  • Orchestrez intelligemment vos prestataires grâce au routage et au repli (Orchestration).

Comment fonctionne l'API

L'API Wajub suit les principes REST. Elle utilise des URLs prévisibles, accepte des corps de requête encodés en JSON, renvoie des réponses JSON et s'appuie sur les codes HTTP standard.

Toutes les requêtes passent par une seule URL de base :

URL de base
https://api.wajub.com

Votre premier appel

Un paiement commence par une requête. Vous envoyez le montant, la devise, la personne qui paie et la page vers laquelle la renvoyer une fois qu'elle a terminé. Wajub crée le paiement, le garde en pending et répond avec une page hébergée où le client choisit son opérateur et confirme. Personne n'est débité à ce stade, et aucun opérateur n'a encore été contacté.

Décrivez le payeur dans l'objet customer plutôt qu'à la racine de la requête. L'API accepte aussi un email au premier niveau, et les deux aboutissent sur la même fiche client, mais l'objet est la structure qui évolue avec vous : il porte aussi name, phone, address et metadata, et ses valeurs priment sur leurs équivalents à la racine. Le callback est l'adresse où Wajub renvoie le client une fois qu'il a terminé sur la page de paiement.

Lancez cet appel depuis votre serveur ou votre terminal avec votre clé privée sandbox (sk_test.…). Ne mettez jamais cette clé dans un navigateur ou une application mobile. Wajub fournit aussi une clé publique (pk_test.…) pour la seule opération sans risque côté client : initialiser un paiement depuis le navigateur. Consultez Concepts clés → API keys pour le détail complet.

POSThttps://api.wajub.com/payments
curl https://api.wajub.com/payments \
  -H "Authorization: sk_test.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 25000,
    "currency": "XAF",
    "customer": { "email": "amina@example.com" },
    "description": "Order #4172",
    "callback": "https://shop.example.com/order/complete"
  }'

Wajub répond 201 Created. Le paiement existe désormais sur votre compte, il porte un id que vous utiliserez partout ailleurs, et il contient les deux valeurs qui pilotent le reste de votre intégration :

Réponse · 201 Created
{
"code": 201,
"status": "Created",
"message": "Payment initiated",
"authorization_url": "https://pay.wajub.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"authorization_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"transaction": {
"id": "trx_test_CSUGajfv9xh0XQ5wu2lx",
"amount": 25000,
"amount_paid": 0,
"currency": "XAF",
"status": "pending",
"description": "Order #4172",
"customer": {
"id": "cus_test_sAaim5apjocIgtlhzJY3wQ8s",
"email": "amina@example.com"
},
"callback": "https://shop.example.com/order/complete",
"sandbox": true,
"created_at": "2026-09-11T10:24:00Z"
}
}

Trois champs de cette réponse comptent dès maintenant :

  • authorization_url est la page de paiement hébergée de ce paiement, et de rien d'autre. Redirigez votre client vers elle. C'est la façon la plus simple d'intégrer Wajub, et celle que nous recommandons.
  • authorization_token est le jeton de session contenu dans cette URL. Il ne vaut que pour ce paiement et peut être transmis sans risque à un navigateur : c'est ce qu'utilisent les Components quand vous préférez garder le client sur votre propre page.
  • transaction.status démarre à pending. Il ne passe à succeeded qu'une fois que le client a confirmé sur son téléphone, ce qui arrive bien après le retour de cet appel.

« Paiement » ou « transaction »

Vous venez de voir les deux mots dans la même réponse, et ils désignent le même objet. « Paiement » est le concept métier, d'où l'endpoint POST /payments. « Transaction » est ce que l'API sérialise, d'où une réponse qui l'imbrique sous "transaction" et préfixe l'id par trx_. Les deux termes sont interchangeables dans toute cette documentation. L'explication complète se trouve dans Concepts clés.

Ce qui se passe ensuite

En ouvrant authorization_url dans votre navigateur, vous arrivez sur la page de paiement, où des numéros de téléphone sandbox permettent de simuler un succès, un refus ou un délai dépassé. Votre serveur confirme ensuite le résultat avec GET /payments/{id} avant de livrer quoi que ce soit, car le seul retour du navigateur peut être falsifié, ou ne jamais se produire. Le Démarrage rapide détaille ces deux étapes avec les numéros de test.

Déboguez en temps réel avec Konsole

Inspectez chaque requête API, rejouez vos webhooks et observez les décisions d'orchestration en direct avec Konsole →. C'est le moyen le plus rapide de comprendre ce qui se passe pendant une intégration.

Et maintenant ?

Pour débuter

Prêt à intégrer

Pour aller plus loin

Que pensez-vous de ce contenu ?