Guia de Integração — Melhor Envio

Guia de Integração — Plugin ZHF Melhor Envio

Passo a passo para conectar o ZHF Ecommerce ao Melhor Envio, configurar o webhook e ativar o fluxo de cotação e compra de etiqueta.

Quem é este guia para: lojistas e operadores que vão integrar a loja do zero. Siga as etapas na ordem — cada uma depende da anterior.


1. Pré-requisitos

Antes de começar, confirme que você tem:

  • ZHF Ecommerce instalado e ativo na loja.
  • Plugin ZHF Melhor Envio instalado e ativo.
  • Conta no Melhor Envio com acesso ao painel de integrações (Área Dev).
  • Loja com URL pública em HTTPS — obrigatório para o webhook funcionar (ambientes em localhost não recebem webhook).
  • HPOS (armazenamento de pedidos de alta performance) ativo, se você quiser usar o box de Melhor Envio dentro do pedido para cotar e comprar etiqueta.
    • Ative em: Ecommerce → Configurações → Avançado → Recursos → High-performance order storage.
  • Decisão de ambiente: começar em sandbox (testes) ou já em produção. Os dois usam apps e tokens diferentes.

2. Acessar o painel e abrir as configurações

  1. Faça login no painel administrativo em /zhf-admin.
    • Após o login, o painel administrativo continua acessível em /wp-admin/.
  2. No menu lateral, acesse Ecommerce → Configurações → Entregas.
  3. Abra a seção Melhor Envio.
    • Atalho direto: admin.php?page=wc-settings&tab=shipping&section=zhf_melhor_envio

3. Copiar os dados de configuração do plugin

Na seção Melhor Envio, abra o bloco Configurações do aplicativo → Dados de configuração. O plugin exibe, com botões de Copiar, exatamente o que você precisa cadastrar no Melhor Envio:

Campo no Melhor EnvioValor exibido pelo pluginObservação
Nome da plataformaZHF-ECOMMERCEFixo
Site da plataformaURL da sua lojaDinâmico por site
URL do ambiente de testesURL da sua lojaDinâmico
URL de redirecionamento após autorização{site}/wp-admin/admin-post.php?action=zhf_me_oauth_callbackCallback OAuth
Descrição do aplicativoCotação e compra de etiquetaFixo
URL Webhook{site}/wp-json/zhf-me/v1/webhookAlternativa: index.php?rest_route=/zhf-me/v1/webhook

Atenção: copie a URL de redirecionamento exatamente como o plugin exibe. Uma diferença de um caractere faz o OAuth falhar.


4. Criar o aplicativo no Melhor Envio

  1. No Melhor Envio, acesse Integrações → Área Dev (https://app.melhorenvio.com.br/integracoes/area-dev).
  2. Crie um novo aplicativo.
  3. Cole cada campo copiado do plugin no formulário correspondente.
  4. Salve o aplicativo.
  5. Copie o Client ID e o Client Secret gerados.

O Client Secret também é usado para validar a assinatura do webhook. Guarde-o com cuidado e nunca o exponha publicamente.


5. Conectar via OAuth

  1. Volte às configurações do plugin (Ecommerce → Configurações → Entregas → Melhor Envio).
  2. Selecione o Ambiente correto: Produção ou Sandbox.
  3. Cole o Client ID e o Client Secret.
  4. Clique em Salvar alterações.
  5. Clique em Conectar com Melhor Envio e autorize no site do Melhor Envio.
  6. Aguarde o retorno automático ao painel.

Resultado esperado: o status de conexão muda para Conectado.

O plugin renova o token automaticamente (refresh quando faltam ≤ 5 minutos para expirar, além de uma renovação diária preventiva). Se a renovação diária falhar, o plugin envia um e-mail ao admin.


6. Selecionar as modalidades disponíveis

Esta etapa define quais serviços (PAC, SEDEX, Jadlog etc.) ficam disponíveis para uso na loja.

  1. Ainda na seção Melhor Envio, localize Modalidades Disponíveis.
  2. Clique em Verificar modalidades para carregar a lista atualizada da sua conta.
  3. Selecione as modalidades que a loja vai oferecer.
  4. Salve alterações.

Se você deixar a lista vazia, o plugin considera todas as modalidades retornadas pela API. Selecionar explicitamente evita oferecer serviços que você não usa e reduz inconsistências no checkout.


7. Configurar o CEP de origem

A cotação e a compra de etiqueta precisam partir do mesmo CEP de origem. O plugin usa, nesta ordem:

  1. CEP de origem configurado no plugin (se preenchido); senão
  2. O CEP da loja em Ecommerce → Configurações → Geral.

Recomendação: defina o CEP de origem explicitamente para garantir que cotação e etiqueta sempre coincidam. Divergência aqui é a causa mais comum de erro 422 na compra de etiqueta.


8. Adicionar as modalidades no checkout (zonas de entrega)

Esta é a etapa que faz o frete aparecer para o cliente. Conectar o OAuth e selecionar modalidades não exibe frete sozinho — é preciso adicionar cada modalidade como um método dentro de uma zona de entrega.

Conceito: cada modalidade = uma instância do método de envio dentro de uma zona. PAC e SEDEX, por exemplo, são duas instâncias separadas.

  1. Acesse Ecommerce → Configurações → Entregas → Áreas de entrega.
  2. Edite a zona desejada (ex.: Brasil) → Adicionar método de entrega.
  3. Escolha Melhor EnvioAdicionar.
  4. Clique em Editar na instância recém-criada e configure:
    • Título — o texto que o cliente vê no checkout (ex.: “PAC — Correios”).
    • Modalidade — selecione o serviço Melhor Envio desta instância.
    • Custo Adicional — valor somado ao preço retornado pela API (opcional).
    • Dias Adicionais — dias somados ao prazo da API (opcional).
    • Remover se tiver classe de entrega / Exibir apenas com classe de entrega — regras opcionais por classe de produto.
  5. Salve.
  6. Repita os passos 2–5 para cada modalidade que a loja vai oferecer.

Teste o checkout com um CEP de destino válido (8 dígitos) e um produto físico com peso e dimensões preenchidos.


9. Configurar a automação de status dos pedidos

O plugin pode trocar o status do pedido automaticamente em três momentos. Em todos eles, a primeira opção é “Não trocar status” — o padrão seguro, que evita mudanças acidentais após instalação ou atualização.

OpçãoQuando dispara
Status para comprar etiquetas e receber rastreioDefine quais status do ZHF Ecommerce permitem comprar etiqueta e receber rastreio via webhook
Status após receber rastreioQuando chega o código de rastreio
Status após entregaQuando o Melhor Envio sinaliza entrega
Status após a compra da etiquetaQuando a etiqueta é paga (evento order.released)
  1. Ajuste Status para comprar etiquetas e receber rastreio com os status do ZHF Ecommerce permitidos no seu processo (ex.: Processando, Concluído).
  2. Configure as três trocas automáticas conforme sua operação — ou deixe em “Não trocar status” se preferir controlar manualmente.
  3. Salve alterações.

10. Dados fiscais do remetente (CNPJ)

Para emitir etiquetas, o Melhor Envio exige o CNPJ do remetente cadastrado nos dados fiscais do aplicativo.

  • Acesse os dados fiscais do app no painel do Melhor Envio e preencha o CNPJ.
  • Erro comum: se o CNPJ do destinatário for igual ao CNPJ do remetente cadastrado, a API rejeita (422). Para testes, use um destinatário pessoa física (CPF) ou um CNPJ diferente.
  • Algumas transportadoras exigem CNAE — você pode preencher um CNAE global no plugin ou informá-lo no momento da compra da etiqueta.

11. Emitir etiqueta de um pedido (box do pedido)

O box Melhor Envio dentro do pedido só aparece com HPOS ativo (ver pré-requisitos).

  1. Abra o pedido em Ecommerce → Pedidos e localize o box lateral Melhor Envio.
  2. Se você usa NFe, informe a chave de 44 dígitos.
  3. Ajuste os volumes, se necessário (ao reduzir a quantidade de volumes, edite as dimensões dos volumes finais — caso contrário o backend retorna erro).
  4. Marque Assegurar pedido, se aplicável.
  5. Clique em Cotar pedido e selecione um serviço.
  6. Preencha CNAE, se a transportadora exigir.
  7. Clique em Comprar etiqueta — o frete vai para o carrinho do Melhor Envio.
  8. Pague no carrinho do Melhor Envio (link “Ver carrinho”).
  9. Após o pagamento, o webhook marca a etiqueta como paga e aplica o status configurado.

12. Teste completo recomendado

  1. Crie um pedido de teste no ZHF Ecommerce com endereço, CPF/CNPJ e produto físico.
  2. Abra o pedido e use o box do plugin para cotar e comprar a etiqueta.
  3. Confirme que o frete chegou ao carrinho do Melhor Envio.
  4. Confirme o recebimento dos webhooks (rastreio, entrega, etiqueta paga).
  5. Valide as notas do pedido e, se configurada, a troca automática de status.

13. Solução de problemas

Conexão / OAuth

  • “Não conectado” após autorizar: confira Client ID/Secret salvos e a URL de redirecionamento idêntica à do plugin. Verifique se o site responde por HTTPS. Se persistir, recrie o app copiando os campos novamente.
  • Frete parou de aparecer / token expirado: reconecte em Melhor Envio → Conectar. Confirme que a renovação diária de token está ativa.

Frete não aparece no checkout

CausaSolução
Plugin não conectadoRefazer OAuth (etapa 5)
Modalidade não selecionada na instânciaEditar o método na zona e escolher a modalidade (etapa 8)
Modalidade não adicionada à zonaAdicionar o método Melhor Envio na zona de entrega (etapa 8)
CEP de origem vazioConfigurar CEP da loja ou do plugin (etapa 7)
CEP de destino inválidoDeve ter 8 dígitos
Produto virtual / sem envioComportamento normal — não gera frete
Modalidade fora das “Modalidades Disponíveis”Incluir o serviço na seleção global (etapa 6)
Regra de classe de entrega ocultou o métodoRevisar as regras de remover/exibir por classe

Preço ou prazo errado

  • Confira Custo Adicional e Dias Adicionais na instância.
  • Cache antigo: reduza a duração do cache de cotação nas configurações.

Compra de etiqueta — erros 422 comuns

Mensagem / causaAção
CEP de origem divergenteGarantir o mesmo CEP de origem na cotação e na compra (etapa 7)
CNPJ remetente = destinatárioTestar com destinatário PF ou outro CNPJ (etapa 10)
CPF/CNPJ do destinatário ausenteGarantir que o checkout grava CPF/CNPJ do cliente
CNAE exigido pela transportadoraPreencher CNAE global ou no pedido
Chave NFe inválida (modo NFe)Informar chave de 44 dígitos

Webhook não chega

  • Confirme a URL do webhook cadastrada no app.
  • Site precisa ser público em HTTPS.
  • Client Secret no plugin deve ser idêntico ao do app (validação de assinatura x-me-signature).
  • Ative os logs de webhook e confira em Ecommerce → Status → Logs.
  • O pedido precisa ter o código de envio (_zhf_me_shipment_code) correspondente ao protocolo do webhook.

Status não muda

  • Causa mais comum: a opção está em “Não trocar status”. Defina o status desejado (etapa 9).

Box do pedido não aparece

  • HPOS desabilitado. Ative em Ecommerce → Configurações → Avançado → Recursos (ver pré-requisitos).

Onde olhar os logs

Fonte (Ecommerce → Status → Logs)Conteúdo
zhf-melhor-envioCotações e debug geral
zhf-melhor-envio-requestsCada chamada à API (diagnóstico de rate limit)
Logs de webhookRastreio/status que não atualizam

14. Checklist final

  • [ ] Aplicativo criado no Melhor Envio com os dados corretos
  • [ ] Client ID e Client Secret salvos no plugin
  • [ ] Ambiente (sandbox/produção) selecionado corretamente
  • [ ] Conexão OAuth concluída — status Conectado
  • [ ] Modalidades disponíveis selecionadas e salvas
  • [ ] CEP de origem configurado
  • [ ] Modalidades adicionadas às zonas de entrega (frete aparece no checkout)
  • [ ] CNPJ do remetente preenchido nos dados fiscais do Melhor Envio
  • [ ] Webhook cadastrado e respondendo
  • [ ] Trocas de status ajustadas conforme a operação
  • [ ] Teste de ponta a ponta realizado (cotação → etiqueta → webhook)
Rolar para cima