# Verificador de assinatura

> Cole o corpo de uma requisição ou de um webhook. Esta página calcula a assinatura passo a passo como a Cryptomus faz, compara cada passo com o seu e marca a primeira diferença. Tudo roda no seu navegador: esta página não consegue fazer nenhuma requisição de rede, então a sua API key nunca sai do seu computador.
>
> HTML: https://blockwallets.io/docs/sign?lang=pt · English: https://blockwallets.io/docs/sign.md?lang=en

## Assinatura da requisição (você chama a nossa API)

1. O texto assinado é o corpo exato da requisição que você envia, byte a byte (espaços, quebras de linha e escapes incluídos).
2. base64 dos bytes UTF-8 dele.
3. sign = md5(passo 2 + API key), enviado no cabeçalho `sign`; o cabeçalho `merchant` leva o UUID do merchant.

Com uma assinatura inválida a API retorna 401, e `debug.body_base64` na resposta é o passo 2 calculado sobre o corpo que recebemos, pronto para comparar com o seu.

## Assinatura do webhook (nós chamamos a sua URL de webhook)

1. Remova o campo `sign` e recodifique o resto como o `json_encode` do PHP faz: compacto, `/` escapada como `\/`, caracteres não ASCII mantidos.
2. base64 dos bytes UTF-8 do passo 1.
3. md5(passo 2 + API key) deve ser igual a `sign`. Use a API key do mesmo modo (Live / Test) do merchant.

## Causas comuns

- A API key do outro modo, ou uma que foi trocada.
- O framework serializou o corpo de novo (formatação, ordem das chaves, formato dos números); verifique contra o corpo bruto que você recebeu.
- Não escapar `/` como `\/` ao recodificar um webhook.

O verificador roda inteiramente no seu navegador e a página não consegue fazer requisições de rede, então a sua API key nunca sai do seu computador. Exemplos de código de verificação: https://blockwallets.io/docs/cryptomus?lang=pt#verify
