Como corrigir webhook do WooCommerce que não dispara
O que é o webhook do WooCommerce que não dispara?
Um webhook do WooCommerce é uma notificação automática que a loja envia para uma URL externa quando algo acontece, como um pedido criado ou um produto atualizado. Em vez do sistema externo ficar perguntando, o WooCommerce avisa na hora. Quando ele não dispara, a integração (ERP, automação, marketplace) fica sem receber o evento, e os dois lados saem de sincronia sem nenhum erro visível para o cliente.
Como identificar
- Em WooCommerce > Configurações > Avançado > Webhooks, o webhook aparece com o status “Desativado” sem você ter desativado.
- O log de entregas (Delivery log) do webhook mostra resposta “HTTP 0” ou tempo esgotado, indicando que a URL de destino não respondeu.
- Um novo pedido é criado, mas o sistema externo nunca recebe o payload e nenhuma linha aparece no log de entrega do webhook.
- A entrega registra “signature mismatch” no destino, sinal de que o Secret do webhook não confere com o esperado pela integração.
Antes de começar: Não exponha a Delivery URL nem o Secret do webhook publicamente, e prefira destinos em HTTPS para o payload não trafegar em texto puro. Teste a reativação e o cron em staging antes de aplicar numa loja no ar.
Como prevenir
- Monitore o Delivery log dos webhooks e reative imediatamente qualquer um que o WooCommerce desativar por falha
- Use um cron real do servidor em vez do WP-Cron padrão para garantir que a fila de entregas sempre roda
- Mantenha a Delivery URL em HTTPS válido e confirme o Secret igual nos dois lados após qualquer mudança na integração
Causa
- Webhook desativado automaticamente pelo WooCommerce após cinco falhas consecutivas de entrega, ficando com status Disabled até ser reativado manualmente.
- URL de destino (Delivery URL) errada, fora do ar ou com certificado SSL inválido, fazendo a entrega falhar e nunca chegar ao sistema externo.
- WP-Cron travado ou desativado: a entrega do webhook é agendada na fila do cron, e sem ele rodando as notificações ficam paradas.
- Secret do webhook diferente do configurado no destino, fazendo a integração rejeitar o payload por assinatura inválida e parecer que não disparou.
- Tópico (Topic) do webhook mal escolhido, escutando um evento que não acontece, ou o pedido sendo criado por um fluxo que não aciona o gancho esperado.
Como resolver
- Reative o webhook e cheque o status: em WooCommerce > Configurações > Avançado > Webhooks, abra o webhook e mude o status de Desativado para Ativo. O WooCommerce desativa o webhook sozinho após cinco falhas seguidas, então isso costuma ser o primeiro ajuste.
- Valide a Delivery URL e o SSL: confirme que a URL de destino está correta, acessível pela internet e com HTTPS válido. Teste a URL fora do site (por curl ou navegador) para garantir que ela responde 200 antes de o WooCommerce tentar entregar.
- Confira o log de entregas: no próprio webhook, abra o Delivery log e leia a última tentativa. Códigos como HTTP 0, timeout ou 401/404 dizem se o problema é rede, SSL, autenticação ou rota inexistente no destino.
- Verifique o WP-Cron: a entrega do webhook depende da fila do WP-Cron. Se o cron está travado ou desativado (define WP_CRON_DISABLE), configure um cron real do servidor chamando wp-cron.php por minuto para destravar a fila de entregas.
- Alinhe o Secret e dispare um teste: garanta que o Secret do webhook é idêntico ao configurado na integração de destino. Depois, crie um pedido de teste e confirme que uma nova linha de sucesso aparece no Delivery log.
PHP
// functions.php do tema filho — registra no log do WooCommerce cada entrega de webhook
// (ajuda a ver se o WooCommerce ESTA tentando disparar e qual resposta recebe do destino)
add_action( 'woocommerce_webhook_delivery', function ( $http_args, $response, $duration, $arg, $webhook_id ) {
$code = is_wp_error( $response ) ? $response->get_error_message() : wp_remote_retrieve_response_code( $response );
$logger = wc_get_logger();
$logger->info(
sprintf( 'Webhook #%d entregue em %.2fs — resposta: %s', $webhook_id, $duration, $code ),
array( 'source' => 'webhook-delivery-debug' )
);
}, 10, 5 );
// Veja em WooCommerce > Status > Logs (source: webhook-delivery-debug).
// Se NADA for registrado ao criar um pedido, o webhook nem esta sendo disparado (status/cron).
Perguntas frequentes
Por que meu webhook do WooCommerce ficou desativado sozinho
O WooCommerce desativa automaticamente um webhook depois de cinco entregas falhas seguidas, para não insistir num destino quebrado. Corrija a causa da falha (URL, SSL ou destino fora do ar) e reative o webhook em WooCommerce > Configurações > Avançado > Webhooks.
O webhook não dispara ao criar um pedido. Por onde começo
Primeiro confira se o status está Ativo e leia o Delivery log do webhook. Se nenhuma tentativa aparece ao criar o pedido, o problema é o status ou o WP-Cron parado. Se a tentativa aparece com erro, o problema está na URL ou no destino.
O WP-Cron influencia na entrega do webhook
Sim. A entrega do webhook é agendada na fila do WP-Cron e processada quando o cron roda. Se o WP-Cron está desativado ou travado, as notificações ficam paradas. Configurar um cron real do servidor chamando wp-cron.php destrava a fila.
O que significa HTTP 0 no log de entrega do webhook
HTTP 0 indica que o WooCommerce não conseguiu sequer conexão com a Delivery URL: destino fora do ar, DNS errado, firewall bloqueando ou certificado SSL inválido. Teste a URL por fora do site (curl ou navegador) para confirmar que ela responde antes de tentar de novo.
Recebo signature mismatch no destino do webhook. Como resolvo
O Secret do webhook no WooCommerce precisa ser exatamente igual ao configurado na integração de destino, pois ele assina o payload. Copie o mesmo Secret nos dois lados e dispare um pedido de teste para confirmar que a assinatura passa a bater.
Como faço um teste do webhook sem esperar um pedido real
Crie um pedido de teste no painel ou edite um produto que esteja no tópico do webhook para acionar o evento. Depois abra o Delivery log do webhook e confirme que uma nova linha com resposta de sucesso (HTTP 200) foi registrada.














