Aller au contenu

Encaisser un paiement

Un encaissement (charge) est une demande de paiement adressée à un client SAMA Money. Le client la confirme avec son code secret dans l’application ou par #600# ; vous êtes notifié du résultat. Vous ne manipulez jamais le code secret du client, et il n’existe aucune route pour cela.

  1. Votre serveur crée l’encaissement avec POST /v1/charges : il est pending.
  2. Le client reçoit la demande sur son téléphone et la confirme ou la refuse. Tant qu’il ne l’a fait ni l’un ni l’autre, l’encaissement reste pending.
  3. SAMA Money vous notifie du résultat : charge.succeeded ou charge.failed.
  4. Votre serveur vérifie la notification, puis valide la commande.
Champ Obligatoire Description
client_phone oui Numéro du client avec l’indicatif du pays, de 6 à 20 caractères (par exemple 22370000000).
amount_xof oui Montant en francs CFA : entier supérieur à 0.
description non Libellé de l’encaissement.
reference non Votre référence interne (numéro de commande), conservée avec l’encaissement et renvoyée dans partner_reference.

L’en-tête Idempotency-Key est facultatif pour un encaissement, mais recommandé : sans lui, chaque appel crée une nouvelle demande. Les exemples utilisent le numéro de test 22370000000.

Fenêtre de terminal
curl -sS -X POST https://api.sama.money/v1/charges \
-H "Authorization: Bearer $SAMA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"client_phone": "22370000000",
"amount_xof": 15000,
"description": "Commande 1042",
"reference": "CMD-1042"
}'

L’API répond 200 avec l’encaissement en attente :

{
"reference": "chg_8f3a1c9e2b7d4e60a1c3",
"object": "charge",
"mode": "test",
"amount_xof": 15000,
"currency": "XOF",
"client_phone": "22370000000",
"status": "pending",
"description": "Commande 1042",
"partner_reference": "CMD-1042",
"account": null,
"error_message": null,
"created": 1790848800
}

Enregistrez la reference renvoyée (chg_…) avec votre commande : elle sert à relire l’encaissement et figure dans les notifications. Votre propre référence revient dans partner_reference. mode vaut test avec une clé d’essai. D’autres champs peuvent s’ajouter à la réponse ; ignorez ceux que vous ne connaissez pas.

Le client reçoit la demande dans l’application SAMA Money ou, s’il n’a pas de smartphone, dans le menu #600#. Il la confirme avec son code secret ou la refuse. Tant qu’il ne l’a fait ni l’un ni l’autre, la demande reste pending. Sans réponse au bout de 90 jours, elle expire : son état devient expired.

Affichez de votre côté un écran d’attente clair, par exemple « Confirmez le paiement de 15 000 F sur votre téléphone ». Ne considérez jamais une demande pending comme payée.

Deux moyens, à combiner :

  1. Notification (recommandée) : SAMA Money envoie charge.succeeded ou charge.failed à l’adresse que vous avez enregistrée. La mise en place est décrite dans la documentation complète, réservée aux développeurs inscrits.
  2. Lecture du statut avec GET /v1/charges/{reference}, sans l’interroger en boucle, pour rattraper une notification manquée ou confirmer l’état avant une décision importante :
Fenêtre de terminal
curl -sS https://api.sama.money/v1/charges/chg_8f3a1c9e2b7d4e60a1c3 \
-H "Authorization: Bearer $SAMA_API_KEY"
Situation Statut ou code Que faire
Le client confirme succeeded Validez la commande.
L’encaissement n’aboutit pas failed Proposez un autre moyen de paiement.
Le client ne répond pas pending La demande reste en attente jusqu’à sa confirmation ou son refus. Ne validez pas la commande. Avant de proposer un nouvel essai, relisez l’état avec GET /v1/charges/{reference}.
Votre requête a été coupée avant la réponse inconnu Rejouez la même requête avec la même Idempotency-Key.

Avec une clé d’essai, aucun client n’est sollicité et la demande reste pending. La façon de simuler la confirmation du client est décrite dans la documentation complète, réservée aux développeurs inscrits (voir la Référence).

Les clés de production sont activées après l’approbation du compte (Comptes et vérification). Les frais d’un encaissement sont de 0,3 % à la charge du marchand, jamais du client : voir les tarifs.