BLOG CORPORATIVO
Artigos, scripts e dicas postados pelos colaboradores. Não são postados scritps relacionados à trabalhos feitos para clientes.
Função simples para cálculo de frete a partir do site dos correios
Escrito por Edgar Serra em 17 de Novembro de 2009 às 14:58.
Arquivado em PHP Dicas.
Vou mostrar uma função simples para o cálculo de frete a partir do site dos correios. Essa função usa o próprio webservice dos correios que disponibiliza o retorno em XML, ficando assim fácil parsear e sem as gambiarraas que muita gente usa.

A função é a seguinte:
function frete($cep_origem, $cep_destino, $servico, $peso, $valor_declarado){
	$correios = html_entity_decode( file_get_contents('http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=xml&servico='. $servico. '&cepOrigem='. $cep_origem .'&cepDestino='. $cep_destino .'&peso='. $peso. '&valorDeclarado='. $valor_declarado));

	$frete = simplexml_load_string($correios);

	if($frete->erro->codigo == '0'){
		echo 'Valor da tarifa: '.$frete->dados_postais->preco_postal;
	}else{
		echo 'Erro: '.$frete->erro->descricao;
	}
}


Ela é muito simples, por isso não vou ficar me atendo a explicar, só vale ressaltar que nesse exemplo foi usado o file_get_contents, logo allow_url_fopen deve estar ativa no servidor, se não estiver ai tem que partir pra cURL. Também foi usado o simpleXML para parsear a resposta do webservice dos correios, logo, isso também tem que estar ativo no servidor.

Os códigos de serviço, atualmente usados pelos correios são:
41106 = PAC
40010 = Sedex
40290 = Sedex Hoje
40215 = Sedex 10
40045 = Sedex a Cobrar

Exemplo de uso da função:
frete('97032120','01102000','40215','2','15');
Onde:
97032120: CEP de origem
01102000: CEP de destino
40215: Código do serviço
2: Peso
15: Valor declarado

O CEP pode ser passado no formato 00000-000 ou 00000000. Se o peso for inferior a 1 kg deve estar no formato 0.0, ou seja 0.1 é 100 gramas, 1 é 1 quilo. Se o valor for inferior a R$1,00 o procedimento é o mesmo do peso. O valor declarado é obrigatório para sedex a cobrar, se for usar outra modalidade e não desejar declarar valor use 0.

Mais simples impossível. Só lembre-se, o webservice dos correios as vezes fica instável, logo, se for implementar isso em um sistema seu crie uma rotina para verificar se ele está disponível no momento ou não.

Até a próxima.
SOBRE O AUTOR
Edgar Serra é bacharel em Ciência da Computação, já trabalhou em algumas grandes empresas do Rio Grande do Sul, atualmente presta serviços on demand para empresas do estado, além de gerenciar projetos web, vindos de empresas parceiras, em geral.
ÚLTIMOS ARTIGOS
Calculando a idade diretamento na query
Problemas em acentos
Função simples para cálculo de frete a partir do site dos correios
Falhas de segurança em sistemas
Já viu um player em JavaScript?
Como saber sua posição da lista do google
Gerando sitemap dinâmicamente com PHP
Localizando registros duplicados no MySQL
Sessões perdidas no Internet Explorer
ARQUIVO DO BLOG
Home      |      Quem somos      |      Serviços      |      Blog corporativo      |      Orçamento      |      Contato

Copyright © 2004-2010 Edgarserra.com