Para notificar uma URL de sua escolha quando os seus créditos estiverem baixos, você deve entrar no seu Perfil no site da api do QualP e cadastrar um webhook.
Para configurar o webhook são necessarios os seguintes parâmetros:
Após esse webhook ser cadastrado e os créditos do usuário atingirem o valor informado, a URL especificada receberá uma requisição do tipo POST
. O header da requisição terá um parâmetro chamado signature contendo uma hash referente ao conteúdo da request encriptografada com o secret. O corpo da requisição será uma versão codificada em json
.
Como podemos ver no exemplo abaixo:
"signature" : "494fe7146e4cd162c9358a1d1c0cfabf562275f1c3d6146a05bcf3c4c59c360e"
{
"user" : {
"id": 123456,
"username": "joao",
"email": "[email protected]",
"cpf_cnpj": "12345678910",
"access_token": "sahfjkashdfasjhdfalkshfdaskjhf",
"company_name": null,
"phone": null,
"original_id": null,
"created_at": "2020-08-27T18:10:01.000000Z",
"updated_at": "2020-08-27T18:10:01.000000Z",
"is_active": 1
},
"credits" : 0,
"webhook" : {
"type" : "low-credits-webhook"
}
}
Receber o webhook no site informado é bem simples, basta apenas tratar o corpo da request que está codificado em json.
Para verificar a autenticidade de um webhook é necessário utilizar o parâmetro signature
que esta setado no header da requisição. Veja alguns exemplos abaixo:
//A variável $secret refere-se ao secret cadastrado no webhook
$computedSignature = hash_hmac('sha256', $request->getContent(), $secret);
//O $computedSignature deve conter o mesmo hash se comparado com o parâmetro signature setado no header, caso o contrário esse webhook é inválido.
if ($computedSignature === $request->header('signature')) {
//webhook válido
}else{
//webhook inválido
}
const http = require("http");
let crypto = require('crypto');
const server = http.createServer((req, res) => {
if (req.method == 'POST') {
let jsonString = '';
req.on('data', function (data) {
jsonString += data;
});
req.on('end', function () {
//A variável secret refere-se ao secret cadastrado no webhook
let computedSignature = crypto.createHmac('sha256', 'secret').update(jsonString).digest('hex');
//O computedSignature deve conter o mesmo hash se comparado com o parâmetro signature setado no header, caso o contrário esse webhook é inválido.
if (computedSignature === req.headers['signature']) {
//webhook válido
}else{
//webhook inválido
}
});
}
})