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).
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.
Deixe um comentário