Fork me on GitHub
Você esta em:Home » Destaque » Webservice aleternativo para os correio no Magento

Webservice aleternativo para os correio no Magento

Você utiliza o módulo do Pedro Teixeira assim como eu e acha um desperdício trocar ele, só por causa que o webservice dos correios cai? Aprenda a criar uma base de dados alternativo e utilizar no módulo do Pedro Teixeira.

Bem pessoal, há tempos venho reunindo informações para montar um produto em Magento. E umas das coisas que não possuo demanda mas vi que existe um problema sérios é sobre a utilização dos correios como sistema de entrega no Magento.

Existe uma solução fodástica para o uso dos Correios no Magento feito pelo grande Pedro Teixeira disponível gratuitamente no connerct e acho que também no blog do Pedtro Teixeira.

Só existe um problema nesse módulo! Os Correios rsrsrsr bem no final de 2012 vi milhões de administradores de e-commerce Magento atras de soluções pois o webservice dos Correios não caiu não, ele foi mudado rs. Com isso deixou varias pessoas não mão que utilizava o webservice direto dos Correios para cotar o frete em seu e-commerce.

Analisando esse cenário, recentemente busquei varias alternativas para uso dos correios no Magento com uma base offline, pensei em até utiliza a Matrix Rates que por sinal é um ótimo módulo para frete no Magento.

Mas buscando na web e com uns amigos, além de encontrar vários arquivos csv com a base de preços de fretes por Sedex e PAC desatualizadado, também encontrei também uma outra solução para a atualização dessa base no site do grande Frederico Leão uns scripts que baixam a tabela completa pelo webservice dos Correios.

Bem o script é magnífico, ele realmente baixa a base dos correios, só precisou de algumas configurações para meu uso, como:

  • Aumento de tempo de execução;
  • Remover o exit(); que parava a atualização toda vez que encontrava um erro;
  • Exibir no alert a faixa de cep com o erro para ser tratada;

Bem certamente aumentei o tempo de execução por conta de eu ter alterado em meu servidor esse tempo no php.ini anteriormente. Então com isso eu teria certeza que ele iria funcionar e não ser bloqueado. Mas cuidado! Esse bloqueio por tempo de excussão nos protege de um script em loop ficar derrubando o site. Então só mexa se realmente saber oque esta fazendo!

Aumento do tempo de execução

Para as outras 2 opções que descrevi acima eu alterei o arquivo atualizacoes.php da linha 88 até a 95 que se tratava de um else que ao encontrar o erro ele dava um alert junto parava o processo, então troquei para isso:

} else {
echo “<script type=’text/javascript’>
alert(‘”.$servico->MsgErro.” – “.$row->cep_destino_ini.” – “.$row->cep_destino_fim.” – “.$row->cep_dest_ref.”‘);
document.location.href=’./index.php’;
</script>
“;
//exit;
}

2 outroas coisas que fiz foi dar um update no banco na tabela frete

UPDATE frete SET `cep_origem`=’22793080′ WHERE `cep_origem` is not null

Onde irá atualizar todos os meus ceps de origem (na verdade mesmo alterando pela adm do script dele notei que alguns não tinham sido atualizado e que a atualização não estava correndo normalmente) Fiz isso também force a atualização completa.

UPDATE frete SET `lastupdate`=” WHERE `lastupdate` is not null

Nesse daqui eu zerei a coluna que informava que a linha havia sido atualizada em determinada data, para que force a atualização completa também.

Adm da atualização da base de preços

Pronto! O sistema do Frederico Leão estaria funcionando perfeitamente, basta agora somente verificar quais as faixas de ceps com problemas e corrigir as mesmas.

OBS: Utilizando somente um cep de origem + as opções PAC e Sedex se tem uma tabela com +/- 3600 registros. Se tem a possibilidade de adicionar outros métodos de entregas dos Correios como Carta Registrada e E-Sedex além de add outros ceps de origem, porém isso aumentaria um pouco a base de dados.

Bem isso se você não adicionar todas as faixas de cep disponíveis nem todos os métodos de entrega lógico rs, Senão tenha certeza que se tudo der certo vai dar merda!

Mantendo o módulo dos Correios do Pedro e trocando o webservice de consulta.

Bem vi que com o script do Frederico Leão bastaria trocar a linha do arquivos config.xml que indicava o webservice a ser consultado. Mas irei explicar de uma outra forma que fiz, onde consegui adicionar um campo a mais na adm do módulo do Pedro Teixeira que ativaria ou não a utilização do meu webservice local. Assim eu deixaria a consulta rodar normalmente pelo webservice dos correios, e quando fosse detectado um erro no mesmo eu alternaria para o meu webservice local.

