Skip to main content

¿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-token con un token de autenticación
  • Una firma HMAC-SHA256 para verificar la integridad

Paso a paso

1

Configurar la URL del webhook

  1. Ve a Desarrolladores > Webhooks en el panel de OnePay
  2. Agrega la URL de tu servidor (ej: https://tuapp.com/webhooks/onepay)
  3. 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:
  1. Recibir solicitudes POST
  2. Verificar la firma HMAC
  3. Responder 200 OK inmediatamente
  4. Procesar el evento de forma asíncrona
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:
El nombre del objeto principal varía según el tipo de evento (payment, charge, cashout, subscription, etc.).

Buenas prácticas

Siempre responde 200 OK antes de procesar el evento. El timeout de entrega es de 10 segundos: si tardas más, la entrega cuenta como fallida y OnePay la reintenta.

Qué pasa si tu servidor falla

Si una entrega no responde 2xx/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.
  1. Verifica la firma: Siempre valida el HMAC antes de procesar el evento
  2. 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
  3. Responde rápido: Retorna 200 inmediatamente y procesa el evento en segundo plano
  4. Registra los eventos: Guarda un log de todos los webhooks recibidos para debugging
  5. Diferencia ambientes: El campo event.environment indica si es test o live

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.