Back to 0fee
0fee

Une seule API, 53+ fournisseurs, 200+ pays

Comment 0fee.dev unifie 53+ fournisseurs de paiement dans 200+ pays en une seule API. Exemples de code, logique de routage et couverture. Par Juste A. Gnimavo.

Thales & Claude | March 30, 2026 11 min 0fee
EN/ FR/ ES
api-designsdkpayment-providersdeveloper-experienceglobal-coverage

La promesse fondamentale de 0fee.dev est une simplicité radicale : une seule intégration API remplace des dizaines d'implémentations spécifiques à chaque fournisseur. Derrière cette simplicité se trouve un moteur de routage qui mappe chaque demande de paiement vers le fournisseur optimal en fonction du pays, de la devise, de la méthode de paiement, du coût et des métriques de performance en temps réel. Cet article parcourt la carte complète des fournisseurs, la logique de routage, l'expérience SDK et le code que vous écrivez réellement.

La carte complète des fournisseurs

0fee s'intègre avec 53+ fournisseurs de paiement organisés par région et capacité :

Fournisseurs mondiaux

FournisseurCouvertureMéthodesPoints forts
Stripe46+ paysCartes, portefeuilles (Apple Pay, Google Pay), SEPA, ACHMeilleur traitement de cartes au monde
PayPal200+ paysSolde PayPal, cartes via PayPalConfiance acheteur omniprésente
Wise (TransferWise)80+ paysVirements bancaires, multi-devisesTransferts transfrontaliers à faible coût
Adyen60+ paysCartes, portefeuilles, méthodes localesEntreprise, omnicanal
SquareUS, CA, UK, AU, JP, IE, FR, ESCartes, Cash AppEn personne + en ligne

Afrique -- Mobile Money

FournisseurPaysMéthodes clés
PawaPay21+ paysM-Pesa, MTN MoMo, Airtel Money, Orange Money, Tigo Pesa, Vodacom
Hub2Côte d'Ivoire, Sénégal, Mali, Burkina Faso, Togo, Bénin, Guinée, CamerounOrange Money, MTN MoMo, Moov Money, Wave
PaiementProCôte d'Ivoire, Sénégal, Burkina Faso, Togo, BéninMobile money + Visa/Mastercard
BUICôte d'Ivoire, Sénégal, Mali, Burkina FasoMobile money, cartes
PaystackNigeria, Ghana, Afrique du Sud, KenyaCartes, virement bancaire, USSD, mobile money
Flutterwave30+ pays africainsCartes, mobile money, virements bancaires, USSD
Cellulant (Tingg)35+ pays africainsMobile money, cartes, virements bancaires
CinetPay15+ pays africains francophonesMobile money, cartes
CampayCamerounMTN MoMo, Orange Money
NotchPayCameroun, Côte d'Ivoire, SénégalMobile money, cartes

Asie-Pacifique

FournisseurPaysMéthodes clés
RazorpayIndeUPI, cartes, portefeuilles, net banking
PhonePeIndeUPI
GCashPhilippinesPortefeuille électronique
GrabPayAsie du Sud-EstPortefeuille électronique
PromptPayThaïlandeVirement bancaire
LINE PayJapon, Taïwan, ThaïlandePortefeuille électronique
AlipayChine, mondialPortefeuille électronique
WeChat PayChine, mondialPortefeuille électronique

Amérique latine

FournisseurPaysMéthodes clés
MercadoPagoArgentine, Brésil, Mexique, Chili, Colombie, UruguayCartes, Pix, Boleto, portefeuilles
PagSeguroBrésilPix, Boleto, cartes
OXXOMexiqueBon de paiement en espèces
ConektaMexiqueCartes, OXXO, SPEI

Moyen-Orient et Afrique du Nord

FournisseurPaysMéthodes clés
Tap PaymentsEAU, Arabie Saoudite, Koweït, Bahreïn, Qatar, Oman, Égypte, JordanieCartes, Apple Pay, portefeuilles
FawryÉgypteEspèces, portefeuilles, cartes
HyperPayArabie Saoudite, EAU, Jordanie, ÉgypteCartes, mada, Apple Pay

