30 ago

Woocommerce – Verificando a assinatura no Webhook

Nos últimos tempos, tenho trabalhado bastante com PHP e em alguns projetos escolhi usar o WordPress, que já uso aqui no blog, estou habituado e é relativamente fácil conseguir material sobre ele na internet.

Desses projetos, um deles é uma loja virtual, e comecei a conhecer e utilizar o famoso plugin do WooCommerce, que transforma seu WordPress em uma loja virtual totalmente funcional.

Nesse projeto, surgiu a necessidade de quando ocorrer determinados eventos na loja, como a criação do pedido, comunicar o evento para um outro sistema. Foi aí que descobri a existência dos Webhooks do WooCommerce.

O que é Webhook

Segundo a Wikipedia, Webhooks são callbacks HTTP definidos pelo utilizador, e isso realmente resume muito bem.

Quem está acostumado já em trabalhar com eventos no Javascript por exemplo, entenderá fácil. No WooCommerce, algumas ações como criar ou atualizar um produto e criar um pedido, geram eventos. Nesses eventos, o motor do WooCommerce pode chamar páginas na Web passando algum conteúdo, semelhante no jQuery que quando algo acontece em determinado seletor você chama uma função definida por você. Assim, basta criar uma página que receberá este conteúdo e processar de alguma maneira.

Porém, como toda página, ela é aberta publicamente, e alguém com a URL pode tentar enviar dados falsos para ele, por exemplo para dar um desconto de 99% no próprio pedido. Para evitar isso, um dos cabeçalhos enviados para a página contém uma assinatura, que deve ser verificada para confirmar a identidade de quem enviou aquele conteúdo. E é para isso que estamos aqui!

Na rede, não consegui encontrar nenhum exemplo prático em PHP, além da documentação atual nessa parte não ajudar muito, e tive um pouco de dificuldade em entender como isso poderia ser feito, então vou compartilhar com vocês o meu método, que é extremamente simples e fácil.

Verificando o X-WC-Webhook-Signature

O cabeçalho que contém a assinatura se chama X-WC-Webhook-Signature. Para calcularmos o nosso valor para comparar com ele, vamos precisar dos dados do conteúdo e do valor do campo “Segredo” quando cadastramos o Webhook, em Woocommerce > Configurações > API dentro do painel do WordPress.

Webhook do WooCommerce

Webhook do WooCommerce

Com esse valor e o conteúdo, precisamos utilizar a função do PHP hash_hmac e codificar o retorno para base64. Para isso, criei esta função abaixo que faz tudo isso já:

Bem simples e direta, apenas uma linha pra fazer tudo que precisamos. Com isso, já sabemos se podemos confiar no conteúdo enviado ou não.

Abaixo, um exemplo bem simples de script, que apenas escreve as informações recebidas e a checagem de assinatura em arquivo:

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *