2xx.
Encabezados de entrega
Cada intento de entrega lleva estos encabezados:
Los encabezados describen el intento de entrega; el cuerpo describe el evento. En un reenvío,
Sphere-Timestamp y Sphere-Signature se generan de nuevo — de modo que la misma ruta de código de verificación maneja originales y reenvíos — mientras que el cuerpo permanece idéntico byte por byte al original.
Cómo se calcula la firma
La firma es un digest HMAC-SHA256, codificado en hexadecimal:secret— el secreto de firma del endpoint (whsec_...), devuelto una vez cuando creaste el endpoint.timestamp— el valor del encabezadoSphere-Timestamp.rawBody— los bytes crudos del cuerpo de la solicitud HTTP, exactamente como se transmitieron.
Sphere-Signature usando una comparación de tiempo constante.
Protégete contra ataques de repetición
Para evitar que entregas capturadas sean reenviadas por un tercero, rechaza las entregas cuyoSphere-Timestamp tenga más de 5 minutos de antigüedad. Los reenvíos manuales reciben una marca de tiempo y una firma nuevas, por lo que los reenvíos legítimos siempre pasan esta verificación.
Implementaciones de referencia
Cada fragmento de código toma los bytes crudos del cuerpo, los dos encabezados y el secreto de tu endpoint, y devuelve si la entrega es auténtica.Prueba tu verificador
Antes de que llegue el primer evento real, ejecuta tu implementación contra este vector de prueba conocido. Todas las entradas son fijas, por lo que un verificador correcto produce exactamente la firma mostrada. Cualquier diferencia significa que los bytes que estás firmando no son los bytes que firmó SpherePay — casi siempre un cuerpo re-serializado o un separador. faltante.
. literal y el cuerpo crudo:
Sphere-Signature esperado es:
Comprobación sin código
Reproduce la firma desde una shell con OpenSSL:(stdin)= en lugar de SHA2-256(stdin)=; el digest hexadecimal es el mismo.
Envía una entrega de prueba firmada a tu endpoint
Este script hace el papel de SpherePay. Firma el cuerpo de prueba con la hora actual y lo envía a tu receptor con los mismos encabezados que envía SpherePay. No se envía nada hacia ni desde SpherePay, y no se crea nada en tu cuenta.- Inicia tu receptor localmente. El script envía la solicitud a
http://localhost:3000/sphere-webhook. Si tu receptor escucha en otra dirección, cambia la URL en el último comando. - Usa el mismo secreto en el receptor y en el script. Configura tu receptor con el secreto de prueba del script, o reemplaza
SECRETen el script por el secretowhsec_del endpoint que estás probando. - Ejecuta el script. Pega el bloque completo en una terminal de macOS, Linux o WSL, donde estén instalados
curlyopenssl. Genera una marca de tiempo nueva en cada ejecución, por lo que la comprobación de tolerancia de 5 minutos se cumple. - Lee la respuesta. La opción
-iimprime la línea de estado HTTP. Un receptor correcto responde2xx. - Ejecútalo de nuevo con un cambio. Modifica un carácter en
BODYo enSECRETy ejecútalo otra vez. Un receptor correcto debe responder con un estado no2xx, como401.
Cuando la verificación falla
Responde con un código de estado no2xx (por ejemplo 401) y no proceses el payload. La entrega se registra como failed del lado de SpherePay, dándote un registro de auditoría en la API de Eventos.
Si registraste la misma URL receptora bajo múltiples aplicaciones de SpherePay, el endpoint de cada aplicación tiene su propio secreto. Usa el
applicationId del payload para seleccionar el secreto correcto — consulta Payloads de eventos. Si no puedes analizar el cuerpo antes de verificar, prueba cada uno de tus secretos conocidos.