Couverture par pays

Le tableau suivant montre un échantillon représentatif de la couverture par pays. La liste complète englobe 200+ pays :

RégionPaysMéthodes principalesFournisseurs principaux
Amérique du NordUS, CACartes, ACH, portefeuillesStripe, PayPal, Square
Europe de l'OuestUK, FR, DE, ES, IT, NL, BECartes, SEPA, iDEAL, BancontactStripe, Adyen, PayPal
Europe de l'EstPL, CZ, RO, HUCartes, virements locauxStripe, Adyen
Afrique de l'Ouest (francophone)CI, SN, ML, BF, TG, BJ, GN, CMOrange Money, MTN MoMo, Wave, MoovHub2, PaiementPro, PawaPay
Afrique de l'Ouest (anglophone)NG, GHCartes, virement bancaire, MTN MoMoPaystack, Flutterwave
Afrique de l'EstKE, TZ, UG, RWM-Pesa, MTN MoMo, Airtel MoneyPawaPay, Flutterwave
Afrique australeZA, MZ, ZM, MWCartes, mobile moneyPaystack, PawaPay
Afrique centraleCM, CD, CGMTN MoMo, Orange Money, AirtelPawaPay, Hub2
Asie du SudINUPI, cartes, portefeuillesRazorpay
Asie du Sud-EstPH, TH, SG, MY, IDPortefeuilles électroniques, cartes, virement bancaireGrabPay, divers locaux
Asie de l'EstCN, JPAlipay, WeChat Pay, cartesAlipay, LINE Pay
Amérique latineBR, MX, AR, CO, CLPix, Boleto, OXXO, cartesMercadoPago, Conekta
MENAAE, SA, EG, JOCartes, mada, portefeuillesTap Payments, Fawry

Comment fonctionne le routage

Lorsque votre application envoie une demande de paiement à 0fee, le moteur de routage exécute un processus de décision en plusieurs étapes :

Étape 1 : Détection du pays

Le champ country de la requête (ISO 3166-1 alpha-2) détermine quels fournisseurs sont éligibles. Chaque fournisseur a une liste enregistrée de pays supportés.

Étape 2 : Correspondance de la méthode

Le champ method (par exemple, PAYIN_ORANGE_CI, PAYIN_CARD) filtre les fournisseurs vers ceux qui supportent la méthode de paiement demandée dans le pays donné.

Étape 3 : Vérification des identifiants

Le moteur vérifie si l'application du marchand possède des identifiants valides et actifs pour chaque fournisseur éligible. Un fournisseur sans identifiants configurés est exclu.

Étape 4 : Notation des fournisseurs

Chaque fournisseur restant reçoit un score composite basé sur :

pythondef calculate_provider_score(
    provider: Provider,
    app_config: AppRoutingConfig
) -> float:
    # Taux de succès en temps réel (dernières 24 heures)
    success_weight = 0.35
    success_score = provider.metrics.success_rate_24h

    # Latence moyenne (plus bas = mieux)
    latency_weight = 0.20
    latency_score = 1.0 - min(provider.metrics.avg_latency_ms / 10000, 1.0)

    # Coût de la transaction (plus bas = mieux)
    cost_weight = 0.25
    cost_score = 1.0 - min(provider.fee_percent / 5.0, 1.0)

    # Priorité du marchand (configurée dans le tableau de bord)
    priority_weight = 0.20
    priority_score = app_config.get_priority(provider.id) / 10.0

    return (
        success_weight * success_score +
        latency_weight * latency_score +
        cost_weight * cost_score +
        priority_weight * priority_score
    )

Étape 5 : Sélection et basculement

Le fournisseur avec le score le plus élevé est sélectionné comme principal. Le deuxième et le troisième sont mis en file d'attente comme cibles de basculement. Si le fournisseur principal retourne une erreur non réessayable (fournisseur indisponible, maintenance, limite de débit), le moteur réessaie automatiquement avec le fournisseur suivant.

