Frete & Logística

Frete errado no Magento 2? Confira o CEP de origem e a unidade de peso

Antes de trocar o módulo de frete, confira dois campos. O Magento vem configurado para uma loja americana, e nenhuma cotação de Correios ou transportadora sobrevive a isso.

Por Roger Takemiya · Publicado em · 4 min de leitura

Cliente me chama porque o frete para São Paulo está saindo em 40 reais e para Manaus em 41. Ou porque o Correios devolve erro e ninguém entende. Em nove de cada dez vezes a loja nunca teve o CEP de origem trocado.

O Magento vem com o padrão de uma loja americana. Isso não é bug, é o valor que está no config.xml do core desde sempre — e ninguém avisa você na instalação.

O que vem escrito no core

Abrindo o etc/config.xml do Magento_Shipping e do Magento_Directory, é isso aqui:

CaminhoValor de fábricaO que significa
shipping/origin/country_idUSdespacha dos Estados Unidos
shipping/origin/postcode90034um CEP de Los Angeles
shipping/origin/region_id12Califórnia
general/locale/weight_unitlbspeso em libras

Junte os dois e você tem uma loja que pede cotação de um endereço na Califórnia para uma encomenda de 2 libras. Módulo de Correios, Melhor Envio, Jadlog, Frenet: todos leem o CEP de origem daqui. Alguns têm um campo próprio na configuração do módulo, então vale conferir os dois lugares.

No admin, os campos ficam em Stores > Configuration > Sales > Shipping Settings > Origin e em Stores > Configuration > General > General > Locale Options > Weight Unit.

Arrumando pela linha de comando

Pelo admin funciona igual, mas na CLI você deixa registrado o que fez:

php bin/magento config:set shipping/origin/country_id BR
php bin/magento config:set shipping/origin/postcode 01310-100
php bin/magento config:set shipping/origin/city "São Paulo"
php bin/magento config:set general/locale/weight_unit kgs
php bin/magento cache:flush

O weight_unit só aceita dois valores: lbs ou kgs. Não invente kg no singular, o campo vira lixo silencioso.

Falta o region_id, e ele é o único chato: o número é auto increment, muda conforme a ordem em que os estados entraram na tabela. Não copie de tutorial. Pergunte para o seu banco:

SELECT region_id, code, default_name
  FROM directory_country_region
 WHERE country_id = 'BR';

Com o número em mãos, php bin/magento config:set shipping/origin/region_id 508 — trocando 508 pelo que a consulta devolveu. Depois confira tudo com php bin/magento config:show shipping/origin.

Cuidado: o peso dos produtos não se converte sozinho

Essa é a parte que morde. Trocar lbs por kgs muda o rótulo, não o número. Um produto cadastrado com peso 2 continua valendo 2 — antes eram 2 libras, agora são 2 quilos.

Se a loja é nova e ninguém cadastrou nada, beleza. Se já tem catálogo, vale olhar a faixa de pesos antes de virar a chave:

SELECT MIN(d.value) AS menor, MAX(d.value) AS maior, AVG(d.value) AS media
  FROM catalog_product_entity_decimal d
  JOIN eav_attribute a ON a.attribute_id = d.attribute_id
 WHERE a.attribute_code = 'weight';

A leitura é direta. Camiseta cadastrada com 0.44 é alguém que converteu 200 g para libra na mão — aí a troca de unidade vai inflar o frete e você precisa recadastrar. Camiseta com 0.2 é gente que sempre pensou em quilo, e a troca só conserta o rótulo.

Vale a mesma paciência com produto sem peso nenhum. Peso zero ou vazio faz o Correios devolver cotação vazia, e o cliente vê a mensagem de que não existe frete disponível para o endereço dele.

Perguntas rápidas

Mudei o CEP de origem e o frete continua igual. Por quê?

Quase sempre é cache. Rode cache:flush e teste numa aba anônima. Se persistir, confira se o módulo de frete que você usa tem um campo de CEP de origem próprio na configuração dele.

Preciso preencher a rua e o número na origem?

Para cotação de frete, não: os Correios e as transportadoras trabalham com CEP. Os campos de rua existem porque entram na etiqueta e no documento de envio, então vale preencher mesmo assim.

Tenho dois depósitos. Dá para ter dois CEPs de origem?

Dá, se cada depósito atender uma store view ou um website diferente, porque o campo é configurável por escopo. Para dois depósitos servindo a mesma loja, o caminho é o MSI com sources e stocks separados.

Pra conferir na fonte

  1. Shipping settings — Adobe Experience League
  2. Magento_Shipping etc/config.xml — GitHub
  3. Magento_Directory etc/config.xml — GitHub

frete correios configuração

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui