No módulo de frete para Magento, integrei o WebService dos Correios para realizar o cálculo de frete.
Aqui vou explicar como fazer essa integração.
O primeiro passo é ler a documentação dos Correios:
Manual de implementação de cálculo remoto de preços e prazos.
Como a documentação explica, é algo simples, iremos chamar uma URL dos Correios com as variáveis de cálculo e ele nos devolve um XML com os valores e prazos.
O primeiro passo é criar a URL:
//Valores das variáveis $StrRetorno = "xml"; $nCdServico = 40010; $nVlPeso = 1; $sCepOrigem = "01318002"; $sCepDestino = "01318002"; $nCdFormato = 1; $sCdMaoPropria = "N"; $sCdAvisoRecebimento = "N"; $nVlValorDeclarado = 0; //Base da URL $url = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx"; //Variáveis na URL $url .= "?StrRetorno=" . $StrRetorno; $url .= "&nCdServico=" . $nCdServico; $url .= "&nVlPeso=" . $nVlPeso; $url .= "&sCepOrigem=" . $sCepOrigem; $url .= "&sCepDestino=" . $sCepDestino; $url .= "&nCdFormato=" . $nCdFormato; $url .= "&sCdMaoPropria=" . $sCdMaoPropria; $url .= "&sCdAvisoRecebimento=" . $sCdAvisoRecebimento; $url .= "&nVlValorDeclarado=" . $nVlValorDeclarado;
Acabamos de criar a URL com todas as variáveis definidas. Usei valores de teste, você precisará coletar esses valores da base ou de um formulário.
Para entender melhor as variáveis, consulte o manual.
Agora iremos fazer a conexão e receber o retorno:
//Carrega o retorno
if(!($retorno = file($url))){
echo "Erro na conexão!";
exit();
}
//Verifica se houve retorno
if(strlen($retorno) <1){
echo "Não houve retorno!";
exit();
}
Pronto! Temos na variável $retorno o XML de retorno dos Correios.
Vamos tirar dele os valores que queremos:
//Retira do XML os valores e prazos
preg_match_all("/(.+)<\/Codigo>/", $retorno, $xml_servico);
preg_match_all("/(.+)<\/Valor>/", $retorno, $preco_postal);
preg_match_all("/(.+)<\/PrazoEntrega>/", $retorno, $prazo_postal);
preg_match_all("/(.+)<\/Erro>/", $retorno, $err_id);
$err_id = str_replace('-', '', $err_id[1][0]);
$err_id = (int)$err_id;
preg_match_all("/(.+)<\/MsgErro>/", $retorno, $err_msg);
Agora você tem nas variáveis o valor do frete, tempo de entrega e possíveis erros:
//Código do serviço $xml_servico[1][0]; //Valor do frete $preco_postal[1][0]; //Tempo de entrega $prazo_postal[1][0]; //ID do erro, se existir $err_id; //Mensagem de erro, se existir $err_msg[1][0];
Lembre-se, leia a documentação para entender como funcionam as variáveis e o retorno.
Basta integrar na sua aplicação e calcular o frete!
Abraço!






