Erro cálculo de frete Correios – módulo pedroteixeira-correios

Neste dia 30/11/2012 o webservice dos Correios simplesmente parou de funcionar e deixou várias lojas virtuais Magento sem poder vender.

Após uma tarde inteira de pesquisa e estudo do código do módulo e também dos requisitos para comunicação com o webservice dos Correios, consegui fazer algumas pequenas alterações no módulo que permitiram executar ao menos o cálculo do preço do frete, possibilitando assim que a sua loja volte a funcionar.

Para fazer essa correção você deve realizar os seguintes passos:

  1. Abra o arquivo /app/code/community/PedroTeixeira/etc/config.xml e substitua o conteúdo da linha 132 (v4.1) ou 142 (v4.2) por:
    http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPreco
  2. No arquivo /app/code/community/PedroTeixeira/Model/Carrier/CorreiosMethod.php, no método _getCorreiosReturn, adicione o seguinte código, aproximadamente na linha 396 (v4.1) ou 302 (v4.2): $client->setParameterGet(‘nVlDiametro’,0);
  3. Ainda nesse arquivo aproximadamente na linha 432 (v4.1) ou 338 (v4.2) adicione o seguinte trecho de código:
    } else{

                    $client->setParameterGet('nCdEmpresa',"");
                    $client->setParameterGet('sDsSenha',"");
                }
    Esse código é usado para quem não possui contrato com os Correios
  4. nesse mesmo arquivo nas linhas 450 e 454 (v4.1) ou 358 e 362 (v4.2) substitua a chamada de variável de objeto “$xml->cServico” por “$xml->Servicos->cServico”

Pronto, agora seu módulo irá calcular o valor do frete. Lembrando que essas alterações são para a versão 4.1.0 do módulo pedroteixeira-correios. Dei uma olhada bem rápida na versão 4.2.0 e aparentemente os mesmos procedimentos irão funcionar, mas não tenho certeza.

Testado nas versões 4.1 e 4.2 tendo êxito nas duas.

 

Dica dada pelo amigo Fúlvio: 

Ao copiar os trechos de código acima, certifique-se de que as aspas ou apóstrofos não foram substituídos por acentos. Em caso positivo, substitua novamente por aspas ou apóstrofos.

 

Dica dada pelo amigo Marco: 

Após fazer as atualizações não esqueça de atualizar o cache da sua loja para que tudo entre em vigor.

 

Dica dada pela amiga Dani: 

Infelizmente é necessário desativar o cálculo do e-Sedex pois o mesmo está sendo apresentado mesmo para cidades que não atendem esse serviço.

 

Dica dada pelo amigo Eric aos preguiçosos de plantão rs rs:

Arquivos alterados postados aqui: https://docs.google.com/open?id=0B6F3anE3uyr3UXBaSDVMSGN1VG8

 

Espero que ajude!

 

Para quem seguiu esses passos leia também: Webservice Correios volta a funcionar

