Cobrar en línea en Colombia sin fricción: cómo integré Wompi en ReservaGlamping
Qué es ReservaGlamping, por qué el Widget de Wompi en vez de su API directa, y la parte que nadie cuenta de integrar pagos: el pago no está confirmado hasta que llega el webhook.
Qué es ReservaGlamping
Antes de entrar en la parte técnica: ReservaGlamping es una plataforma para operadores de glamping independientes en Colombia. En vez de gestionar reservas por WhatsApp y hojas de cálculo, cada propiedad obtiene su propio sitio web con marca personalizada, un calendario de disponibilidad en tiempo real, y cobro de reservas integrado — sin que el operador tenga que construir ni mantener nada.
- Sitio web propio por propiedad, con su marca, sus alojamientos y su galería
- Calendario de disponibilidad en tiempo real, sin dobles reservas
- Cobro integrado con Wompi (tarjetas, PSE, Nequi, Daviplata)
- Automatización de emails de confirmación y recordatorios
- Dashboard de ocupación e ingresos para el operador
Si tenés un glamping — en Santander, en cualquier otra región de Colombia, o estás por abrir uno — y hoy dependés de WhatsApp, Instagram y una libreta para coordinar reservas, esto está pensado exactamente para ese problema. Podés ver la plataforma funcionando en vivo en booking-glamping.vercel.app, o escribirme directamente si querés que hablemos de tu propiedad.
El problema: cobrar en línea en Colombia no es solo "agregar Stripe"
Es fácil asumir que integrar pagos es plug-and-play: agregás una pasarela internacional y listo. El problema es que en Colombia buena parte de los pagos reales no pasan por tarjeta internacional — pasan por PSE (débito directo desde el banco), Nequi o Daviplata. Un glamping que solo acepta tarjeta pierde una porción real de reservas de gente que simplemente prefiere pagar con esos medios.
ReservaGlamping soporta tarjetas, PSE, Nequi y Daviplata, todo integrado a través de Wompi.
Por qué Wompi y no una pasarela internacional
Wompi es una pasarela colombiana (del grupo Bancolombia) que agrega todos esos métodos locales bajo una sola integración, en vez de tener que resolver cada uno por separado con proveedores distintos. Para un producto que vende exclusivamente al mercado colombiano, eso simplifica muchísimo el checkout.
La decisión: Widget de Wompi en vez de la API directa
Wompi ofrece dos caminos: integrar su API REST directamente (vos armás el formulario de pago y manejás la comunicación con sus endpoints) o usar su Widget de Checkout Web, que abre el formulario de pago propio de Wompi.
Más control sobre el formulario, pero también más responsabilidad: el flujo de datos de tarjeta pasa más cerca de tu propio código, lo que amplía el alcance de cumplimiento PCI que tenés que sostener vos.
Wompi asume el formulario de pago y el manejo directo de los datos sensibles. Se lanza más rápido y el alcance de PCI que te toca a vos es mucho menor.
Para un producto en etapa de lanzamiento, esa velocidad y ese menor alcance de responsabilidad pesaron más que el control extra de una integración a medida.
Lo que nadie te cuenta: el pago no está confirmado hasta que llega el webhook
Acá está el error más común al integrar cualquier pasarela de pago: tratar el redirect del navegador de vuelta a tu sitio como si fuera la confirmación del pago. No lo es. El usuario puede cerrar la pestaña antes de que el redirect ocurra, perder conexión, o en teoría ese redirect puede manipularse. La única fuente de verdad real es el webhook que Wompi envía servidor-a-servidor cuando el estado de la transacción cambia.
Así se ve el patrón, simplificado (no es el código exacto de producción, es la idea central):
export async function POST(req: Request) {
const event = await req.json();
// Nunca proceses el payload sin verificar la firma primero
if (!isValidWompiSignature(event, WOMPI_EVENTS_SECRET)) {
return new Response("invalid signature", { status: 401 });
}
const { reference, status } = event.data.transaction;
const reservation = await getReservationByReference(reference);
// El evento puede llegar más de una vez - esto tiene que ser idempotente
if (!reservation || reservation.paymentStatus === "paid") {
return new Response("ok", { status: 200 });
}
if (status === "APPROVED") {
await markReservationAsPaid(reservation.id);
await blockCalendarDates(reservation);
await sendConfirmationEmail(reservation);
} else if (status === "DECLINED") {
await markReservationAsFailed(reservation.id);
}
return new Response("ok", { status: 200 });
} Wompi puede reintentar el envío del mismo webhook si no recibe una respuesta 200 a tiempo. Si esa actualización no es idempotente, corrés el riesgo de bloquear las mismas fechas dos veces o mandar el email de confirmación repetido. Siempre revisá el estado actual antes de aplicar el cambio.
Dónde está hoy
ReservaGlamping está en desarrollo activo. Este artículo describe la arquitectura de pagos real detrás del producto, no un caso de éxito con métricas — todavía no tiene tracción de mercado que reportar, y preferimos decir eso claramente antes que inflar números.
Si estás construyendo un producto que necesita cobrar en línea en Colombia — glamping, reservas, suscripciones, lo que sea — y querés hacerlo bien desde el diseño (Widget vs API, webhooks, idempotencia) en vez de parchearlo después de que algo falle, hablemos.
¿Listo para iniciar tu proyecto?
Hablemos sobre cómo podemos ayudarte a construir tu producto, con una solución técnica que resista el mundo real.
Contáctanos