La promesa central de 0fee.dev es una simplicidad radical: una integración de API reemplaza docenas de implementaciones específicas por proveedor. Detrás de esa simplicidad hay un motor de enrutamiento que mapea cada solicitud de pago al proveedor óptimo basándose en país, moneda, método de pago, costo y métricas de rendimiento en tiempo real. Este artículo recorre el mapa completo de proveedores, la lógica de enrutamiento, la experiencia del SDK y el código que realmente escribes.
El mapa completo de proveedores
0fee se integra con más de 53 proveedores de pago organizados por región y capacidad:
Proveedores globales
| Proveedor | Cobertura | Métodos | Fortalezas |
|---|---|---|---|
| Stripe | 46+ países | Tarjetas, billeteras (Apple Pay, Google Pay), SEPA, ACH | Mejor procesamiento de tarjetas globalmente |
| PayPal | 200+ países | Saldo PayPal, tarjetas vía PayPal | Confianza del comprador ubicua |
| Wise (TransferWise) | 80+ países | Transferencias bancarias, multidivisa | Transferencias transfronterizas de bajo costo |
| Adyen | 60+ países | Tarjetas, billeteras, métodos locales | Grado empresarial, omnicanal |
| Square | EE. UU., CA, UK, AU, JP, IE, FR, ES | Tarjetas, Cash App | Presencial + en línea |
África -- Dinero móvil
| Proveedor | Países | Métodos clave |
|---|---|---|
| PawaPay | 21+ países | M-Pesa, MTN MoMo, Airtel Money, Orange Money, Tigo Pesa, Vodacom |
| Hub2 | Costa de Marfil, Senegal, Mali, Burkina Faso, Togo, Benín, Guinea, Camerún | Orange Money, MTN MoMo, Moov Money, Wave |
| PaiementPro | Costa de Marfil, Senegal, Burkina Faso, Togo, Benín | Dinero móvil + Visa/Mastercard |
| BUI | Costa de Marfil, Senegal, Mali, Burkina Faso | Dinero móvil, tarjetas |
| Paystack | Nigeria, Ghana, Sudáfrica, Kenia | Tarjetas, transferencia bancaria, USSD, dinero móvil |
| Flutterwave | 30+ países africanos | Tarjetas, dinero móvil, transferencias bancarias, USSD |
| Cellulant (Tingg) | 35+ países africanos | Dinero móvil, tarjetas, transferencias bancarias |
| CinetPay | 15+ países africanos francófonos | Dinero móvil, tarjetas |
| Campay | Camerún | MTN MoMo, Orange Money |
| NotchPay | Camerún, Costa de Marfil, Senegal | Dinero móvil, tarjetas |
Asia-Pacífico
| Proveedor | Países | Métodos clave |
|---|---|---|
| Razorpay | India | UPI, tarjetas, billeteras, banca en línea |
| PhonePe | India | UPI |
| GCash | Filipinas | Billetera electrónica |
| GrabPay | Sudeste asiático | Billetera electrónica |
| PromptPay | Tailandia | Transferencia bancaria |
| LINE Pay | Japón, Taiwán, Tailandia | Billetera electrónica |
| Alipay | China, global | Billetera electrónica |
| WeChat Pay | China, global | Billetera electrónica |
América Latina
| Proveedor | Países | Métodos clave |
|---|---|---|
| MercadoPago | Argentina, Brasil, México, Chile, Colombia, Uruguay | Tarjetas, Pix, Boleto, billeteras |
| PagSeguro | Brasil | Pix, Boleto, tarjetas |
| OXXO | México | Voucher de efectivo |
| Conekta | México | Tarjetas, OXXO, SPEI |
Oriente Medio y Norte de África
| Proveedor | Países | Métodos clave |
|---|---|---|
| Tap Payments | EAU, Arabia Saudita, Kuwait, Baréin, Catar, Omán, Egipto, Jordania | Tarjetas, Apple Pay, billeteras |
| Fawry | Egipto | Efectivo, billeteras, tarjetas |
| HyperPay | Arabia Saudita, EAU, Jordania, Egipto | Tarjetas, mada, Apple Pay |
Cobertura por países
La siguiente tabla muestra una muestra representativa de la cobertura por países. La lista completa abarca más de 200 países:
| Región | Países | Métodos principales | Proveedores principales |
|---|---|---|---|
| Norteamérica | EE. UU., CA | Tarjetas, ACH, billeteras | Stripe, PayPal, Square |
| Europa Occidental | UK, FR, DE, ES, IT, NL, BE | Tarjetas, SEPA, iDEAL, Bancontact | Stripe, Adyen, PayPal |
| Europa Oriental | PL, CZ, RO, HU | Tarjetas, transferencias locales | Stripe, Adyen |
| África Occidental (francófona) | CI, SN, ML, BF, TG, BJ, GN, CM | Orange Money, MTN MoMo, Wave, Moov | Hub2, PaiementPro, PawaPay |
| África Occidental (anglófona) | NG, GH | Tarjetas, transferencia bancaria, MTN MoMo | Paystack, Flutterwave |
| África Oriental | KE, TZ, UG, RW | M-Pesa, MTN MoMo, Airtel Money | PawaPay, Flutterwave |
| África Austral | ZA, MZ, ZM, MW | Tarjetas, dinero móvil | Paystack, PawaPay |
| África Central | CM, CD, CG | MTN MoMo, Orange Money, Airtel | PawaPay, Hub2 |
| Asia del Sur | IN | UPI, tarjetas, billeteras | Razorpay |
| Sudeste Asiático | PH, TH, SG, MY, ID | Billeteras electrónicas, tarjetas, transferencia bancaria | GrabPay, varios locales |
| Asia Oriental | CN, JP | Alipay, WeChat Pay, tarjetas | Alipay, LINE Pay |
| América Latina | BR, MX, AR, CO, CL | Pix, Boleto, OXXO, tarjetas | MercadoPago, Conekta |
| MENA | AE, SA, EG, JO | Tarjetas, mada, billeteras | Tap Payments, Fawry |
Cómo funciona el enrutamiento
Cuando tu aplicación envía una solicitud de pago a 0fee, el motor de enrutamiento ejecuta un proceso de decisión en múltiples pasos:
Paso 1: Detección de país
El campo country en la solicitud (ISO 3166-1 alfa-2) determina qué proveedores son elegibles. Cada proveedor tiene una lista registrada de países soportados.
Paso 2: Coincidencia de método
El campo method (ej., PAYIN_ORANGE_CI, PAYIN_CARD) filtra los proveedores a aquellos que soportan el método de pago solicitado en el país dado.
Paso 3: Verificación de credenciales
El motor verifica si la aplicación del comerciante tiene credenciales válidas y activas para cada proveedor elegible. Un proveedor sin credenciales configuradas es excluido.
Paso 4: Puntuación del proveedor
Cada proveedor restante recibe una puntuación compuesta basada en:
pythondef calculate_provider_score(
provider: Provider,
app_config: AppRoutingConfig
) -> float:
# Tasa de éxito en tiempo real (últimas 24 horas)
success_weight = 0.35
success_score = provider.metrics.success_rate_24h
# Latencia promedio (menor es mejor)
latency_weight = 0.20
latency_score = 1.0 - min(provider.metrics.avg_latency_ms / 10000, 1.0)
# Costo de transacción (menor es mejor)
cost_weight = 0.25
cost_score = 1.0 - min(provider.fee_percent / 5.0, 1.0)
# Prioridad del comerciante (configurada en el panel)
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
)Paso 5: Selección y failover
El proveedor con la puntuación más alta es seleccionado como principal. El segundo y tercero quedan en cola como objetivos de failover. Si el principal devuelve un error no reintentable (proveedor caído, mantenimiento, límite de tasa), el motor reintenta automáticamente con el siguiente proveedor.
Solicitud: Pagar 5.000 XOF vía Orange Money en CI
|
+-> Puntuación: Hub2 (0,92) -- PRINCIPAL
+-> Puntuación: PaiementPro (0,87) -- FAILOVER 1
+-> Puntuación: PawaPay (0,81) -- FAILOVER 2
|
Hub2 procesa exitosamente -> listo
Hub2 falla (503) -> reintentar PaiementPro -> éxitoEste mecanismo de failover es invisible para el comerciante. Envían una solicitud y reciben una respuesta. La lógica de enrutamiento y reintento es completamente interna.
La experiencia del SDK
0fee proporciona SDKs en siete lenguajes. Cada SDK envuelve la API REST con modelos tipados, reintentos automáticos y patrones idiomáticos para cada lenguaje.
Instalación
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 ZeroFeeEjemplo en TypeScript: flujo completo de pago
typescriptimport { ZeroFee } from 'zerofee';
const zf = new ZeroFee({
apiKey: process.env.ZEROFEE_API_KEY!,
environment: 'live' // o 'test'
});
// 1. Crear un pago
const payment = await zf.payments.create({
amount: 25_00, // $25,00 en centavos
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. Verificar estado del pago
const status = await zf.payments.get(payment.id);
console.log(status.status);
// -> 'pending' | 'completed' | 'failed' | 'expired'
// 3. Emitir un reembolso
const refund = await zf.refunds.create({
paymentId: payment.id,
amount: 25_00, // reembolso total
reason: 'Customer requested cancellation'
});Ejemplo en Python: pago con dinero móvil
pythonfrom zerofee import ZeroFee
zf = ZeroFee(api_key="zf_live_...")
# Crear un pago Orange Money en Costa de Marfil
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}")
# El cliente recibe USSD push en su teléfono
# Listar pagos recientes con filtros
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}")Manejo de 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':
// Cumplir el pedido
fulfillOrder(event.data.metadata.orderId);
break;
case 'payment.failed':
// Notificar al cliente
notifyPaymentFailed(event.data.customer.email);
break;
case 'refund.completed':
// Actualizar estado del pedido
markOrderRefunded(event.data.paymentId);
break;
}
res.status(200).json({ received: true });
} catch (err) {
console.error('Webhook verification failed:', err);
res.status(400).json({ error: 'Invalid signature' });
}
});Métodos de pago disponibles por categoría
0fee soporta 117 métodos de pago organizados en cinco categorías:
Tarjetas (global)
| Método | Descripción |
|---|---|
| PAYIN_CARD | Visa, Mastercard, Amex, Discover, JCB, UnionPay |
| PAYIN_CARD_3DS | Tarjetas con autenticación 3D Secure obligatoria |
Dinero móvil (África)
| Método | Países |
|---|---|
| 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 |
Transferencias bancarias
| Método | Países |
|---|---|
| PAYIN_SEPA | UE/EEE |
| PAYIN_ACH | EE. UU. |
| PAYIN_WIRE | Global |
| PAYIN_PIX | BR |
| PAYIN_SPEI | MX |
| PAYIN_IDEAL | NL |
| PAYIN_BANCONTACT | BE |
| PAYIN_UPI | IN |
Billeteras digitales
| Método | Disponibilidad |
|---|---|
| PAYIN_APPLE_PAY | EE. UU., UK, UE, AU, CA, SG, HK, JP |
| PAYIN_GOOGLE_PAY | EE. UU., UK, UE, AU, CA, SG, IN |
| PAYIN_PAYPAL | 200+ países |
| PAYIN_ALIPAY | CN, global |
| PAYIN_WECHAT_PAY | CN, global |
| PAYIN_GRABPAY | SG, MY, PH, TH |
| PAYIN_GCASH | PH |
Efectivo y vouchers
| Método | Países |
|---|---|
| PAYIN_OXXO | MX |
| PAYIN_BOLETO | BR |
| PAYIN_FAWRY | EG |
Precios
0fee cobra un 0,99% fijo por transacción exitosa. Eso es todo.
| Característica | 0fee.dev | Competidores típicos |
|---|---|---|
| Tarifa por transacción | 0,99% | 2,5% - 3,5% |
| Tarifa mensual | $0 | $0 - $500+ |
| Tarifa de configuración | $0 | $0 - personalizado |
| Recargo del proveedor | Transferido al costo | Frecuentemente incrementado |
| Compromiso mínimo | Ninguno | Frecuentemente anual |
| Cobertura en África | 50+ países | Limitada o ninguna |
La tarifa de 0,99% es el costo de la capa de orquestación. Las tarifas del proveedor (el 2,9% de Stripe, las tarifas variables de PawaPay, etc.) se transfieren al costo. El comerciante ve un desglose transparente: tarifa de orquestación + tarifa del proveedor = costo total por transacción.
Comenzar: cinco minutos para pagos globales
bash# 1. Instalar el SDK
npm install zerofee
# 2. Obtener tu clave de API en dashboard.0fee.dev
# 3. Comenzar a aceptar pagostypescriptimport { ZeroFee } from 'zerofee';
const zf = new ZeroFee({ apiKey: 'zf_test_...' });
// Aceptar un pago desde cualquier lugar del mundo
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}`);El modo de prueba usa proveedores simulados que reflejan el comportamiento real del proveedor -- incluyendo flujos asíncronos de dinero móvil con retrasos configurables y escenarios de fallo. Cuando estés listo para ir a producción, cambia zf_test_ por zf_live_, configura tus credenciales de proveedor en el panel de control y tu integración está lista para producción.
Una API. Cincuenta y tres proveedores. Doscientos países. Cero tarifas mensuales.
Este artículo es parte de la serie "Cómo construimos 0fee.dev". 0fee.dev es un orquestador de pagos que cubre más de 53 proveedores en más de 200 países, construido por Juste A. GNIMAVO y Claude desde Abiyán sin ningún ingeniero humano. Sigue la serie para conocer la historia completa de construcción.