Foi so para mostrar como vc fez, correto?
Responder
Pedro Teixeira respondeu:
17 de março de 2010
@CajuCLC,
Exato!
Responder
wagner respondeu:
09 de fevereiro de 2011
@Pedro Teixeira, @CajuCLC, to no termino de meu web site e neste exato momento deu erro,no modulo dos correios de uma olhada em meu website.poderia me informar o que eu fiz de errado
Responder
Pedro Teixeira respondeu:
09 de fevereiro de 2011
@wagner,
Dê uma lida na Wiki:
http://code.google.com/p/pedroteixeira-correios/wiki/
Se mesmo assim não conseguir resolver, habilite o log e me passe a mensagem.
Abraço!
Responder
wagner respondeu:
09 de fevereiro de 2011
@CajuCLC, to no termino de meu web site e neste exato momento deu erro,no modulo dos correios de uma olhada em meu website.poderia me informar o que eu fiz de errado
Agradeço desde ja
Responder
Pedro
boa noite!
estou recebendo um e-commerce magento e estou tendo algumas dificuldades, como por exemplo.-
1-horario do relogio (rodateto) apresentacao nao coincide com horario, neste momento 9,27pm diz aproveite a sua madrugada!
2-qdo se clica no produto exemplo 0 1 capacete qq, gostaria que as condicoes de pagtos ficasse ao lado ou junto ao capacete para que o cliente possa decidir a compra neste momento, alem do preco, sabendo em quantas parcelas podera pagar, e no meu caso so sabera isto apo fazer checkout!
3- ainda referente ao item 2, no caso do capacete, para o cliente colocar o tamanho do capacete fica longe do produto tem que rolar a pagina para colocar o tamanho, este item tem que ficar ao lado do capacete.
Tem outras coisas mais que informare posteriormente.
Vc tem como resolver isto e me fornecer um orcamento?
abs
walter
Responder
Pedro Teixeira respondeu:
04 de abril de 2010
@walter,
Infelizmente nesse momento não estou pegando esse tipo de projeto, poste no fórum que com certeza diversos profissionais vão te ajudar.
Abraço!
Responder
Pedro,
Obrigado por compartilhar estas informações. Você resumiu direitinho tudo que precisava ser contado para colocar um calculo de frete pra funcionar.
Ajudou muito.
Responder
Pedro Teixeira respondeu:
06 de abril de 2010
@deadmilkman,
Valeu!
Responder
Funcionou certinho, obrigado pela postagem…
Agora é só descobrir como eu atribuo acesso de arquivo somente a url…
Responder
Pedro Teixeira respondeu:
04 de junho de 2010
@Rodrigo,
Desculpe, não entendi o que você quer fazer.
Abraço!
Responder
Pra funcionar preciso fazer uma alteração nas configurações do php para arquivos externos funcionarem “ativar allow_url_fopen”, mas como tenho medo em habilitar procuro ver se consigo se fazer funcionar sem mexer nesta configuração.
Responder
Pedro Teixeira respondeu:
04 de junho de 2010
@Rodrigo,
Você pode usar outras bibliotecas como o CURL.
Abraço!
Responder
Rodrigo respondeu:
04 de junho de 2010
@Pedro Teixeira, tentei usar:
ini_set(‘allow_url_fopen’, ‘on’);
mas tive o seguinte erro:
Warning: preg_match_all() expects parameter 2 to be string, array given in /home/roberto/public_html/frete/frete.php on line 47;
Grato pela dica vou pesquisar sobre o CURL…
Responder
Ola Pedro montei o webservice mas estou com problema com a conexao com os correios da um erro de conexao.
Você pode me ajudar.Obrigado!
Responder
Pedro Teixeira respondeu:
23 de setembro de 2010
@Thiago,
Mudou a URL, dê uma olhada na documentação dos Correios:
http://correios.com.br/servicos/precos_tarifas/pdf/SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.pdf
Abraço!
Responder
Boa tarde amigo,
Instalei hoje o teu módulo dos correios mais da um erro. Pode me ajudar? Sou novo no magento. O meu site está acima. Obrigado!
Responder
Pedro Teixeira respondeu:
14 de janeiro de 2011
@Guilherme,
Peço que antes de tirar dúvidas no blog leia a wiki do módulo, nela você mesmo poderá resolver 99% dos problemas:
http://code.google.com/p/pedroteixeira-correios/w/list
Se mesmo assim não resolver, me detalhe exatamente o que está acontecendo, siga o procedimento de habilitar o log (tambpem no wiki) e me passe o resultado.
Abraço!
Responder
Olá Pedro,
Parabéns pelo modulo e pela ajuda a comunidade.
Estou com um problema onde tenho um produto cadastrado com peso de 0.1500 o modulo está configurado assim:
Modulo configurado com formato de peso em kilos
Valor Máximo de Compra – 10000
Peso Máximo Permitido Pelos Correios – 30
Ao efetuar o calculo com mais de 66 itens é exibido o erro :
Peso excedido. (Cod. 4)
Sendo que o limite é 30kilos
log:
2011-07-01T15:09:41+00:00 DEBUG (7): pedroteixeira_correios [230]: Correios Error: Peso excedido. [Cod. 4] [Serv. 40290]
O que pode estar errado?
Obrigado!
Julio
Responder
Pedro Teixeira respondeu:
01 de julho de 2011
@Julio Cesar,
Confira o formato do peso e o peso cadastrado no produto. Se estiverem corretos não sei o que pode ser.
Abraço!
Responder
Julio Cesar respondeu:
01 de julho de 2011
@Pedro Teixeira,
Será que é poque eui não desinstalei o modulo antigo?
Desistalar ele agora com a versão 4 instalada é perigoso?
Obrigado!
Abraços
Responder
Pedro Teixeira respondeu:
01 de julho de 2011
@Julio Cesar,
Tudo que for feito em produção é perigoso, teste antes em um ambiente separado.
Abraço!
Responder
Olá Pedro,
Gostaria de uma função em minha loja magento. Estou usando seu módulo dos correios. Porém quando os correios não retornam o calculo eu gostaria de utilizar um módulo alternativo de calculo. Isto é possível? O magento tem esta função por defaut? Se negativo as duas respostas anteriores: você pega este tipo de projeto?
Se tiver interesse favor enviar email.
Abraços
Responder
Oi, Pedro.
Apliquei a sua extension no meu site.
O plugin está retornando um erro 403. Ao invés de calcular o valor do frete, o site somente apresenta uma mensagem dizendo que o serviço está fora do ar.
Li em uma documentação dos Correios que, para usufruir do cálculo de frete, é necessário ter um código de cliente. Isso é verdade? E se aplica mesmo a serviços sem contrato?
Qualquer ajuda que puderes me dar será muito útil.
Responder