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.

8 Comments »

 
  • Rodrigo Usina disse:

    Muito bom meu…
    Esse funciona bem mesmo e sem a nescessidade de registro junto aos correios…

  • Guilherme disse:

    Até que enfim um q funcione. Obrigado Juliano. Abs

  • Juliano disse:

    Aqui não funfou e dava erro na linha 22. tem como comentar cada linha de código?

  • admin disse:

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

  • Vinidog disse:

    Funfou belezinha… Nada de erro na linha 22… Hehehehhe (estes usuários de windows)

    Valew!!!

    ;-)

  • Diogo disse:

    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.

  • Diogo disse:

    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

  • Leonardo disse:

    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í…

 

Deixe seu comentário

XHTML: Você pode usar as tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">