¿Qué vas a lograr?
Al terminar esta guía tendrás un servidor que recibe y valida webhooks de OnePay, permitiéndote reaccionar en tiempo real a eventos como pagos aprobados, cargos exitosos o dispersiones completadas.Prerrequisitos
- Cuenta de OnePay con llaves API
- Un servidor web con una URL pública accesible (o Ngrok para desarrollo local)
¿Cómo funcionan los webhooks?
OnePay envía una solicitud HTTP POST a tu URL con:- El payload del evento en el body
- Un header
x-webhook-tokencon un token de autenticación - Una firma HMAC-SHA256 para verificar la integridad
Paso a paso
1
Configurar la URL del webhook
- Ve a Desarrolladores > Webhooks en el panel de OnePay
- Agrega la URL de tu servidor (ej:
https://tuapp.com/webhooks/onepay) - Copia el secreto generado y el token de autenticación - los necesitarás para verificar los webhooks
2
Crear el endpoint en tu servidor
Tu servidor debe:
- Recibir solicitudes POST
- Verificar la firma HMAC
- Responder
200 OKinmediatamente - Procesar el evento de forma asíncrona
- Node.js (Express)
- Python (Flask)
3
Probar con Ngrok (desarrollo local)
Si estás desarrollando en local, usa Ngrok para exponer tu servidor:Copia la URL generada (ej:
https://abc123.ngrok.io/webhooks/onepay) y configúrala como URL del webhook en el panel de OnePay.Eventos disponibles
Pagos
Cargos (Débitos)
Dispersiones
Suscripciones
Cuentas
Esta es una selección de los eventos más usados. El listado completo está en la referencia de webhooks.
Estructura del payload
Cada webhook tiene la siguiente estructura:payment, charge, cashout, subscription, etc.).
Buenas prácticas
Qué pasa si tu servidor falla
Si una entrega no responde2xx/3xx en 10 segundos, OnePay la reintenta espaciando los intentos
10 s, 30 s, 1 min, 2 min y 5 min: 6 intentos en total —la entrega inicial y 5 reintentos— a lo
largo de unos 9 minutos. Un 4xx de tu lado también dispara reintentos.
Además, dos procesos periódicos reenvían lo que quedó sin entregar, con reglas distintas entre
sí: la reconciliación da por terminal cualquier respuesta menor que 500 (un 4xx tuyo cierra el
evento), mientras que el reenvío masivo solo excluye 2xx/3xx, así que un evento que solo recibió
4xx puede volver a llegarte. Un endpoint que falla de forma sostenida se desactiva solo.
El detalle completo —calendario, reenvío automático, desactivación y cómo reactivar el endpoint—
está en Entrega y reintentos.
- Verifica la firma: Siempre valida el HMAC antes de procesar el evento
- Idempotencia: Usa el
event.type+ el ID del recurso para evitar procesar un evento duplicado. Los reintentos y los reenvíos automáticos hacen que recibir el mismo evento dos veces sea normal, no una excepción - Responde rápido: Retorna
200inmediatamente y procesa el evento en segundo plano - Registra los eventos: Guarda un log de todos los webhooks recibidos para debugging
- Diferencia ambientes: El campo
event.environmentindica si estestolive
Errores comunes
Siguiente paso
Cobrar con link de pago
Crea tu primer cobro y recibe el webhook de pago aprobado.
Dispersar dinero
Envía dinero y recibe el webhook de dispersión procesada.