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.

PaysIndicatifOpérateurCode
Sénégal+221Orange Moneyorange-money-senegal
Sénégal+221Wavewave-senegal
Sénégal+221Yasfree-money-senegal
Sénégal+221Expressoexpresso-senegal
Sénégal+221Wizallwizall-senegal
Sénégal+221Djamodjamo-senegal
Côte d'Ivoire+225Orange Moneyorange-money-ci
Côte d'Ivoire+225MTNmtn-ci
Côte d'Ivoire+225Moovmoov-ci
Côte d'Ivoire+225Wavewave-ci
Côte d'Ivoire+225Djamodjamo-ci
Bénin+229MTNmtn-benin
Bénin+229Moovmoov-benin
Burkina Faso+226Orange Moneyorange-money-burkina
Burkina Faso+226Moovmoov-burkina
Togo+228Yas / T-Moneyt-money-togo
Togo+228Moovmoov-togo
Mali+223Orange Moneyorange-money-mali
Mali+223Moovmoov-mali
Cameroun+237MTNmtn-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
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
<?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

JavaScript
// 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
# 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.

JSON
{
  "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

ChampTypeDescription
successbooléenVaut true lorsque la requête aboutit.
countriestableauListe des pays couverts, chacun décrit par les champs ci-dessous.
countrytexteCode ISO du pays sur 2 lettres (ex. SN, CI).
country_nametexteNom complet du pays (ex. « Sénégal »).
dialtexteIndicatif téléphonique international (ex. +221).
methodstableauOpérateurs de ce pays.
methods[].codetexteCode unique de l'opérateur — sert aussi de withdraw_mode au déboursement.
methods[].nametexteNom commercial affichable de l'opérateur (ex. « Orange Money »).
methods[].availablebooléentrue 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 /methods et masquez les entrées dont available vaut false.
  • 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 code opérateur comme withdraw_mode.
Base API : https://tchin.tech/api/v1 · Tchin Documentation

Connexion / Inscription

En vous inscrivant, vous acceptez notre politique de confidentialité.

Entrez le code

Code envoyé à .