Cálculo de frete em PHP
Antes de usar o exemplo abaixo, entenda que o serviço disponibilizado pelo Correios é para utilização individual dos usuários do portal através do seguinte endereço http://www.correios.com.br/encomendas/precos/. Essa técnica simula a navegação de um usuário, isso torna a dica suscetível a qualquer alteração no sistema disponível atualmente.
Esta dica é de 2007 mas funciona bem até hoje!
Crie um arquivo.php com o código-fonte abaixo:
<?php /** * Retorna dados relativos ao calculo de frete nos Correios/Brasil * * @param string $servico com os valores PAC, Sedex, Sedex10, SedexHoje, ESedex ou Malote * @param integer $cepOrigem CEP de origem da encomenda * @param integer $cepDestino CEP de destino da encomenda * @param integer $peso Peso da encomenta em Kg * @return array Resultado da operacao */ function consultar($servico, $cepOrigem, $cepDestino, $peso) { $arrServicos = array("pac" => 41106, "sedex" => 40010, "sedex10" => 40215, "sedexhoje" => 40290, "esedex" => 81019, "malote" => 44105); $cod_servico = $arrServicos[$servico]; $url = "http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=&servico=$cod_servico&cepOrigem=$cepOrigem&cepDestino=$cepDestino&peso=$peso&MaoPropria=N&valorDeclarado=&avisoRecebimento=N"; $html = file_get_contents($url); preg_match_all("/[\?\&]([\w]+)=([a-zA-Z0-9\.]+)/i", $html, $parts); for ($x = 0; $x < count($parts[1]); $x++) $resposta[$parts[1][$x]] = $parts[2][$x]; return $resposta; } // Testando a funcao echo '<html><body>Teste de cálculo de frete (<a href="http://www.baladao.com.br/blog/calculo-de-frete-em-php/">http://www.baladao.com.br/blog/calculo-de-frete-em-php/</a>):<br><pre>'; $resultado = consultar('sedex', '91350190', '90030130', '1'); print_r($resultado); ?>
Agora é só usar os valores retornados pelo array como quiser, lembrando que o resultado do cálculo no exemplo é o campo $resultado[Tarifa]. Veja aqui o resultado do teste.
abs.
Juliano
Você pode seguir todas as respostas através do feed RSS 2.0. Você pode deixar uma resposta, ou trackback do seu site.
Muito bom meu…
Esse funciona bem mesmo e sem a nescessidade de registro junto aos correios…
Até que enfim um q funcione. Obrigado Juliano. Abs
Aqui não funfou e dava erro na linha 22. tem como comentar cada linha de código?
Olá, o exemplo no link ao final do post é uma cópia exata do código acima.
Poderia te ajudar mais se tivesse mandando a mensagem de erro que apareceu para você.
Funfou belezinha… Nada de erro na linha 22… Hehehehhe (estes usuários de windows)
Valew!!!
Não testei o script, mas eu uso um similar e não está mais funcionando o calculo do PAC. Alguém consegiu resolver isso? parece que os correios removeu o PAC desse calculo. Já tentei passar as variaveis que agora sao obrigatorias para calcular o pac, o formato, comprimento, largura, altura, mas nada. se alguem souber de algo, da um toque, farei o mesmo. valeu.
Nao está mais funcionando o calculo do PAC. Faz tempo que uso um script similar e não encontrei como arrumar isso ainda. Alguem conseguiu fazer funcionar com o pac? valeu
O único que realmente funcionou, parabéns para o desenvolvedor!
Porém o calculo do PAC ainda funcionou, por causa das dimensões, se alguem tiver alguma solução posta aí…
Ufa!!!
Como eu procurei por um código que funcionasse!!!
Valeu d+
Sem o PAc funcionar, fica sendo apenas um calculardor de SEDEX que a URL dos correios já retorna
http://www.correios.com.br/encomendas/precos/calculo.cfm?cepOrigem=15085893&cepDestino=15040190&peso=3&MaoPropria=N&avisoRecebimento=N&resposta=xml
Espero que alguém consiga o Calculo do PAC com a cubagem da mercaodria, porque não vi em lugar nenhum alguem que conseguiu.
O scrpit funciona para sedex, mas para o pac o valor de retorno e 0,00, tentei passar os parametros (CxLxA) para o volume mesmo assim vem zerado, como resolver isso?
Olá Luiz,
Parece que o cálculo para PAC foi desativado no site dos correios mesmo.
Essa solução é antiga, de fato existem novas formas para se implementar os cálculos.
Assim que tiver a solução para o PAC posto aqui no blog.