Requête : Payer 5 000 XOF via Orange Money en CI
  |
  +-> Score : Hub2 (0,92) -- PRINCIPAL
  +-> Score : PaiementPro (0,87) -- BASCULEMENT 1
  +-> Score : PawaPay (0,81) -- BASCULEMENT 2
  |
  Hub2 traite avec succès -> terminé
  Hub2 échoue (503) -> réessai PaiementPro -> succès

Ce mécanisme de basculement est invisible pour le marchand. Il envoie une requête et reçoit une réponse. La logique de routage et de réessai est entièrement interne.

L'expérience SDK

0fee fournit des SDK dans sept langages. Chaque SDK encapsule l'API REST avec des modèles typés, des réessais automatiques et des patterns idiomatiques pour chaque langage.

Installation

bash# Node.js / TypeScript
npm install zerofee

# Python
pip install zerofee

# PHP
composer require zerofee/zerofee-php

# Ruby
gem install zerofee

# Go
go get github.com/zerofee/zerofee-go

# Java
// Maven
<dependency>
  <groupId>dev.zerofee</groupId>
  <artifactId>zerofee-java</artifactId>
  <version>1.0.0</version>
</dependency>

# C#
dotnet add package ZeroFee

Exemple TypeScript : flux de paiement complet

typescriptimport { ZeroFee } from 'zerofee';

const zf = new ZeroFee({
  apiKey: process.env.ZEROFEE_API_KEY!,
  environment: 'live'  // ou 'test'
});

// 1. Créer un paiement
const payment = await zf.payments.create({
  amount: 25_00,          // 25,00 $ en centimes
  currency: 'USD',
  country: 'US',
  method: 'PAYIN_CARD',
  customer: {
    email: '[email protected]',
    name: 'John Doe'
  },
  metadata: {
    orderId: 'order_12345',
    productName: 'Pro Plan'
  },
  returnUrl: 'https://yourapp.com/payment/success',
  cancelUrl: 'https://yourapp.com/payment/cancel'
});

console.log(payment.checkoutUrl);
// -> https://checkout.0fee.dev/pay_abc123

// 2. Vérifier le statut du paiement
const status = await zf.payments.get(payment.id);
console.log(status.status);
// -> 'pending' | 'completed' | 'failed' | 'expired'

// 3. Émettre un remboursement
const refund = await zf.refunds.create({
  paymentId: payment.id,
  amount: 25_00,  // remboursement intégral
  reason: 'Le client a demandé l\'annulation'
});

Exemple Python : paiement mobile money

pythonfrom zerofee import ZeroFee

zf = ZeroFee(api_key="zf_live_...")

# Créer un paiement Orange Money en Côte d'Ivoire
payment = zf.payments.create(
    amount=10000,           # 10 000 XOF
    currency="XOF",
    country="CI",
    method="PAYIN_ORANGE_CI",
    customer={"phone": "+2250700112233"},
    metadata={"invoice_id": "INV-2026-001"},
    return_url="https://yourapp.com/callback"
)

print(f"Payment ID: {payment.id}")
print(f"Status: {payment.status}")
# Le client reçoit un USSD push sur son téléphone

# Lister les paiements récents avec filtrage
payments = zf.payments.list(
    country="CI",
    status="completed",
    limit=50,
    offset=0
)

for p in payments.data:
    print(f"{p.id}: {p.amount} {p.currency} - {p.status}")

Gestion des webhooks (Express.js)

typescriptimport express from 'express';
import { ZeroFee } from 'zerofee';

const app = express();
const zf = new ZeroFee({ apiKey: process.env.ZEROFEE_API_KEY! });

app.post('/webhooks/zerofee', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-zerofee-signature'] as string;

  try {
    const event = zf.webhooks.verify(req.body, signature);

    switch (event.type) {
      case 'payment.completed':
        // Traiter la commande
        fulfillOrder(event.data.metadata.orderId);
        break;

      case 'payment.failed':
        // Notifier le client
        notifyPaymentFailed(event.data.customer.email);
        break;

      case 'refund.completed':
        // Mettre à jour le statut de la commande
        markOrderRefunded(event.data.paymentId);
        break;
    }

    res.status(200).json({ received: true });
  } catch (err) {
    console.error('Échec de la vérification du webhook :', err);
    res.status(400).json({ error: 'Signature invalide' });
  }
});