78 Responses to “Erro cálculo de frete Correios – módulo pedroteixeira-correios”

  1. Gustavo

    Fiz as alterações e não deu certo. Estou com a última versão do módulo.

    • anderson

      olá Gustavo, por favor leia novamente o artigo que foram feitas as devidas correções/adaptações para a versão 4.2.

      abraço!

  2. Bruno

    Obrigado pelo patch.
    Eu utilizo a versão 4.2, após aplicar as alterações no arquivo CorreiosMethod.php o módulo ficou indisponível.

    Abs

    • anderson

      grande Bruno, por favor leia novamente o artigo que fiz as devidas correções que faltavam para a versão 4.2.
      Espero que funcione, mas tendo dúvidas é só perguntar aqui.

      Forte abraço!

  3. rebeca

    olá!
    onde devo colocar o código “$client->setParameterGet(‘nVlDiametro’,0);”?
    o restante consegui fazer…
    obrigada pela dica!

    • anderson

      Olá rebeca, eu me esqueci de verificar o patch para clientes que não possuem contrato com os Correios. Por favor, leia novamente o artigo que fiz as devidas alterações inclusive testei para a versão 4.2 e funcionou certinho.

      forte abraço!

  4. Fulvio Parmejjani

    Anderson, muito obrigado pela ajuda. A solução que você deu ficou bem simples de ser feita e funciona 100% !!!

    Só uma observação ao pessoal que está tendo problema com sua solução, no passo 2, quando se copia a linha aqui e cola no código as aspas simples (no nVlDiametro) são substituídas por acentos, o que faz a solução dar uma mensagem de “Houve um erro inesperado…”. Para resolver isso, precisamos usar aspas simples, dessa forma: $client->setParameterGet(‘nVlDiametro’,0);

    Daí fica ok.

    Abs!
    Fulvio Parmejjani

  5. Daniel

    Aqui também não rolou…. não fez o calculo… fiz tudo direitinho… estranho.. valeu.. Quem conseguir posta a solução ae fazendo favor.
    Valeus

  6. Daniel

    Poderiam postas os 2 arquivos editados né? tanto pra 1 versão quanto pra outra. Ajudaria muito o pessoal. Obrigado.

  7. André Xori

    Amigão, tentei e nao consegui. Fiz igualzinho e limpei o cache. Alguma dica de como eu poderia testar para identificar o erro?

    Recebo o erro de Mensagem de URL Fora do Ar: “Esse método de envio está fora do ar. Por favor entre em contato conosco.”

    Abraços e parabéns! Geral estava desesperado com esse erro! hehehe

  8. André Xori

    Funcionou cara!!! Ignora meu comentário! hauhauha
    Desculpa a falha. Salvou a pátria vc!

    Se curtir camisa retrô e, querendo um mega desconto na minha loja, só falar comigo (tô falando sério). Singela retribuição hehehe

    Abração e sucesso!

    • anderson

      valeu grande André!! vou cobrar o desconto depois hein hehehe brincadeira, seu comentário aqui já é uma grande retribuição.

      Abraços!!

  9. Dani

    Oi! Fiz as alterações mas agora aparece uma mensagem assim:
    “Esse método de envio está fora do ar. Por favor entre em contato conosco.”
    Tenho a versão 4.2 e tenho contrato com os Correios: não coloquei o código que vc fala que é para quem não tem…
    O que acha que posso fazer? Ou mato os Correios de vez? 🙂
    Muito obrigada!

    • Dani

      Então, vi que o meu problema está no passo n. 4:

      nesse mesmo arquivo nas linhas 450 e 454 (v4.1) ou 358 e 362 (v4.2) substitua a chamada de variável de objeto “$xml->cServico” por “$xml->Servicos->cServico”

      Porque vi pelo módulo que o erro que está aparecendo se refere à URL, ou seja, o que se trata essas duas linhas 🙁
      Alguém me ajuda, por favor? :'(

      • anderson

        Olá Dani,

        vou tentar resumir aqui: o webservice dos Correios retorna um xml com o resultado dos cálculos de preço, no entanto me parece que eles alteraram esse XML adicionando mais um nó XML (Servicos) e por isso tive que fazer a mudança proposta.

        Uma dica para você e para todos que ainda estão tendo problemas com o módulo é utilizar os logs do Magento para poder conferir qual é o erro que está ocorrendo e postar aqui para discutirmos. Para quem não sabe como habilitar os logs, no painel administrativo vá em Sistema->Configuração->Desenvolvedor->Configurações de Log e ative esse recurso. Se você notar no método _getCorreiosReturn há vários “throw new Exception(…”, esse comando grava uma mensagem de erro no arquivo /var/log/system.log e através dessa mensagem podemos saber o que está acontecendo.

        Lembrando que para que o log seja gravado na pasta é necessário atribuir permissão 777 para a pasta /var/log/ ok?!

        Boa sorte!

        • Dani

          Oi Anderson! Obrigada pela atenção. Meus logs já estavam habilitados 🙂
          Fiz as modificações novamente e tentei calcular o frete. Atualizei o log e apareceu assim:

          2012-12-01T19:46:05+00:00 DEBUG (7): pedroteixeira_correios [364]: URL Error – No tag cServico in Correios XML [357]

          Uma dúvida, se essas mudanças fazem com que não precise conectar ao webservice dos correios, como o preço é calculado? Como eu disse, eu tenho contrato com os Correios, vai funcionar a opção de e-Sedex? 🙂
          Obrigada!
          Dani

          • Diogo Azzi Ferreira

            Oi Dani, tudo bom? Estava com o mesmo problema na versão 4.2 magento 1.7.0

            Tem mais uma alteração pra fazer, antes da linha return $xml->Servicos->cServico;
            Existe o trecho:
            if(count($xml->cServico) Servicos->cServico) <= 0){
            throw new Exception("No tag cServico in Correios XML [" . __LINE__ . "]");
            }

            Fazendo isso funcionou 🙂
            Abs

  10. Anderson

    Não funciona na versão 1.7.2 do Magento, já fiz todos os procedimentos, não da certo, aparece outra mensagem:

    Esse método de envio está fora do ar. Por favor entre em contato conosco.

  11. Anderson

    Não seria melhor postar os aquivos com as devidas mudanças, sei que é de mais, mas evitaria muitas pessoas se queixando do não funcionamento.

  12. Fernando

    Fiz as alterações e os valores agora estão funcionando, porém o Prazo de entrega retorna o mesmo para PAC e SEDEX… ambos estão mostrando 5 dias para mim…

    Alguma idéia??? Obrigado pela contribuição!!!

    • anderson

      Opa Fernando, que bom que funcionou.

      Vamos lá, conforme expliquei no artigo o cálculo de prazo é o que está causando essa queda no webservice dos Correios e por isso recomendo que você desabilite a exibição do prazo pelo menos por enquanto.
      Para fazer isso vá em Sistema->Configuração->Formas de Entrega->Correios – Pedro Teixeira e altere a config “Exibir Prazo de Entrega” para “Não”

      Salve, atualize o cache e pronto, problema resolvido.

      Abraço e obrigado pelo comentário!

      • Fernando

        Obrigado Anderson,

        Desculpe-me… pela ansiedade em resolver logo fui direto fazendo as alterações sem realmente ler tudo!!! Desculpe totalmente meu erro…. hehehhee

        Eu já tinha desabilitado e liberado sem… mas como não li o artigo, nem sabia o pq do problema… então fui direto achando que tinha passado despercebido o erro… 😀

        Muito obrigado mais uma vez e sucesso!!!

    • Alexandre

      Aqui o problema persiste. Fiz e refiz várias vezes as alterações, troca de aspas, limpeza de cache.

      Versão do Magento: 1.5.1.0
      Versão do Módulo: 4.2.0

      Obrigado,

    • Avelino

      Estou com 2 erros:
      2012-12-02T13:29:24+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/calim409/public_html/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28

      2012-12-02T13:29:24+00:00 DEBUG (7): pedroteixeira_correios [130]: Dimension error

    • José Carlos Jr.

      Primeiramente quero agradecer ao Anderson por tamanha ajuda.
      Fiz todos os procedimentos, que na verdade são poucos, simples e eficientes, [claro, depois de ‘resolvido’, fica fácil, rsrs], e funcionou da mesma forma que informado.
      -Retirei o e-Sedex, a opção de informar o prazo.

      Agora vou fazer uns testes de comparação, para verificar se os preços realmente ‘batem’, já que temos contrato com os Correios.

      Gostaria apenas de deixar uma pequena dica, de informar aos ‘preguiçosos’ de plantão, como eu que fui pegar os arquivos prontos no Docs, que sãos os arquivos para a Versão 4.2, foi o que percebi, verificando as linhas onde era necessário as alterações. E aqui, uso a 4.1. Com 1.4 do Magento.

      Vlw. Vamos ver daqui pra frente, o que mais os Correios vai aprontar…

    • Barnard Celso

      Olá Pessoal….
      Eu tenho o módulo do Pedro Teixeira instalado em duas lojas DEMO. Numa loja com o agento 1.7.0.0 funciona certinho. Já em outra com a versão 1.7.0.2 não dá certo.

      Alguem saberia informar qual seria o problema ?
      LINK DA LOJA? http://www.maxportal.com.br/store

      Desde já agradeço a quem puder responder.

      • anderson

        Olá Barnard, tentei acessar a sua loja mas deu erro 500. Qualquer coisa avise aqui para eu dar uma olhada novamente blz?!

        Abraço

  13. Gustavo

    Fiz as mudanças para a 4.2 e agora ta funcionando. O mais engraçado é que o prazo aparece lá!

    • anderson

      Gustavo, o prazo que está mostrando deve estar errado, acabei de testar novamente o webservice e ainda não esta funcionando o cálculo de prazo. Desabilite a exibição do prazo para evitar transtornos.

      Abraço!

  14. Estevão

    Obrigado, vocês salvaram o meu Domingo e a semana toda também srsrsrsrs, valeu que Deus abençoe vocês todos.

  15. Fabiano Monteiro

    Desculpa Anderson, eu postei aqui mil vezes errado o lance.
    Mando novamente o correto:

    Pessoal. Vou passar uma dica que eu fiz no meu comércio sobre os prazos.
    Eu abri o arquivo config.xml em (/public_html/app/code/community/PedroTeixeira/Correios/etc) e no final do arquivo comentei o seguinte:
    Fiz um backup do arquivo e depois alterei o seguinte:

    Sedex,3
    – alterei por: Sedex – 2 à 3 dias úteis,3
    Sedex ,3
    – alterei por: Sedex – 2 à 3 dias úteis,3

    PAC,3
    – alterei por: PAC – 5 à 10 dias úteis,3
    PAC,3
    – alterei por: PAC – 5 à 10 dias úteis,3

    Só para dar uma base de prazo, isso por enquanto. Depois, claro, quando td estiver ok com os correios é só retornar ao backup dos arquivos originais.
    Abraço!

    • [email protected]

      Fabiano, ótima dica!!
      Como eu poderia fazer para ao invés de ficar fixo o prazo, ser de acordo com a região consultada pelo cep?
      Atualmente usamos o % para pegar o prazo exato, teria que ser como para ficar %+2 dias?

      Não sei se foi claro, mas seria algo assim
      Sedex,3
      – alterei por: Sedex – % à %+2 dias úteis,3

      abs

  16. Patrick

    Aqui não funciona nem com reza braba..haha..ja desisntalei o modulo, instalei, limpei cache, apaguei session e cache..botei o codigo manualmente, copiei os arquivos que foram disponibilizados e nada..não calcula nada..quando digita o cep nada acontece só a msg “desculpe não ha citações disponiveis no momento para essa ordem”.

    alguem teve solução?

    • anderson

      Patrick, verifique o arquivo /var/log/system.log e poste aqui para discutirmos qual o erro que está dando.
      Lembre-se de ativar o log de erros no painel, o procedimento está descrito nos comentários acima.

      Abraço!

      • Patrick

        Segue o log Anderson, se quiser ver como acontece o esquema http://www.desapegabrecho.com.br tive que deixar como loja de demonstração pelo problema do akatus e do correios

        2012-12-02T22:51:21+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/desapegabrecho/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28
        2012-12-02T22:51:21+00:00 DEBUG (7): pedroteixeira_correios [98]: Invalid Zip Code
        2012-12-02T22:51:21+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/desapegabrecho/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28
        2012-12-02T22:51:21+00:00 DEBUG (7): pedroteixeira_correios [98]: Invalid Zip Code
        2012-12-02T22:51:36+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/desapegabrecho/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28
        2012-12-02T22:51:36+00:00 DEBUG (7): pedroteixeira_correios [122]: Weight zero
        2012-12-02T22:51:43+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/desapegabrecho/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28
        2012-12-02T22:51:43+00:00 DEBUG (7): pedroteixeira_correios [122]: Weight zero
        2012-12-02T22:51:47+00:00 ERR (3): Notice: Undefined variable: celular in /home/desapegabrecho/www/app/design/frontend/base/default/template/onepagecheckout/onepage/shipping.phtml on line 192
        2012-12-02T22:51:47+00:00 ERR (3): Notice: Undefined variable: celular in /home/desapegabrecho/www/app/design/frontend/base/default/template/onepagecheckout/onepage/shipping.phtml on line 194
        2012-12-02T22:51:47+00:00 ERR (3): Notice: Undefined variable: celular in /home/desapegabrecho/www/app/design/frontend/base/default/template/onepagecheckout/onepage/shipping.phtml on line 198
        2012-12-02T22:51:48+00:00 ERR (3): Notice: Undefined index: meios_de_pagamento in /home/desapegabrecho/www/app/design/frontend/default/default/template/akatus/form/pay.phtml on line 50
        2012-12-02T22:51:48+00:00 ERR (3): Warning: Invalid argument supplied for foreach() in /home/desapegabrecho/www/app/design/frontend/default/default/template/akatus/form/pay.phtml on line 55
        2012-12-02T22:51:49+00:00 ERR (3): Strict Notice: Declaration of PedroTeixeira_Correios_Model_Carrier_CorreiosMethod::isZipCodeRequired() should be compatible with that of Mage_Shipping_Model_Carrier_Abstract::isZipCodeRequired() in /home/desapegabrecho/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 28
        2012-12-02T22:51:49+00:00 DEBUG (7): pedroteixeira_correios [98]: Invalid Zip Code
        2012-12-02T22:51:50+00:00 ERR (3): Notice: Undefined index: meios_de_pagamento in /home/desapegabrecho/www/app/design/frontend/default/default/template/akatus/form/pay.phtml on line 50
        2012-12-02T22:51:50+00:00 ERR (3): Warning: Invalid argument supplied for foreach() in /home/desapegabrecho/www/app/design/frontend/default/default/template/akatus/form/pay.phtml on line 55

        vlw a ajuda

  17. Valor de Fretes errado

    Olá
    Pessoal se alguém souber do problema agradeço a dica.
    Estou achando estranho os valores ou cálculos de frete apresentados em minha loja. Pois acho que o frete está ficando muito barato diferente o que apresentado pelos correios.

    • anderson

      Olá, você chegou a conferir com a ferramenta de cálculos do site dos Correios?

      Eu conferi alguns produtos de vários sites e os valores bateram, só pra quem tem contrato é que não dá pra ter muita certeza, mas o restante está normal.

  18. Alexandre

    Não tive êxito com as alterações, o módulo continua não funcionando, tentei tanto a alteração manual, como usar os arquivos fornecidos, ambos não funcionaram

    A unica coisa que aconteceu é que a mensagem de erro mudou, agora é exibido a mensagem referente a “Mensagem de URL Fora do Ar”

    Estou utilizando a versão 1.6 do Magento, e a versão 4.2 do módulo, isso acontece com mais alguém?

      • Alexandre

        Oi Anderson, sim já havia tentando limpar a cache do Magento, tentei mais uma vez só para ter certeza, e nada

        • Breno

          Olá Alexandre, você está com o Magento compilado? Se tiver tente rodar o processo de compilação novamente.

  19. José Carlos Jr.

    Acabei de fazer uns testes com os preços, comparando com os valores informados na página de Preços e Prazos: http://www.correios.com.br/encomendas/prazo/prazo.cfm

    Está funcionando com perfeição.

    E para os prazos, optei pela dica do nosso amigo Fabiano Monteiro. E deixei assim lá no config.xml:
    Assim dá uma base para os clientes, é o que dá pra fazer no momento neh, rsrs.

    Sedex – [1 a 3 dias úteis],3
    Sedex – [1 a 3 dias úteis],3
    E-Sedex,3
    PAC – [3 a 7 dias úteis],3
    PAC – [3 a 7 dias úteis],3
    PAC – [3 a 7 dias úteis],3
    Sedex 10 – [1 a 2 dias úteis],1

  20. LuPeE

    Fiz os procedimentos na versão 1.7.2 do magento utilizando o modulo 4.2.0 e o mesmo me retorna a seguinte mensagem “Esse método de envio está fora do ar. Por favor entre em contato conosco.” alguem pode me ajudar?

    Grato

  21. Fabio

    Mas com relação aos clientes com contrato? Está calculando normalmente?O e-sedex está disponivel só para as áreas certas? Obrigado

    • José Carlos Jr.

      Acabei de fazer uma simulação de compra com um CEP em que o eSedex não é atendido, mesmo assim, foi mostrado a opção =#. Ou seja, não está restringindo de acordo com a área abrangida, tá dando a opção para qualquer CEP. Pelo menos aqui está assim.

      Só um adendo… Outro problema com relação a isso, é para quem utiliza o SIGEP Web dos Correios, o endereçador. Desde sexta-feira [30/11/12], os CEPs em que o eSedex atende, é dado como não atentido no SIGEP. Mostrando que mexeu até mesmo com esse programa.

  22. Julie S. Kirk

    Olá pessoal! Estou tendo o mesmo problema que um colega nosso acima… Consegui instalar o módulo, mas na hora de configurar, dá o seguinte erro: O Prestashop não pôde conectar ao webservice dos Correios : O Webservice dos Correios parece estar fora do ar, por favor aguarde alguns minutos e tente novamente Alguém conseguiu resolver isso?

  23. Kevin X. Thomas

    Galera estou com um problemão!! No envio Para Bahia e etc meu módulo dos correios não da o mesmo valor do site, eu estou tendo problemas na hora de enviar o produto, pagando uma diferença no valor!! Só funciona legal na região sudeste!!Ajuda?!

  24. Brandon O. Scott

    Olá pessoal! Estou tendo o mesmo problema que um colega nosso acima… Consegui instalar o módulo, mas na hora de configurar, dá o seguinte erro: O Prestashop não pôde conectar ao webservice dos Correios : O Webservice dos Correios parece estar fora do ar, por favor aguarde alguns minutos e tente novamente Alguém conseguiu resolver isso?

  25. Luis Sanchez

    Olá pessoal! Estou tendo o mesmo problema que um colega nosso acima… Consegui instalar o módulo, mas na hora de configurar, dá o seguinte erro: O Prestashop não pôde conectar ao webservice dos Correios : O Webservice dos Correios parece estar fora do ar, por favor aguarde alguns minutos e tente novamente Alguém conseguiu resolver isso?

  26. Marion F. Holmes

    Olá pessoal! Estou tendo o mesmo problema que um colega nosso acima… Consegui instalar o módulo, mas na hora de configurar, dá o seguinte erro: O Prestashop não pôde conectar ao webservice dos Correios : O Webservice dos Correios parece estar fora do ar, por favor aguarde alguns minutos e tente novamente Alguém conseguiu resolver isso?

  27. Morris Dixon

    Galera estou com um problemão!! No envio Para Bahia e etc meu módulo dos correios não da o mesmo valor do site, eu estou tendo problemas na hora de enviar o produto, pagando uma diferença no valor!! Só funciona legal na região sudeste!!Ajuda?!

  28. Luella H. Mercer

    Galera estou com um problemão!! No envio Para Bahia e etc meu módulo dos correios não da o mesmo valor do site, eu estou tendo problemas na hora de enviar o produto, pagando uma diferença no valor!! Só funciona legal na região sudeste!!Ajuda?!