Workaround para o modulo do PedroTeixeira/Correios

Um amigo me relatou no dia de ontem (1/12/2012) que o retorno das informações do frete dos correios estavam retornando a mesma mensagem: Houve um erro inesperado, por favor entre em contato. Erro ao calcular o prazo, teste novamente mais tarde.(Cod. 99).

 

Mensagem de retorno dos Correios.

O e-Commerce dele, assim como grande parte dos e-Commerces brasileiros, utiliza o modulo do PedroTeixeira para calculo do frete, que usa o webservice dos Correios. Resolvi dar uma olhada na página do modulo e encontrei o comentário do Anderson Vincoletto, sobre a obrigatoriedade de alguns novos campos. A partir dai não foi dificil encontrar a solução, comparando os campos definidos no modulo com os campos da documentação. O campo nVlDiametro, passou então a ser obrigatório.

Então no arquivo ./community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php no metodo _getCorreiosReturn abaixo da linha.

  1. //encontre essa linha e embaixo dela
  2. $client->setParameterGet('nVlLargura',$this->getConfigData('largura_sent'));
  3. //adicione a seguinte linha
  4. $client->setParameterGet('nVlDiametro',0);

Depois de alterar essa linha o problema continuou! :)
Pesquisando mais um pouco cheguei ao site da OpenCartBrasil nessa thread. Onde Manoel Vidal sugeria a mudança da URL do Webservice.e sugeria a fixação do prazo de entrega, onde no meu caso não foi necessário.

No arquivo ./community/PedroTeixeira/Correios/etc/config.xml faça o mesmo abaixo:

  1. <!--<url_ws_correios>http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx</url_ws_correios>-->
  2. <url_ws_correios>http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPreco</url_ws_correios>

Fazendo a mudança da URL o erro ficou diferente, mas agora o retorno estava completo! E o problema passou a ser o formato do XML.

  1. if(count($xml->cServico) <= 0){
  2. throw new Exception("No tag cServico in Correios XML [" . __LINE__ . "]");
  3. }
  4.  
  5. return $xml->cServico;

Analisando o XML de retorno vi que tinha um nó chamado Servicos que contém todos os cServicos, dai então alterei o código para o abaixo:

  1. if(count($xml->Servicos->cServico) <= 0){
  2. throw new Exception("No tag cServico in Correios XML [" . __LINE__ . "]");
  3. }
  4.  
  5. return $xml->Servicos->cServico;

Depois de atualizar o cache, tudo voltou a funcionar magicamente.

observações:
-Essa é uma solução temporária até que os Correios normalizem o seu webservice padrão.
-O campo nVlDiametro é um parâmetro para o envio de rolo/prisma que passou a ser obrigatório. Como o código do PedroTexeira não incorpora esse tipo de embalagem (somente pacote/caixa) o valor do dado por mim ao campo foi 0.
-@Leonardo obrigado pelo aviso.

20 ideias sobre “Workaround para o modulo do PedroTeixeira/Correios

  1. Samuel Piovezan

    Thiago, parabéns pelo post! Estou tentando fazer funcionar, porém quando altero o código do cServiços ( a última parte do workaround), todo o ajax de minha loja para de funcionar. Você tem alguma idéia do que pode ser? Achei estranho pois não estão relacionados.

  2. Patrick

    cara aqui não funciona de jeito nenhum..

    $client->setParameterGet(‘nVlLargura’,$this->getConfigData(‘largura_sent’));
    ##adicione
    $client->setParameterGet(‘nVlDiametro’,0);

    tenho que colocar esse ##adicione ou não?

    1. Pereira, Thiago Santos Autor do post

      Fala Patrick,
      Você abriu o arquivo correto?
      O objetivo é você adicionar a linha $client->setParameterGet(‘nVlDiametro’,0); logo abaixo da linha $client->setParameterGet(‘nVlLargura’, $this->getConfigData(‘largura_sent’));

      O ##adicione é apenas um marcador.

      Abraço

  3. Leonardo

    Galera ta errado uma coisa.

    o return do retorno da função é sem o $.

    Nao vai funcionar com aquele CIFRÃO.

    return $xml->Servicos->cServico;
    e não
    $return $xml->Servicos->cServico;

    E quando copiar a primeira parte do arquivo na hora de adicionar o parametro cuidado com as aspas. para nao dar erro de sintaxe.

  4. Tiago Martins

    Olá Amigo, boa tarde!

    o modulo voltou a funcionar porem tem algum erro relacionado ao pac e e-sedex.

    o e-sedex esta dando um prazo maior que o pac 2, dias a mais!

    tem ideia de como resolver isso?

    abs
    tiago Martins

    1. Pereira, Thiago Santos Autor do post

      Boa noite Tiago,

      Por acaso o seu modulo contém as modificações que estão na minha página?
      Se sim, digo que essas modificações eram temporárias uma vez que o webservice dos correios ficaram fora do ar por alguns dias. Recomendo voltar a utilizar o modulo original do Pedro Teixeira.

      Se não, acho isso parcialmente estranho. Se isso for possível. Você pode dar uma olhada nesse site que utilizar o modulo do Pedro Teixeira magicnails.com.br, e o valor do e-sedex é menor que o pac (o que deveria ser normal).

      Qual o cep de origem dos produtos?

      Abraço,
      Thiago Santos

  5. Gustavo Nicola

    Observei que quando tenho mais que 2 produtos no meu carrinho, o módulo calcula o valor do frete no PAC de forma errada. O que pode estar acontecendo?

  6. Évila

    Por mais adicionando as mudanças no código, aparece a mensagem: Esse método de envio está fora do ar. Por favor entre em contato conosco. Com erro de log: 2017-05-11T10:46:57+00:00 ERR (3): Warning: simplexml_load_string() [.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *