Moyens de paiement
Tchin couvre les principaux opérateurs Mobile Money d'Afrique de l'Ouest et Centrale, répartis sur 7 pays. Chaque opérateur possède un code unique et stable. Ce code est la clé qui vous sert à la fois à identifier un moyen de paiement et à cibler un opérateur lors d'un déboursement.
💡 Le code de chaque opérateur ci-dessous est exactement la valeur à passer dans le champ withdraw_mode de l'endpoint de retrait (déboursement). Un même code identifie donc l'opérateur côté encaissement comme côté versement.
Catalogue des opérateurs
Le tableau suivant liste l'intégralité des opérateurs pris en charge, par pays. La colonne Indicatif rappelle le préfixe téléphonique international du pays ; les numéros de bénéficiaires se saisissent toujours sans indicatif lors d'un déboursement.
| Pays | Indicatif | Opérateur | Code |
|---|---|---|---|
| Sénégal | +221 | Orange Money | orange-money-senegal |
| Sénégal | +221 | Wave | wave-senegal |
| Sénégal | +221 | Yas | free-money-senegal |
| Sénégal | +221 | Expresso | expresso-senegal |
| Sénégal | +221 | Wizall | wizall-senegal |
| Sénégal | +221 | Djamo | djamo-senegal |
| Côte d'Ivoire | +225 | Orange Money | orange-money-ci |
| Côte d'Ivoire | +225 | MTN | mtn-ci |
| Côte d'Ivoire | +225 | Moov | moov-ci |
| Côte d'Ivoire | +225 | Wave | wave-ci |
| Côte d'Ivoire | +225 | Djamo | djamo-ci |
| Bénin | +229 | MTN | mtn-benin |
| Bénin | +229 | Moov | moov-benin |
| Burkina Faso | +226 | Orange Money | orange-money-burkina |
| Burkina Faso | +226 | Moov | moov-burkina |
| Togo | +228 | Yas / T-Money | t-money-togo |
| Togo | +228 | Moov | moov-togo |
| Mali | +223 | Orange Money | orange-money-mali |
| Mali | +223 | Moov | moov-mali |
| Cameroun | +237 | MTN | mtn-cameroun |
⚠️ La devise est le FCFA : XOF pour les pays de l'UEMOA (Sénégal, Côte d'Ivoire, Bénin, Burkina Faso, Togo, Mali) et XAF au Cameroun. Les montants sont toujours des entiers, sans décimales, avec un minimum de 100.
Disponibilité en temps réel
La liste ci-dessus est le catalogue complet et permanent des opérateurs. Mais un opérateur peut être momentanément indisponible (maintenance de l'opérateur, incident réseau, coupure temporaire). L'endpoint GET /methods renvoie donc, pour chaque moyen, un indicateur available reflétant son état à l'instant de l'appel.
GET /api/v1/methods
L'appel exige simplement vos deux clés d'authentification. Aucun paramètre de corps n'est nécessaire.
Requête
cURL
curl -H "TCHIN-PUBLIC-KEY: tchin_pk_xxxxxxxx" \
-H "TCHIN-PRIVATE-KEY: tchin_sk_xxxxxxxx" \
-H "Accept: application/json" \
https://tchin.tech/api/v1/methods
PHP
<?php
// Récupérer les moyens de paiement et leur disponibilité
$ch = curl_init('https://tchin.tech/api/v1/methods');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'TCHIN-PUBLIC-KEY: '.getenv('TCHIN_PUBLIC_KEY'),
'TCHIN-PRIVATE-KEY: '.getenv('TCHIN_SECRET_KEY'),
'Accept: application/json',
],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
// Parcourir les pays puis les opérateurs disponibles
foreach ($data['countries'] as $pays) {
echo $pays['country_name'].' ('.$pays['dial'].")\n";
foreach ($pays['methods'] as $m) {
if ($m['available']) {
echo ' - '.$m['name'].' ['.$m['code']."]\n";
}
}
}
Node.js
// Node.js (fetch, async/await)
const res = await fetch('https://tchin.tech/api/v1/methods', {
headers: {
'TCHIN-PUBLIC-KEY': process.env.TCHIN_PUBLIC_KEY,
'TCHIN-PRIVATE-KEY': process.env.TCHIN_SECRET_KEY,
'Accept': 'application/json',
},
});
const data = await res.json();
// N'afficher au client que les opérateurs disponibles
for (const pays of data.countries) {
const dispo = pays.methods.filter((m) => m.available);
console.log(pays.country_name, pays.dial, dispo.map((m) => m.code));
}
Python
# Python (requests)
import os, requests
res = requests.get('https://tchin.tech/api/v1/methods',
headers={
'TCHIN-PUBLIC-KEY': os.environ['TCHIN_PUBLIC_KEY'],
'TCHIN-PRIVATE-KEY': os.environ['TCHIN_SECRET_KEY'],
'Accept': 'application/json',
})
data = res.json()
for pays in data['countries']:
print(pays['country_name'], pays['dial'])
for m in pays['methods']:
if m['available']:
print(' -', m['name'], '[' + m['code'] + ']')
Réponse
La réponse regroupe les moyens de paiement par pays. L'exemple ci-dessous est tronqué à deux pays pour la lisibilité ; en pratique les 7 pays sont retournés.
{
"success": true,
"countries": [
{
"country": "SN",
"country_name": "Sénégal",
"dial": "+221",
"methods": [
{ "code": "orange-money-senegal", "name": "Orange Money", "available": true },
{ "code": "wave-senegal", "name": "Wave", "available": true },
{ "code": "free-money-senegal", "name": "Yas", "available": true },
{ "code": "expresso-senegal", "name": "Expresso", "available": false },
{ "code": "wizall-senegal", "name": "Wizall", "available": true },
{ "code": "djamo-senegal", "name": "Djamo", "available": true }
]
},
{
"country": "CI",
"country_name": "Côte d'Ivoire",
"dial": "+225",
"methods": [
{ "code": "orange-money-ci", "name": "Orange Money", "available": true },
{ "code": "mtn-ci", "name": "MTN", "available": true },
{ "code": "moov-ci", "name": "Moov", "available": true },
{ "code": "wave-ci", "name": "Wave", "available": true },
{ "code": "djamo-ci", "name": "Djamo", "available": true }
]
}
]
}
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
success | booléen | Vaut true lorsque la requête aboutit. |
countries | tableau | Liste des pays couverts, chacun décrit par les champs ci-dessous. |
country | texte | Code ISO du pays sur 2 lettres (ex. SN, CI). |
country_name | texte | Nom complet du pays (ex. « Sénégal »). |
dial | texte | Indicatif téléphonique international (ex. +221). |
methods | tableau | Opérateurs de ce pays. |
methods[].code | texte | Code unique de l'opérateur — sert aussi de withdraw_mode au déboursement. |
methods[].name | texte | Nom commercial affichable de l'opérateur (ex. « Orange Money »). |
methods[].available | booléen | true si l'opérateur est opérationnel à l'instant de l'appel, false s'il est momentanément coupé. |
💡 Le champ available indique uniquement si l'opérateur est momentanément disponible. Il ne retire jamais un opérateur du catalogue : un moyen coupé réapparaîtra à true dès son rétablissement. Filtrez sur ce champ pour n'afficher à vos clients que les opérateurs réellement utilisables au moment présent.
Bon à savoir
- Sur la page de paiement hébergée Tchin, un opérateur indisponible est automatiquement grisé et marqué « indispo » : le client ne peut pas le sélectionner. Vous n'avez donc rien à gérer si vous utilisez l'encaissement par redirection.
- Si vous construisez votre propre sélecteur d'opérateur (application mobile, tunnel sur mesure), interrogez
GET /methodset masquez les entrées dontavailablevautfalse. - Les codes sont stables dans le temps : vous pouvez les stocker en base sans crainte. Un nouvel opérateur sera ajouté avec un nouveau code, sans casser l'existant.
Aller plus loin
- Encaissement — faire payer un client via la page hébergée Tchin.
- Retrait — reverser un solde vers un bénéficiaire, en utilisant un
codeopérateur commewithdraw_mode.