¿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
Estructura del payload
Cada webhook tiene la siguiente estructura:payment, charge, cashout, subscription, etc.).
Buenas prácticas
- 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 - 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.