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
| Fournisseur | Couverture | Méthodes | Points forts |
|---|---|---|---|
| Stripe | 46+ pays | Cartes, portefeuilles (Apple Pay, Google Pay), SEPA, ACH | Meilleur traitement de cartes au monde |
| PayPal | 200+ pays | Solde PayPal, cartes via PayPal | Confiance acheteur omniprésente |
| Wise (TransferWise) | 80+ pays | Virements bancaires, multi-devises | Transferts transfrontaliers à faible coût |
| Adyen | 60+ pays | Cartes, portefeuilles, méthodes locales | Entreprise, omnicanal |
| Square | US, CA, UK, AU, JP, IE, FR, ES | Cartes, Cash App | En personne + en ligne |
Afrique -- Mobile Money
| Fournisseur | Pays | Méthodes clés |
|---|---|---|
| PawaPay | 21+ pays | M-Pesa, MTN MoMo, Airtel Money, Orange Money, Tigo Pesa, Vodacom |
| Hub2 | Côte d'Ivoire, Sénégal, Mali, Burkina Faso, Togo, Bénin, Guinée, Cameroun | Orange Money, MTN MoMo, Moov Money, Wave |
| PaiementPro | Côte d'Ivoire, Sénégal, Burkina Faso, Togo, Bénin | Mobile money + Visa/Mastercard |
| BUI | Côte d'Ivoire, Sénégal, Mali, Burkina Faso | Mobile money, cartes |
| Paystack | Nigeria, Ghana, Afrique du Sud, Kenya | Cartes, virement bancaire, USSD, mobile money |
| Flutterwave | 30+ pays africains | Cartes, mobile money, virements bancaires, USSD |
| Cellulant (Tingg) | 35+ pays africains | Mobile money, cartes, virements bancaires |
| CinetPay | 15+ pays africains francophones | Mobile money, cartes |
| Campay | Cameroun | MTN MoMo, Orange Money |
| NotchPay | Cameroun, Côte d'Ivoire, Sénégal | Mobile money, cartes |
Asie-Pacifique
| Fournisseur | Pays | Méthodes clés |
|---|---|---|
| Razorpay | Inde | UPI, cartes, portefeuilles, net banking |
| PhonePe | Inde | UPI |
| GCash | Philippines | Portefeuille électronique |
| GrabPay | Asie du Sud-Est | Portefeuille électronique |
| PromptPay | Thaïlande | Virement bancaire |
| LINE Pay | Japon, Taïwan, Thaïlande | Portefeuille électronique |
| Alipay | Chine, mondial | Portefeuille électronique |
| WeChat Pay | Chine, mondial | Portefeuille électronique |
Amérique latine
| Fournisseur | Pays | Méthodes clés |
|---|---|---|
| MercadoPago | Argentine, Brésil, Mexique, Chili, Colombie, Uruguay | Cartes, Pix, Boleto, portefeuilles |
| PagSeguro | Brésil | Pix, Boleto, cartes |
| OXXO | Mexique | Bon de paiement en espèces |
| Conekta | Mexique | Cartes, OXXO, SPEI |
Moyen-Orient et Afrique du Nord
| Fournisseur | Pays | Méthodes clés |
|---|---|---|
| Tap Payments | EAU, Arabie Saoudite, Koweït, Bahreïn, Qatar, Oman, Égypte, Jordanie | Cartes, Apple Pay, portefeuilles |
| Fawry | Égypte | Espèces, portefeuilles, cartes |
| HyperPay | Arabie Saoudite, EAU, Jordanie, Égypte | Cartes, 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égion | Pays | Méthodes principales | Fournisseurs principaux |
|---|---|---|---|
| Amérique du Nord | US, CA | Cartes, ACH, portefeuilles | Stripe, PayPal, Square |
| Europe de l'Ouest | UK, FR, DE, ES, IT, NL, BE | Cartes, SEPA, iDEAL, Bancontact | Stripe, Adyen, PayPal |
| Europe de l'Est | PL, CZ, RO, HU | Cartes, virements locaux | Stripe, Adyen |
| Afrique de l'Ouest (francophone) | CI, SN, ML, BF, TG, BJ, GN, CM | Orange Money, MTN MoMo, Wave, Moov | Hub2, PaiementPro, PawaPay |
| Afrique de l'Ouest (anglophone) | NG, GH | Cartes, virement bancaire, MTN MoMo | Paystack, Flutterwave |
| Afrique de l'Est | KE, TZ, UG, RW | M-Pesa, MTN MoMo, Airtel Money | PawaPay, Flutterwave |
| Afrique australe | ZA, MZ, ZM, MW | Cartes, mobile money | Paystack, PawaPay |
| Afrique centrale | CM, CD, CG | MTN MoMo, Orange Money, Airtel | PawaPay, Hub2 |
| Asie du Sud | IN | UPI, cartes, portefeuilles | Razorpay |
| Asie du Sud-Est | PH, TH, SG, MY, ID | Portefeuilles électroniques, cartes, virement bancaire | GrabPay, divers locaux |
| Asie de l'Est | CN, JP | Alipay, WeChat Pay, cartes | Alipay, LINE Pay |
| Amérique latine | BR, MX, AR, CO, CL | Pix, Boleto, OXXO, cartes | MercadoPago, Conekta |
| MENA | AE, SA, EG, JO | Cartes, mada, portefeuilles | Tap 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èsCe 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 ZeroFeeExemple 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éthode | Description |
|---|---|
| PAYIN_CARD | Visa, Mastercard, Amex, Discover, JCB, UnionPay |
| PAYIN_CARD_3DS | Cartes avec authentification 3D Secure obligatoire |
Mobile Money (Afrique)
| Méthode | Pays |
|---|---|
| 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éthode | Pays |
|---|---|
| PAYIN_SEPA | UE/EEE |
| PAYIN_ACH | US |
| PAYIN_WIRE | Mondial |
| PAYIN_PIX | BR |
| PAYIN_SPEI | MX |
| PAYIN_IDEAL | NL |
| PAYIN_BANCONTACT | BE |
| PAYIN_UPI | IN |
Portefeuilles numériques
| Méthode | Disponibilité |
|---|---|
| PAYIN_APPLE_PAY | US, UK, UE, AU, CA, SG, HK, JP |
| PAYIN_GOOGLE_PAY | US, UK, UE, AU, CA, SG, IN |
| PAYIN_PAYPAL | 200+ pays |
| PAYIN_ALIPAY | CN, mondial |
| PAYIN_WECHAT_PAY | CN, mondial |
| PAYIN_GRABPAY | SG, MY, PH, TH |
| PAYIN_GCASH | PH |
Espèces et bons
| Méthode | Pays |
|---|---|
| PAYIN_OXXO | MX |
| PAYIN_BOLETO | BR |
| PAYIN_FAWRY | EG |
Tarification
0fee facture un forfait de 0,99 % par transaction réussie. C'est tout.
| Fonctionnalité | 0fee.dev | Concurrents classiques |
|---|---|---|
| Frais de transaction | 0,99 % | 2,5 % - 3,5 % |
| Frais mensuels | 0 $ | 0 $ - 500+ $ |
| Frais d'installation | 0 $ | 0 $ - sur mesure |
| Marge fournisseur | Passée au coût réel | Souvent majorée |
| Engagement minimum | Aucun | Souvent annuel |
| Couverture Afrique | 50+ pays | Limité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 paiementstypescriptimport { 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.