Webhooks

Verificación de firma

Verificar el header X-Gokeipay-Signature HMAC-SHA256.

Cada webhook de SkipPay viene firmado con HMAC-SHA256 usando tu webhook_secret. Verifica siempre la firma antes de confiar en el payload — sino cualquiera puede mandar POST falsos a tu endpoint.

Headers

Content-Type: application/json
X-Gokeipay-Signature: sha256={hex}
X-Skippay-Signature: sha256={hex}   # alias legacy, mismo valor

Cualquiera de los dos sirve; siempre coinciden. Código nuevo debería leer X-Gokeipay-Signature.

Fórmula

firma = HMAC-SHA256(webhook_secret, raw_request_body)

Lee los bytes crudos del body — no dejes que tu framework parsee JSON primero, porque al re-serializar cambia el whitespace y rompe la firma. Compara con una función tiempo-constante (timingSafeEqual, hash_equals, hmac.compare_digest).

Errores comunes

  • Parsear JSON antes de firmar. La firma es sobre los bytes crudos. Si re-serializas, las diferencias de whitespace causan mismatch.
  • Usar comparación == regular. Vulnerable a timing attacks.
  • Guardar el secreto en código de cliente. Es server-only.

Implementación

Snippets listos para copiar en Node, Python, PHP y Go: Recetas → Verificar un webhook.

On this page