Pasarelas de Pago en Colombia para Desarrolladores: Comparativa Técnica entre Wompi, Mercado Pago, PSE y Bold
Análisis técnico y financiero de las principales pasarelas de pago en Colombia. Comparativa de comisiones, APIs REST, webhooks criptográficos, PSE y Nequi para e-commerce y SaaS.
El comercio electrónico y las plataformas SaaS en Colombia han experimentado una evolución vertiginosa en los últimos cinco años. A diferencia de mercados como Estados Unidos o Europa, donde las tarjetas de crédito representan más del 80% de las transacciones digitales, el ecosistema de pagos colombiano posee particularidades culturales y bancarias únicas: el dominio indiscutible de PSE (Pagos Seguros en Línea de ACH Colombia), la omnipresencia de billeteras digitales como Nequi y Daviplata, y un consumidor que valora la flexibilidad de pagar tanto con tarjetas locales como con transferencias directas de cuenta a cuenta.
Para los líderes técnicos, arquitectos de software y fundadores de startups, elegir la pasarela de pagos adecuada no es una simple decisión comercial: es una decisión crítica de arquitectura. Una pasarela con APIs inestables, webhooks sin firmas criptográficas o tiempos de dispersión bancaria prolongados puede arruinar la tasa de conversión (conversion rate), disparar los costos de procesamiento y crear desajustes contables difíciles de subsanar.
En este artículo técnico, realizaremos una comparativa exhaustiva entre las tres pasarelas líderes en Colombia —Wompi (Bancolombia), Mercado Pago y Bold—, analizando sus comisiones reales, la calidad de sus SDKs, los mecanismos de validación de webhooks y cómo implementar un Patrón Adaptador unificado en TypeScript para alternar entre pasarelas sin cambiar la lógica de negocio.
1. El Ecosistema de Pagos en Colombia: Métodos y Preferencias
Antes de revisar el código, debemos entender qué métodos de pago exige el usuario colombiano para no abandonar el carrito de compras:
┌────────────────────────────────────────────────────────────────────────┐
│ Mix de Métodos de Pago Digitales en Colombia │
└────────────────────────────────────────────────────────────────────────┘
[PSE (ACH Colombia)] ~ 45% (Transferencia bancaria interbancaria)
[Billeteras: Nequi / Daviplata]~ 25% (Pagos móviles en tiempo real)
[Tarjetas de Crédito / Débito] ~ 22% (Visa, Mastercard, Amex, Diners)
[Efectivo / Redes de Recaudo] ~ 8% (Efecty, Baloto, Su Red, Paga Todo)
- PSE: Es el método rey para compras de tickets medianos y altos (educación, turismo, tecnología, pagos corporativos B2B). Descuenta el dinero directamente de la cuenta de ahorros o corriente del usuario.
- Nequi: Indispensable para compras de ticket bajo y comercio minorista (retail y gastronomía). Los usuarios esperan pagar escaneando un código QR o recibiendo una notificación push (push payment) en su celular.
- Tarjetas de Crédito: Clave para modelos de suscripción recurrente (recurring billing), reservas hoteleras con pre-autorización (tokenización de tarjetas) y compras en cuotas con intereses bancarios locales.
2. Comparativa Técnica y de Comisiones: Wompi vs. Mercado Pago vs. Bold
| Criterio de Selección | Wompi (Bancolombia) | Mercado Pago (Mercado Libre) | Bold (Fintech Colombiana) |
|---|---|---|---|
| Comisión Base (Tarjetas y PSE) | 2.65% + $700 COP + IVA (Tarifa estándar) | 3.29% + $800 COP + IVA (Inmediata) / 2.99% + $800 COP (14 días) | 2.99% + $900 COP + IVA (Tarjetas) / $900 COP fijos para PSE |
| Integración con Nequi | Nativa y directa (Push dinámico y QR Bancolombia) | Soportado a través de tarjeta de débito o PSE | Soportado mediante botón PSE / App |
| Checkout UI | Widget incrustado, redirección segura o API pura | Checkout Pro (Redirect) o Checkout Bricks (Modular en frontend) | Link de pago y botón de pago embebible |
| Mecanismo de Webhooks | Eventos JSON con cabecera de suma de verificación (checksum SHA-256) | Eventos Webhooks v2 con cabecera x-signature (HMAC-SHA256 con timestamp) | Notificaciones asíncronas con firma secreta |
| Dispersión a Cuenta Bancaria | Automática diaria hacia cuentas Bancolombia (gratis) | Retiro manual o programado a cualquier banco (1 a 2 días hábiles) | Automática al siguiente día hábil hacia cualquier banco |
| Ideal para: | Startups B2B, SaaS, e-commerce enfocado 100% en Colombia y Bancolombia | Hoteles, turismo, marketplaces multinacionales en LATAM | Pymes de comercio físico con datáfono que abren tienda virtual |
3. Seguridad en Notificaciones: Validación Criptográfica de Webhooks
El vector de ataque más común contra tiendas online es la inyección de confirmaciones de pago falsas (Fake Webhook Spoofing). Cada pasarela implementa una firma criptográfica distinta:
1. Wompi: Verificación de Checksum SHA-256
Wompi concatena las propiedades clave de la transacción con un secreto de eventos (Event Secret) configurado en el panel de control:
$$\text{Hash} = \text{SHA256}(\text{transaction.id} + \text{status} + \text{amount_in_cents} + \text{timestamp} + \text{events_secret})$$
Si el hash calculado coincide con el valor signature.checksum del payload, la notificación es auténtica.
2. Mercado Pago: Verificación HMAC-SHA256 con Timestamp (x-signature)
Mercado Pago utiliza una cabecera x-signature con dos valores: ts (timestamp UNIX) y v1 (hash HMAC-SHA256). Previene replay attacks limitando la tolerancia a 5 minutos y utiliza una clave secreta de webhook independiente del token de acceso.
4. Implementación del Patrón Adaptador en TypeScript
Para evitar que tu aplicación quede atrapada (vendor lock-in) con una sola pasarela de pagos, la mejor práctica de arquitectura limpia es implementar el Patrón Adaptador (Adapter Pattern).
A continuación implementamos una interfaz unificada y dos adaptadores listos para producción para Wompi y Mercado Pago:
import crypto from 'crypto';
import axios from 'axios';
// 1. Contrato Universal de Pagos
export interface CreatePaymentIntentParams {
orderId: string;
amountInCents: number;
currency: 'COP' | 'USD';
customerEmail: string;
redirectUrl: string;
description: string;
}
export interface PaymentIntentResult {
paymentId: string;
checkoutUrl: string;
gateway: 'WOMPI' | 'MERCADOPAGO';
}
export interface PaymentGatewayAdapter {
createPaymentIntent(params: CreatePaymentIntentParams): Promise<PaymentIntentResult>;
verifyWebhookSignature(headers: Record<string, string>, body: any): boolean;
}
// 2. Adaptador Wompi
export class WompiAdapter implements PaymentGatewayAdapter {
private publicKey: string;
private privateKey: string;
private eventsSecret: string;
constructor() {
this.publicKey = process.env.WOMPI_PUBLIC_KEY || '';
this.privateKey = process.env.WOMPI_PRIVATE_KEY || '';
this.eventsSecret = process.env.WOMPI_EVENTS_SECRET || '';
}
async createPaymentIntent(params: CreatePaymentIntentParams): Promise<PaymentIntentResult> {
// Generar firma de integridad para el widget de Wompi
const rawSignature = `${params.orderId}${params.amountInCents}${params.currency}${process.env.WOMPI_INTEGRITY_SECRET}`;
const signature = crypto.createHash('sha256').update(rawSignature).digest('hex');
// Wompi permite iniciar el pago directamente en su checkout web
const checkoutUrl = `https://checkout.wompi.co/p/?public-key=${this.publicKey}¤cy=${params.currency}&amount-in-cents=${params.amountInCents}&reference=${params.orderId}&signature:integrity=${signature}&redirect-url=${encodeURIComponent(params.redirectUrl)}`;
return {
paymentId: params.orderId,
checkoutUrl,
gateway: 'WOMPI',
};
}
verifyWebhookSignature(headers: Record<string, string>, body: any): boolean {
const transaction = body?.data?.transaction;
if (!transaction || !body?.signature?.checksum) return false;
// Concatenar: transaction.id + status + amount_in_cents + timestamp + eventsSecret
const concatenated = `${transaction.id}${transaction.status}${transaction.amount_in_cents}${body.timestamp}${this.eventsSecret}`;
const calculatedChecksum = crypto.createHash('sha256').update(concatenated).digest('hex');
return crypto.timingSafeEqual(
Buffer.from(calculatedChecksum),
Buffer.from(body.signature.checksum)
);
}
}
// 3. Adaptador Mercado Pago
export class MercadoPagoAdapter implements PaymentGatewayAdapter {
private accessToken: string;
private webhookSecret: string;
constructor() {
this.accessToken = process.env.MERCADOPAGO_ACCESS_TOKEN || '';
this.webhookSecret = process.env.MERCADOPAGO_WEBHOOK_SECRET || '';
}
async createPaymentIntent(params: CreatePaymentIntentParams): Promise<PaymentIntentResult> {
const response = await axios.post(
'https://api.mercadopago.com/checkout/preferences',
{
items: [
{
title: params.description,
quantity: 1,
unit_price: params.amountInCents / 100, // MP opera en unidades monetarias, no centavos
currency_id: params.currency,
},
],
external_reference: params.orderId,
payer: { email: params.customerEmail },
back_urls: {
success: params.redirectUrl,
failure: params.redirectUrl,
pending: params.redirectUrl,
},
auto_return: 'approved',
},
{
headers: { Authorization: `Bearer ${this.accessToken}` },
}
);
return {
paymentId: response.data.id,
checkoutUrl: response.data.init_point,
gateway: 'MERCADOPAGO',
};
}
verifyWebhookSignature(headers: Record<string, string>, body: any): boolean {
const signatureHeader = headers['x-signature'];
const requestId = headers['x-request-id'];
const entityId = body?.data?.id;
if (!signatureHeader || !requestId || !entityId) return false;
let ts = '';
let v1 = '';
signatureHeader.split(',').forEach((part) => {
const [key, val] = part.trim().split('=');
if (key === 'ts') ts = val;
if (key === 'v1') v1 = val;
});
if (!ts || !v1) return false;
const manifest = `id:${entityId};request-id:${requestId};ts:${ts};`;
const calculated = crypto.createHmac('sha256', this.webhookSecret).update(manifest).digest('hex');
return crypto.timingSafeEqual(Buffer.from(calculated), Buffer.from(v1));
}
}
5. Cuándo Usar Wompi vs. Cuándo Usar Mercado Pago en Producción
Selecciona Wompi si:
- Tu base de clientes está 100% en Colombia: La integración con Bancolombia (el banco con más de 18 millones de usuarios en el país) hace que la experiencia con Nequi y transferencias Bancolombia sea la más fluida y con menor tasa de fricción.
- Quieres dispersión automática diaria: Si tu cuenta de ahorros o corriente es Bancolombia, Wompi dispersa el saldo automáticamente todas las noches sin cobrar tarifa de transferencia bancaria.
- Manejas un modelo SaaS o de suscripciones B2B locales: La API de tokenización de Wompi es simple, robusta y con documentación moderna.
Selecciona Mercado Pago si:
- Operas en el sector Turismo u Hotelería: Mercado Pago permite cobrar en monedas locales a turistas de México, Brasil, Chile, Argentina y Perú sin necesidad de abrir entidades jurídicas en cada país.
- Utilizas CMS y Motores de Reserva Populares: Existe un ecosistema inmenso de plugins oficiales y de comunidad (como nuestro plugin de VikBooking Mercado Pago por $7 USD) que reducen el tiempo de implementación a minutos.
- Deseas Checkout en Cuotas sin Interés: Mercado Pago negocia promociones de cuotas sin interés directamente con bancos emisores, aumentando el ticket promedio de compra.
6. Soluciones de Integración de Pagos con DoneAPI
Integrar pasarelas de pago de manera segura, sin errores de conciliación y con máxima tasa de aprobación requiere dominar tanto la criptografía de firmas de red como la lógica de dispersión de fondos e impuestos locales de Colombia.
En DoneAPI ayudamos a empresas, startups y comercios electrónicos en toda la región a:
- Desarrollo de Pasarelas a la Medida y Adaptadores Universales: Diseñamos módulos que alternan dinámicamente entre Wompi, Mercado Pago o Bold para garantizar un 99.9% de disponibilidad de cobro.
- Plugin Oficial VikBooking Mercado Pago ($7 USD): Automatiza las reservas hoteleras en WordPress con confirmación instantánea vía webhooks v2 y conciliación contable sin comisiones recurrentes.
- Validación Criptográfica y Webhook Hardening: Blindaje de tus endpoints de notificación frente a ataques de suplantación y ataques de repetición.
- Utility APIs para E-Commerce: Accede a microservicios de festivos bancarios, acortadores de enlaces para WhatsApp y validación de empresas.
💬 ¿Necesitas integrar pasarelas de pago en Colombia, conectar Wompi o Mercado Pago con tu software, o adquirir el plugin de VikBooking ($7 USD)?
Conversa directamente con nuestros ingenieros fintech a través de WhatsApp.
Integra Pasarelas de Pago en Colombia con Soporte Senior de DoneAPI
Aumenta tu tasa de conversión con PSE, Nequi y tarjetas, y automatiza tus cobros con código robusto e idempotente.
7. Conclusión
El mercado de pagos en Colombia ofrece opciones maduras y altamente competitivas. Wompi sobresale por su integración nativa con el ecosistema Bancolombia y Nequi, mientras que Mercado Pago ofrece una cobertura regional insuperable para turismo e integraciones globales.
Al implementar una arquitectura basada en adaptadores desacoplados y validación criptográfica estricta de webhooks, tu plataforma protege sus ingresos, elimina errores de fraude y garantiza a los clientes colombianos una experiencia de pago segura, instantánea y sin fricciones.