Os webhooks permitem que o sistema seja notificado de algo que acontecem em alguma conta.
A autenticação da mensagem é realizada através da criptografia AES da mensagem codificada com UTF-8 e pode ser validada com o hash SHA-256.
Os eventos seguintes serão enviados apenas após o atual ser recebido com sucesso
Estrutura
O evento do webhook contém os seguintes campos:
| Campo | Descrição |
|---|---|
| Type | O tipo do evento |
| Happened_at | Quando o evento aconteceu |
| Data | Os dados do evento |
| Data.Iv | Vetor de inicialização AES |
| Data.Encrypted | Mensagem codificada em UTF-8 e criptografada em AES |
| Data.Hash | Hash SHA-256 da mensagem codificada em UTF-8 |
Leitura
Considerando o exemplo abaixo com a chave AES em Base64: Ub4RuV4UujErUJWX/QPvEAM22j+HPMYT6cEmMGMHDHk=
{
"type": "teste",
"happened_at": "2025-01-01T03:00:00",
"data": {
"iv": "5cX3b4FE89HHYKFMQxYV4A==",
"encrypted": "1FvybSCq8ZdZM7PKxyPqBw==",
"hash": "ifMIIQx8eCC60JdPMedRv6Qz0gZqk+gIlHwxiN7bpuM="
}
}
O primeiro passo é extrair os bytes dos campos do objeto "data".
Em "iv" será encontrado o vetor de inicialização AES.
Em "encrypted" será encontrado os dados criptografados em AES da mensagem.
Em "hash" será encontrado o hash em SHA-256 da mensagem.
O próximo passo é utilizar a chave AES para obter os dados originais da mensagem.
Feito isso, utilize o SHA-256 para gerar um hash e comparar com o original.
Se não estiver igual, ignore a mensagem, pois não veio da OxPay.
Estando tudo OK, deve-se utilizar o encoding UTF-8 para converter os bytes em uma string.
Realizando todos os passos com sucesso, será encontrada a mensagem "Teste", confirmando a implementação do alritmo.