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 valorCualquiera 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.