Existe ainda a possibilidade de incorporar esses script do Frederico Leão ao Magento, criando um módulo para isso. E existem também a possibilidade futura de fazer com que essa mudança de webservice seja realizada de forma automática, então assim quando o sistema detectasse a falha no webservice dos correios ele trocaria automaticamente para o webservice local. Mas vou deixar isso para uma segunda etapa rs

Então vou explicar de forma bem rápida de como add a opção de troca de webservice dentro da adm do módulo do Pedro Teixeira!

A administração do módulo do Pedro Teixeira terá um novo campo de seleção, que eu chamei de Configurar o webservice Offline do Deivison, segue img de como ficará:

Módulo Pedro Teixeira com webservice alternativo

Editando o módulo do Pedro Teixeira

Bem para isso fui no config.xml do módulo do Pedro e add mais um tipo de url de webservice e mantendo o default.

<url_ws_correios>http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx</url_ws_correios>
<url_ws_correiosOffline>http://deivison.com.br/correiosOffline/index.php</url_ws_correiosOffline>

E depois fui em CorreiosMethods.php e troquei abaixo da function _getCorreiosReturn() a chamada do $filename = $this->getConfigData(‘url_ws_correios’) para:

//echo “<script>alert(‘”.Mage::getStoreConfig(‘carriers/pedroteixeira_correios/deivison’, $this->getStore()).”‘)</script>”; //Para teste pode remover

if(Mage::getStoreConfig(‘carriers/pedroteixeira_correios/deivison‘, $this->getStore()) == 1){
$filename = $this->getConfigData(‘url_ws_correiosOffline’);
}else{
$filename = $this->getConfigData(‘url_ws_correios’);
}

Adicionando o campo de seleção de Offline no módulo do Pedro Teixeira

Edite o arquivo /app/code/community/PedroTeixeira/Correios/Etc/System.xml, e abaixo do campo title onde fecha </title> iremos incluir um novo campo, no meu exemplo o novo campo se chama deivison.

<deivison translate=”label”>
<label>Configurar webservice Offline do Deivison</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>16</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</deivison>

Obs: Obrigado Renato por me avisar da falta desse XML :)

Pronto! Agora temos um subterfúgio para utilização dos Correios Offline utilizando o módulo do Pedro Teixeira no Magento.

OBS: Lembre-se de sempre limpar o cache a cada troca de webservice!

Resultados nos testes

Bem aqui abaixo deixo uma demostração da funcionalidade dos scripts integrados! No exemplo a loja calcula o frete + 2 reais como taxa de manuseio. Só que para verificar se tudo esta ok, selecionei as opções disponíveis para o RJ e troquei os valores adicionando 2 zeros no final de cada um então o valor do banco para PAC que custava 9 reais passou a ser localmente 902 que seriam os 9 reais mais os 2 de taxa. Já no webservice dos Correios ficou sendo 9 reais + 2 reais para a opção de PAC somando 11 reais

Selecionando as minhas faixas de cep local e alterando o valor

Módulo Pedro Teixeira com webservice alternativo

Exibindo os fretes com o webservice dos Correios (9 + 2 = 11)

Módulo Pedro Teixeira com webservice alternativo

Exibindo os frete com o webservice local que fiz (900 + 2 = 902)

Módulo Pedro Teixeira com webservice alternativo

Com isso mostra que realmente funciona!!!  \O/

OBS: Eu não ativei a exibição dos prazos mas poderia ter adicionado! Basta ir no módulo do Pedro e ativar isso! Existem também a possibilidade de adicionar dias a esse mesmo prazo!

Outra coisa não esqueça de bloquear o admin do script do Frederico Leão!!!!!! Senão vai dá ruim rsrs recomendo usar htacces ou estudar um pouquinho mais e fazer um módulo com esse script dentro e ajuda a comunidade! Pare de ser preguiçoso e mão de vaca! Compartilhe e aprenda!!!

vlw att

Fontes de testes: 

Fontes:

Sobre o Autor

Designer, Web Developer & Linux Administrator

Meu nome é Deivison Arthur, tenho 29 anos, sou Administrador Linux, Analista de Sistema, Webdesigner e Pesquisador. há mais de dez anos. Nasci no Rio de Janeiro, atualmente trabalho como Gerente de Tecnologia e E-commerce at Grupo FFernandes e Freelancer nas horas vagas. Desenvolvimento em Joomla, Wordpress, Drupal, Magento e outros GPLs...

Quantidade de Artigos : 114

Comentários (25)

Enviar Comentário

© 2012 Powered By Wordpress, Deivison Arthur

Ir para cima