Descripción general
Los webhooks notifican a tu servidor cuando ocurren eventos de pago. Configura elwebhookUrl al crear un pago, y Ebioro enviará un POST a esa URL cada vez que el estado del pago cambie.
Payload del webhook
Tipos de eventos
Un pago puede emitir varios eventos
transaction_updated a medida que avanza (por ejemplo underpaid y luego paid), y la cantidad puede variar según el tipo de liquidación. No asumas un número fijo — basa tu lógica en el último status y settlement_status de cada evento, y trata settlement_status: "paid" como la señal de que los fondos se han liquidado en tu cuenta. Deduplica por el id del pago.Verificación de webhooks
Cada webhook incluye un headerX-WEBHOOK-AUTH con una firma HMAC-SHA256. Siempre verifica esta firma antes de procesar el webhook.
La firma se calcula sobre el cuerpo de la solicitud sin procesar (raw) tal como se envió. Verifica contra esos bytes sin procesar — no analices el JSON para volver a serializarlo, porque un objeto re-serializado puede diferir en el orden de las claves o en los espacios y la firma dejará de coincidir.
Requisitos
- La URL del webhook debe usar HTTPS en producción
- Tu endpoint debe responder con código de estado 200
- Responde dentro de 10 segundos o la solicitud expirará
Política de reintentos
Si tu endpoint devuelve un código de estado diferente a 200 o expira, el webhook no se reintenta automáticamente. Usa el registro de entregas para encontrar entregas fallidas y reenviarlas.Registro de entregas y reenvío
Cada entrega de webhook queda registrada — exitosa o no. Usa la API de registros de webhooks para auditar y recuperar:success | failed | skipped), el código HTTP, el tiempo de respuesta y el número de intentos.
Un reenvío reproduce el payload almacenado originalmente, firmado de nuevo con tu clave secreta actual:
- El payload es idéntico byte a byte al de la entrega original — tu endpoint recibe el mismo evento otra vez. Deduplica por el contenido del evento (id del pago + estado), no por la firma.
- Los reenvíos están limitados a 10 por minuto.