2xx.
Cabeçalhos de entrega
Toda tentativa de entrega carrega estes cabeçalhos:
Os cabeçalhos descrevem a tentativa de entrega; o corpo descreve o evento. Em um replay,
Sphere-Timestamp e Sphere-Signature são gerados novamente — de forma que o mesmo caminho de código de verificação trata originais e replays — enquanto o corpo permanece idêntico byte a byte ao original.
Como a assinatura é calculada
A assinatura é um digest HMAC-SHA256, codificado em hexadecimal:secret— o segredo de assinatura do endpoint (whsec_...), retornado uma única vez quando você criou o endpoint.timestamp— o valor do cabeçalhoSphere-Timestamp.rawBody— os bytes brutos do corpo da requisição HTTP, exatamente como transmitidos.
Sphere-Signature usando uma comparação de tempo constante.
Proteja-se contra ataques de replay
Para impedir que entregas capturadas sejam reenviadas por terceiros, rejeite entregas cujoSphere-Timestamp tenha mais de 5 minutos. Replays manuais recebem um timestamp e uma assinatura novos, então replays legítimos sempre passam nesta verificação.
Implementações de referência
Cada snippet recebe os bytes do corpo bruto, os dois cabeçalhos e o segredo do seu endpoint, e retorna se a entrega é autêntica.Teste seu verificador
Antes de o primeiro evento real chegar, execute sua implementação contra este vetor de teste conhecido. Todas as entradas são fixas, então um verificador correto produz exatamente a assinatura mostrada. Qualquer diferença significa que os bytes que você está assinando não são os bytes que o SpherePay assinou — quase sempre um corpo re-serializado ou um separador. ausente.
. literal e o corpo bruto:
Sphere-Signature esperado é:
Verificação sem código
Reproduza a assinatura a partir de um shell com OpenSSL:(stdin)= em vez de SHA2-256(stdin)=; o digest hexadecimal é o mesmo.
Envie uma entrega de teste assinada para o seu endpoint
Este script faz o papel do SpherePay. Ele assina o corpo de teste com a hora atual e o envia ao seu receptor com os mesmos cabeçalhos que o SpherePay envia. Nada é enviado para o SpherePay nem recebido dele, e nada é criado na sua conta.- Inicie seu receptor localmente. O script envia a requisição para
http://localhost:3000/sphere-webhook. Se o seu receptor escuta em outro endereço, altere a URL no último comando. - Use o mesmo segredo no receptor e no script. Configure seu receptor com o segredo de teste do script, ou substitua
SECRETno script pelo segredowhsec_do endpoint que você está testando. - Execute o script. Cole o bloco inteiro em um terminal macOS, Linux ou WSL, onde
curleopensslestejam instalados. Ele gera um timestamp novo a cada execução, então a verificação de tolerância de 5 minutos é satisfeita. - Leia a resposta. A opção
-iimprime a linha de status HTTP. Um receptor correto responde2xx. - Execute de novo com uma alteração. Modifique um caractere em
BODYou emSECRETe execute novamente. Um receptor correto deve responder com um status não-2xx, como401.
Quando a verificação falha
Responda com um código de status não-2xx (por exemplo 401) e não processe o payload. A entrega é registrada como failed do lado do SpherePay, dando a você uma trilha de auditoria na API de Eventos.
Se você registrou a mesma URL receptora em múltiplas aplicações do SpherePay, o endpoint de cada aplicação tem seu próprio segredo. Use o
applicationId do payload para selecionar o segredo correto — consulte Payloads de eventos. Se não puder fazer o parse do corpo antes de verificar, tente cada um dos seus segredos conhecidos.