Encaisser un paiement
Votre serveur déclare le paiement attendu ; Nebryon vous renvoie le numéro de collecte vers lequel votre client envoie l’argent depuis son téléphone. Dès réception, le paiement passe en
SUCCESS, votre portefeuille est crédité et vous recevez payment.succeeded.Comment ça marche
- Votre serveur déclare le paiement attendu : numéro du client qui va payer, montant, réseau.
- Nebryon renvoie le numéro de collecte (
collectionNumber) et l’échéance (expiresAt, 15 minutes). - Vous affichez ces instructions au client, qui fait le transfert depuis son téléphone (application de l’opérateur ou code USSD habituel).
- Dès réception de l’argent, le paiement passe en
SUCCESS, votre portefeuille est crédité et vous recevez le webhookpayment.succeeded.
Le paiement est reconnu grâce au numéro qui envoie l’argent et au montant exact. Le client doit payer depuis le numéro déclaré (
phoneNumber), envoyer exactement le montant demandé, sur le réseau demandé, avant expiresAt.Parcours
Votre serveur Nebryon Pay Votre client
│ POST /gatewaytransaction/api/payment │
│ (montant, numéro du client, réseau) ─▶ paiement PENDING │
│◀── collectionNumber, expiresAt │
│ affiche : « Envoyez 5 000 FCFA au 70 00 00 01 par Orange Money » ───▶│
│ │ paie depuis
│ ◀── dépôt mobile money ────────────│ son téléphone
│ paiement SUCCESS
│◀── webhook payment.succeeded
│ valide la commandeRequête
POST/gatewaytransaction/api/paymentX-API-Key
| Champ | Type | Description |
|---|---|---|
| amount * | nombre | Montant à encaisser, de 100 à 2 000 000 XOF |
| phoneNumber * | texte | Numéro Mobile Money du client qui va payer |
| network * | texte | Réseau sur lequel le client paie : ORANGE_MONEY, MOOV_MONEY, TELECEL_MONEY, WAVE |
| externalReference | texte | Recommandé : votre référence unique (voir conventions) |
| description | texte | Libellé libre, renvoyé dans les notifications |
| callbackMode | texte | WEBHOOK ou WEBSOCKET. Défaut : celui de votre service |
curl
curl -X POST "https://paygate.nebyron.com/management/gatewaytransaction/api/payment" \
-H "X-API-Key: $NEBRYON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"phoneNumber": "+22676112233",
"network": "ORANGE_MONEY",
"externalReference": "CMD-1042",
"description": "Commande n°1042",
"callbackMode": "WEBHOOK"
}'Réponse 201 Created
| Champ | À utiliser pour |
|---|---|
collectionNumber | Numéro à afficher au client : c’est vers lui qu’il envoie l’argent |
expiresAt | Afficher le temps restant ; après cette heure le paiement passe EXPIRED |
reference | Référence Nebryon, à conserver avec votre commande |
fee | Frais Nebryon : votre portefeuille sera crédité de amount − fee |
Réponse · 201
{
"id": "12f47b6f-3247-4e78-8c61-83fd28a95be3",
"reference": "PAY261005ZEPVRUZOUU",
"externalReference": "CMD-1042",
"type": "PAYMENT",
"status": "PENDING",
"amount": 5000.0,
"fee": 75.0,
"currency": "XOF",
"network": "ORANGE_MONEY",
"phoneNumber": "+22676112233",
"description": "Commande n°1042",
"callbackMode": "WEBHOOK",
"collectionNumber": "+22670000001",
"expiresAt": "2026-10-05T17:55:30.844329",
"operatorReference": null,
"failureReason": null,
"completedAt": null,
"createdAt": "2026-10-05T17:40:30.845366"
}Instructions à afficher au client
Pour payer votre commande, envoyez 5 000 FCFA par Orange Money au 70 00 00 01, depuis le numéro 76 11 22 33, avant 17 h 55.
Ne validez la commande qu’à la réception de payment.succeeded (ou d’un statut SUCCESS relu par l’API), jamais au retour du client sur votre site.
Node.js
const response = await fetch(`${process.env.NEBRYON_API}/gatewaytransaction/api/payment`, {
method: "POST",
headers: {
"X-API-Key": process.env.NEBRYON_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
amount: 5000,
phoneNumber: customer.phone,
network: "ORANGE_MONEY",
externalReference: order.id,
}),
});
const payment = await response.json();
// À afficher au client :
// "Envoyez 5 000 FCFA par Orange Money au ${payment.collectionNumber},
// depuis le ${customer.phone}, avant ${payment.expiresAt}"Cas particuliers
- Paiement identique déjà en attente. Deux paiements en attente avec le même réseau, le même numéro et le même montant seraient indiscernables : le second est refusé (
409 PAYMENT_ALREADY_PENDING). Attendez le résultat du premier, ou changez le montant. - Le client a payé avant la création du paiement. Le dépôt reste en attente 10 minutes et est rattaché automatiquement si vous créez le paiement correspondant dans ce délai.
- Mauvais montant ou mauvais numéro. Le dépôt n’est pas rattaché à votre paiement, qui expire. Contactez le support Nebryon avec la référence opérateur du client.
- Pas de numéro de collecte disponible sur ce réseau :
503 NO_COLLECTION_NUMBER. Proposez un autre réseau ou réessayez plus tard. - Opérateur momentanément indisponible :
503 OPERATOR_DISABLED.
Tester en SandBox
Avec votre clé pk_test_, l’opération est simulée : un numéro finissant par 0000 réussit, 0001 expire, tout autre reste en attente jusqu’à ce que vous le déclenchiez. Tous les scénarios
Erreurs
| HTTP | cause | Cas |
|---|---|---|
| 400 | BAD_REQUEST | Montant hors limites, numéro ou réseau manquant |
| 403 | ACCOUNT_NOT_VERIFIED | Votre compte partenaire n’est pas encore vérifié |
| 409 | PAYMENT_ALREADY_PENDING | Paiement identique déjà en attente |
| 503 | NO_COLLECTION_NUMBER | Aucun numéro de collecte disponible sur ce réseau |
| 503 | OPERATOR_DISABLED | Opérateur momentanément indisponible |