Comment on page
Webhooks
Através do recurso de webhooks, a plataforma enviará um POST para as URLS cadastradas sempre quando algum evento acontecer. O payload do recurso é enviado com todas as includes disponíveis.
GET https://api.dooki.com.br/v2/{alias}/webhooks/events
Evento | Descrição |
order.created | Pedido criado |
order.paid | Pedido aprovado |
order.status.updated | O status de um pedido foi atualizado |
order.invoice.created | Nota fiscal de um pedido foi criada |
order.invoice.updated | Nota fiscal de um pedido foi atualizada |
transaction.payment.refused | O pagamento de uma transação foi negado |
cart.reminder | Notificação de carrinho abandonado |
customer.created | Cliente criado |
customer.address.created | Endereço do cliente criado |
product.created | Produto criado |
product.updated | Produto atualizado |
product.deleted | Produto excluído |
product.inventory.updated | Estoque de produto atualizado |
Segurança
A validação do webhook serve para verificar se realmente ele foi enviado pela Yampi, e é de extrema importância a sua utilização para que suas transações estejam seguras.
Para fazer a validação, são necessárias duas informações de nosso webhook:
- Valor do header X-Yampi-Hmac-SHA256. Vamos chamar esse valor de "assinatura do webhook";
- Corpo da requisição (no mesmo formato mostrado na seção anterior). Com esses dois valores, basta realizar o base64 do algoritmo HMAC-SHA256 do corpo da requisição utilizando a chave secreta do Webhook e comparar com a assinatura do webhook. Se os valores forem iguais, excelente. Caso contrário, não fomos nós que enviamos essa requisição!
Veja abaixo um exemplo de função em PHP que calcula a assinatura:
function hmac_signature(array $body, $webHookSecret)
{
$payload = json_encode($body);
return base64_encode(hash_hmac('sha256', $payload, $webHookSecret, true));
}
// Calculando a assinatura
$body = [
'event' => 'order.created',
'time' => '2020-06-20 00:00:00',
'resource' => [
'id' => 1121333,
// Aqui vem todo o payload do resource.
],
];
$signature = hmac_signature($body, 'wh_FBmkbmkMSAKmkMBKmdsbUUHjnlmlm');
echo $signature; // Output: NzhjMmM3NzcwZDM5NmM1ZWYxNjhjMDI5NmVhYjgzOTFlNDNlNmU0OWU5ZWZhMTRiYTIyNTI0NzdhNTVhZTMxNQ
Você encontrará a chave secreta do Webhook logo após ele ser criado.
GET https://api.dooki.com.br/v2/{alias}/webhooks
POST https://api.dooki.com.br/v2/{alias}/webhooks
Request para incluir um novo webhook
{
"url": "http://suaurl.com/api/webhooks",
"events": ["order.created", "cart.reminder"],
"name": "Nome do webhook"
}
Response de webhook
{
"data": [
"id": 1,
"url": "http://suaurl.com/api/webhooks"
]
}
Payload enviado pelo webhook
{
"event": "order.created",
"resource": {
// Payload de um pedido
}
}
Parâmetro | Tipo | Obrigatório | Descrição |
url | string | Sim | URL que o webhook será enviado. |
events | arrays | Sim | Quais eventos serão enviados para o endpoint cadastrado. |
name | string | Sim | Nome do webhook. |
PUT https://api.dooki.com.br/v2/{alias}/orders/webhooks/{id}
DELETE https://api.dooki.com.br/v2/{alias}/orders/webhooks/{id}
Last modified 1yr ago