Méthodes de paiement disponibles par catégorie

0fee supporte 117 méthodes de paiement organisées en cinq catégories :

Cartes (mondial)

MéthodeDescription
PAYIN_CARDVisa, Mastercard, Amex, Discover, JCB, UnionPay
PAYIN_CARD_3DSCartes avec authentification 3D Secure obligatoire

Mobile Money (Afrique)

MéthodePays
PAYIN_ORANGE_*CI, SN, ML, BF, CM
PAYIN_MTN_*GH, CM, UG, CI, BJ
PAYIN_MPESA_*KE, TZ
PAYIN_WAVE_*SN, CI
PAYIN_MOOV_*CI, BJ, TG
PAYIN_AIRTEL_*UG, TZ, KE
PAYIN_VODACOM_*TZ, MZ
PAYIN_TIGO_*TZ

Virements bancaires

MéthodePays
PAYIN_SEPAUE/EEE
PAYIN_ACHUS
PAYIN_WIREMondial
PAYIN_PIXBR
PAYIN_SPEIMX
PAYIN_IDEALNL
PAYIN_BANCONTACTBE
PAYIN_UPIIN

Portefeuilles numériques

MéthodeDisponibilité
PAYIN_APPLE_PAYUS, UK, UE, AU, CA, SG, HK, JP
PAYIN_GOOGLE_PAYUS, UK, UE, AU, CA, SG, IN
PAYIN_PAYPAL200+ pays
PAYIN_ALIPAYCN, mondial
PAYIN_WECHAT_PAYCN, mondial
PAYIN_GRABPAYSG, MY, PH, TH
PAYIN_GCASHPH

Espèces et bons

MéthodePays
PAYIN_OXXOMX
PAYIN_BOLETOBR
PAYIN_FAWRYEG

Tarification

0fee facture un forfait de 0,99 % par transaction réussie. C'est tout.

Fonctionnalité0fee.devConcurrents classiques
Frais de transaction0,99 %2,5 % - 3,5 %
Frais mensuels0 $0 $ - 500+ $
Frais d'installation0 $0 $ - sur mesure
Marge fournisseurPassée au coût réelSouvent majorée
Engagement minimumAucunSouvent annuel
Couverture Afrique50+ paysLimitée ou inexistante

Les 0,99 % de frais correspondent au coût de la couche d'orchestration. Les frais des fournisseurs (les 2,9 % de Stripe, les taux variables de PawaPay, etc.) sont passés au coût réel. Le marchand voit une ventilation transparente : frais d'orchestration + frais du fournisseur = coût total par transaction.

Démarrage : cinq minutes pour des paiements mondiaux

bash# 1. Installer le SDK
npm install zerofee

# 2. Obtenir votre clé API sur dashboard.0fee.dev

# 3. Commencer à accepter des paiements
typescriptimport { ZeroFee } from 'zerofee';

const zf = new ZeroFee({ apiKey: 'zf_test_...' });

// Accepter un paiement de n'importe où dans le monde
const payment = await zf.payments.create({
  amount: 1000,
  currency: 'USD',
  country: 'US',
  method: 'PAYIN_CARD',
  customer: { email: '[email protected]' },
  returnUrl: 'https://localhost:3000/success'
});

console.log(`Checkout: ${payment.checkoutUrl}`);

Le mode test utilise des fournisseurs simulés qui reproduisent le comportement des fournisseurs réels -- y compris les flux mobile money asynchrones avec des délais et des scénarios d'échec configurables. Quand vous êtes prêt à passer en production, remplacez zf_test_ par zf_live_, configurez vos identifiants fournisseur dans le tableau de bord, et votre intégration est prête pour la production.

Une seule API. Cinquante-trois fournisseurs. Deux cents pays. Zéro frais mensuels.


Cet article fait partie de la série "Comment nous avons construit 0fee.dev". 0fee.dev est un orchestrateur de paiement couvrant 53+ fournisseurs dans 200+ pays, construit par Juste A. GNIMAVO et Claude depuis Abidjan avec zéro ingénieur humain. Suivez la série pour l'histoire complète de la construction.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles