Makrosites

Suas ideias em realidade digital!

Webhooks em PHP: validação com assinatura HMAC (exemplo completo e seguro)

Webhooks em PHP: validação com assinatura HMAC (exemplo completo e seguro)

O que é um Webhook?

Webhook é uma requisição HTTP enviada automaticamente por outro sistema quando um evento acontece.

Exemplos:

Mas existe um problema grave: qualquer pessoa pode tentar enviar requisição para seu endpoint.

Por isso você precisa validar a assinatura (HMAC).


1️⃣ Estrutura básica do endpoint webhook.php

 "Payload ou assinatura ausente"]);
  exit;
}
---

2️⃣ Validando assinatura HMAC

A maioria dos gateways usa:

hash_hmac('sha256', payload, secret)
 "Assinatura inválida"]);
  exit;
}

⚠️ Sempre use hash_equals() para evitar ataques de timing.

---

3️⃣ Validando timestamp (proteção contra replay attack)

Alguns provedores enviam timestamp no header. Você pode bloquear requisições antigas:

 300) {
  http_response_code(403);
  echo json_encode(["error" => "Requisição expirada"]);
  exit;
}
---

4️⃣ Processando evento

 "JSON inválido"]);
  exit;
}

switch ($data["event"] ?? "") {
  case "payment.approved":
    // atualiza pedido
    break;

  case "subscription.cancelled":
    // cancela plano
    break;

  default:
    // loga evento desconhecido
}
---

5️⃣ Respondendo corretamente

Webhooks devem responder rápido (200 OK).

 "ok"]);
---

Boas práticas de produção


Exemplo completo final (resumido)

 "ok"]);
---