Recepción y validación de firma

Objetivo

Garantizar que el webhook recibido:

  • Proviene de Bidzi (autenticidad)
  • No fue alterado (integridad)
  • No es replay (repetición maliciosa)

¿Qué envía Bidzi?

Bidzi envía un POST con un body JSON (serializado desde WebhookTransaction) y agrega headers para trazabilidad y verificación:

X-Bidzi-Id: identificador único del intento de entrega.

X-Bidzi-Timestamp: timestamp.

X-Bidzi-Signature: firma del request para verificación.

Firma del request

Bidzi genera la firma a partir del contenido: {X-Bidzi-Id}.{X-Bidzi-Timestamp}.{jsonBody} y la envía en el header X-Bidzi-Signature.

Manejo de errores

Todo el proceso está dentro de un try-catch que captura cualquier Throwable. Si ocurre un error (por ejemplo, falla de red, timeout o error de serialización), se registra el error y se persiste el evento usando saveEvent con código 500 y el mensaje del error, para dejar constancia del fallo.

Validación del webhook

Con el uso de X-Bidzi-Signature (generada a partir de X-Bidzi-Id, X-Bidzi-Timestamp y el body del request) y su verificación con el secreto compartido, se confirma que el webhook proviene de Bidzi y que el contenido no fue alterado durante el envío. De esta manera, el webhook recibido queda validado de forma segura antes de ser procesado.