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.

13 Comments »

 
 

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="">