Comunidade
Problemas ao validar os weebhooks usando hashs
Boa tarde, eu estou testando validar um webhook no meu servidor usando node com nestjs seguindo a documentação oficial mas acontece que mesmo eu tentando de várias formas diferentes não funciona pois sempre o hash gerado do corpo da requisição é diferente do hash enviado no headers do webhook. No momento meu código está assim, tem algum erro que eu estou cometendo:
import { Controller, Post, Headers, Req } from '@nestjs/common';
import { createHash } from 'node:crypto';
@Controller()
export class AppController {
@Post('webhook-test')
webhook(@Req() request: any, @Headers() headers) {
const x_authenticity_token = headers['x-authenticity-token'];
// chama a função que vai comparar os hash
const webHookIsValid = this.validateWebhookNotification(
request.body,
x_authenticity_token,
);
console.log(webHookIsValid); // ERRO -> sempre loga: false
}
private validateWebhookNotification(
body: any,
x_authenticity_token: string,
): boolean {
const bodyAsString = JSON.stringify(body);
const signature = createHash('sha256')
.update(
Buffer.from(
process.env.PAGSEGURO_AUTH_TOKEN + '-' + bodyAsString,
'utf8',
),
)
.digest('hex');
return signature === x-authenticity-token;
}
}
Observações: o PAGSEGURO_AUTH_TOKEN é o token que foi gerado na minha sandbox de teste e ele está sendo importado normalmente. A requisição do webhook feito pelo PagSeguro pro meu servidor local também está funcionando e como ferramenta de tunelamento da requisição eu estou usando ngrok pra isso.
Eu vi que tem outra forma de resolver usando a url de notifications segundo a doc oficial mas não optei por paracer que vocês estão depreciando esse método. Estou correto disto ou eu pode usar como alternativa?
Desde já obrigado.