Calculando frete pelo site dos correios com PHP.

Uma das coisas mais utilizadas em qualquer tipo de loja virtual é o cálculo de frete, infelizmente o unico modo de faze-lo com 100% de certeza é pelo site dos correios, que disponibilizam uma url de consulta para isso.

Com o PHP conseguimos facilmente fazer esta consulta não esquecendo de que ela depende na sua maior parte do sistema dos correios estar funcionando sem problemas porém da parte do PHP utiliza-se somente funções que estão instaladas na maioria dos servidores como o simple XML.

Apesar de que nesta função vou só imprimir o valor do frete no caso PAC ou SEDEX em alguns casos da para pegar o prazo de entrega, porém como não utilizo esta função e pelo fato de nem todas as vezes receber esta informação não adicionei a sída dele neste exemplo.

Lembre-se que o código é somente um exemplo funcional de implementação:

$sCepDestino = htmlspecialchars($_GET['cep']); //LIMPA A VARIAVEL
$sCepDestino = str_replace("-", "", $sCepDestino); //REMOVE O - CASO POSSUA

//PEGA O TIPO DE FRETE E CONVERTE NO CODIGO
if ($_GET['tipo'] == "PAC") {
$nCdServico = 41106;
}
if ($_GET['tipo'] == "SEDEX") {
$nCdServico = 40010;
}

//DADOS PARA O CORREIO
        $nCdEmpresa          = "";
        $sDsSenha            = "";
        $sCepOrigem          = 36015000; //CEP DE ORIGEM
	$nVlPeso             = 1; //PESO É IMPORTANTE PARA O CALCULO
        $nCdFormato          = 1;
        $nVlComprimento      = 20;
        $nVlAltura           = 20;
        $nVlLargura          = 20;
        $nVlDiametro         = 0;
        $sCdMaoPropria       = "N";
        $nVlValorDeclarado   = 0;
        $sCdAvisoRecebimento = "S";
//

// URL QUE FARÁ AS CONSULTAS NOS CORREIOS
$URLcorreios ="http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?"
."nCdEmpresa=$nCdEmpresa&"
."sDsSenha=$sDsSenha&"
."sCepOrigem=$sCepOrigem&"
."sCepDestino=$sCepDestino&"
."nVlPeso=$nVlPeso&"
."nCdFormato=$nCdFormato&"
."nVlComprimento=$nVlComprimento&"
."nVlAltura=$nVlAltura&"
."nVlLargura=$nVlLargura&"
."sCdMaoPropria=$sCdMaoPropria&"
."nVlValorDeclarado=$nVlValorDeclarado&"
."sCdAvisoRecebimento=$sCdAvisoRecebimento&"
."nCdServico=$nCdServico&"
."nVlDiametro=$nVlDiametro&"
."StrRetorno=xml";

//PEGAMOS OS DADOS DE RETORNO XML COM O SIMPLEXML DO PHP  
$dados_correios = simplexml_load_file($URLcorreios);
$total = $dados_correios->xpath('cServico/Valor'); 
$total = floatval(str_replace(',', '.', $total[0]));
$PrazoEntrega = $dados_correios->xpath('cServico/PrazoEntrega');   
$erros = $dados_correios->xpath('cServico/Erro');   
$ValorAvisoRecebimento = $dados_correios->xpath('cServico/ValorAvisoRecebimento');   
//						   

//IMPRIME A RESPOSTA COM O VALOR DO FRETE
$resposta[valor] =  number_format($total, 2, ',', '.');
print_r($resposta[valor]);

Primeiro eu limpei a variável do cep e removi o traço se ele existir, depois peguei o segundo argumento com o tipo do frete, no momento o cálculo é somente com SEDEX e o PAC. Os dados seguintes são auto explicativas, no caso do PAC ele usa mais algumas como largura , comprimento etc. O Peso é muito importante para o cálculo pois dependendo do peso do produto o frete fica mais caro e um peso muito grande o SEDEX não suporta.

Na próxima parte definimos a url que será enviada para os correios e retiramos os dados da url de retorno usando o Simple XML do PHP e retiramos o que nos importa que é o valor do frete. Neste exemplo eu somente imprimi este valor que é o que precisamos.

Espero que este código ajude quem esta procurando um modo simples de calcular o frete pelo site dos correios, lembre-se que as implementações de segurança é de responsabilidade sua.

Atualização:

Alterado a url de acesso aos correios, agora o script funciona direto sem necessidade de alteração.

Categorias

Publicidade

Tags

Palavras Chave Estoricas Calculando frete pelo site dos correios com PHP J.Stackmenu