Documentation Index
Fetch the complete documentation index at: https://docs.onepay.la/llms.txt
Use this file to discover all available pages before exploring further.
¿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
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
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)
Eventos disponibles
Pagos
| Evento | Descripción |
|---|---|
payment.created | Se creó una solicitud de pago |
payment.approved | El cliente completó el pago exitosamente |
payment.rejected | El pago fue rechazado |
payment.expired | El link de pago expiró |
payment.deleted | Se eliminó la solicitud de pago |
Cargos (Débitos)
| Evento | Descripción |
|---|---|
charge.succeeded | Cargo exitoso |
charge.declined | Cargo rechazado |
Dispersiones
| Evento | Descripción |
|---|---|
cashout.created | Dispersión creada |
cashout.processing | Dispersión en proceso |
cashout.processed | Dispersión completada exitosamente |
cashout.cancelled | Dispersión cancelada |
cashout.rejected | Dispersión rechazada |
Suscripciones
| Evento | Descripción |
|---|---|
subscription.created | Suscripción creada |
subscription.payment | Se generó un cobro de suscripción |
subscription.cancelled | Suscripción cancelada |
Cuentas
| Evento | Descripción |
|---|---|
account.enrolled | Cuenta bancaria vinculada exitosamente |
account.failed | Vinculación de cuenta falló |
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
| Problema | Causa | Solución |
|---|---|---|
| No recibo webhooks | URL incorrecta o inaccesible | Verifica que tu URL sea pública y responda a POST |
| Firma inválida | Secreto incorrecto o payload modificado | Verifica que usas el secreto correcto y no modificas el body |
| Eventos duplicados | Tu servidor respondió con error | Implementa idempotencia verificando el ID del evento |
| Webhooks en local | localhost no es accesible | Usa Ngrok u otra herramienta de tunneling |
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.