Paiements

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

  1. Votre serveur déclare le paiement attendu : numéro du client qui va payer, montant, réseau.
  2. Nebryon renvoie le numéro de collecte (collectionNumber) et l’échéance (expiresAt, 15 minutes).
  3. Vous affichez ces instructions au client, qui fait le transfert depuis son téléphone (application de l’opérateur ou code USSD habituel).
  4. Dès réception de l’argent, le paiement passe en SUCCESS, votre portefeuille est crédité et vous recevez le webhook payment.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 commande

Requête

POST/gatewaytransaction/api/paymentX-API-Key
ChampTypeDescription
amount *nombreMontant à encaisser, de 100 à 2 000 000 XOF
phoneNumber *texteNuméro Mobile Money du client qui va payer
network *texteRéseau sur lequel le client paie : ORANGE_MONEY, MOOV_MONEY, TELECEL_MONEY, WAVE
externalReferencetexteRecommandé : votre référence unique (voir conventions)
descriptiontexteLibellé libre, renvoyé dans les notifications
callbackModetexteWEBHOOK 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
collectionNumberNuméro à afficher au client : c’est vers lui qu’il envoie l’argent
expiresAtAfficher le temps restant ; après cette heure le paiement passe EXPIRED
referenceRéférence Nebryon, à conserver avec votre commande
feeFrais 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

HTTPcauseCas
400BAD_REQUESTMontant hors limites, numéro ou réseau manquant
403ACCOUNT_NOT_VERIFIEDVotre compte partenaire n’est pas encore vérifié
409PAYMENT_ALREADY_PENDINGPaiement identique déjà en attente
503NO_COLLECTION_NUMBERAucun numéro de collecte disponible sur ce réseau
503OPERATOR_DISABLEDOpérateur momentanément indisponible