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.

//encontre essa linha e embaixo dela
$client->setParameterGet('nVlLargura',$this->getConfigData('largura_sent'));
//adicione a seguinte linha
$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:

<!--<url_ws_correios>http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx</url_ws_correios>-->
<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.

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

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:

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

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.


Comentários

20 respostas para “Workaround para o modulo do PedroTeixeira/Correios”

  1. Olá Thiago!!

    Obrigada pelo post!! Gostaria de saber onde encontro o XML de retorno, qual o caminho do arquivo para fazer a ultima alteracao!!

    Obrigada!

    1. Oi Luise,

      O arquivo do ultimo passo é o mesmo do primeiro: CorreiosMethod.php

      Abcs,

      1. Ok Thiago, obrigada!

        O segundo passo é para adicionar o segundo link ou substirtuir?

        Abraço

        1. Luise,
          eu faria como no exemplo: comenta a linha existente e adiciona a segunda.

  2. Avatar de Samuel Piovezan
    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.

  3. Avatar de Samuel Piovezan
    Samuel Piovezan

    Já resolvi! Era erro de sintaxe.

    1. Legal!
      Funcionou na boa então ?

      Abcs,

  4. Avatar de Patrick
    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. 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

  5. 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.

    1. Leonardo,

      Obrigado pela observação.
      A solução funcionou com você?

      Abraço

  6. Essa solução funciona para todas as versões do Magento?

    1. Luís,

      Essa solução funciona para a versão 4.2 do modulo de correios do Pedro Teixeira, independentemente da versão do Magento.

      Abraço,

  7. Thiago, o meu modulo nao está somando 1% do valor do produto com a opcao valor declarado, sabes me dizer algo

    att,

    1. Fernando,

      Nunca reparei nisso, vou dar uma olhada no código do Pedro e fazer alguns testes e posto aqui.

      Abraço,

      1. Avatar de Fernando
        Fernando

        ok Thiago.

        Abraços,

  8. 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. 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

  9. Avatar de Gustavo Nicola
    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?

  10. Avatar de Évila
    É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 um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.