Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

~TiuTalk~

Cálculo de Preço de Frete em função do Cep

Recommended Posts

tive problema com o metodo get ja que o site do correios mudou o form para post entao fiz esse script, ele requer curl habilitado

<?php
/*
Formatacao basica
_____________________________________________________________________________________________________
|	        |servico|cepori|cepdes|peso|valorD|form|comp|larg|alt|diameter|mpro|valdec|arec|emba|
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|     PAC       |  X    |  X   |   X  | *  |      | X  | *  | *  | * |   *    | X  |  *   | X  |  * |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|    SEDEX      |  X    |  X   |   X  | *  |      |    |    |    |   |        | X  |  *   | X  |  * |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|   SEDEX10     |  X    |  X   |   X  | *  |      |    |    |    |   |        | X  |  *   | X  |  * |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|  SEDEXHOJE    |  X    |  X   |   X  | *  |      |    |    |    |   |        | X  |  *   | X  |  * |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|SEDEX A COBRAR |  X    |  X   |   X  | *  |  *   |    |    |    |   |        | X  |      |    |  * |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|    eSEDEX     |  X    |  X   |   X  |    |      |    |    |    |   |        |    |      |    |    |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
|    MALOTE     |  X    |  X   |   X  |    |      |    |    |    |   |        |    |      |    |    |
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
X nao pode ser Nulo
* pode ser Nulo
O que estiver em branco deve ser nulo.

Valores admiciveis
servico = PAC = 41106 | SEDEX = 40010 | SEDEX10 = 40215 | SEDEXHOJE = 40290 | SEDEX A COBRAR = 40045 | eSEDEX = 81019 | MALOTE = 44105
mpro = S para entregar em mao propia e N para Nao entregar caso seja fora da area de entrega
arec = Avisar recebimento S para sim N para nao
valdec = Valor declarado valido para sedex, sedex10, sedexhoje, pac
valorD = valor declarado para sedex a cobrar
form = valido somente para pac, 1 para caixa/pacote ou 2 para rolo/prisma 
peso = no site as opcoes sao 0.300 e 1 a 30 kg 
com = comprimento da caixa ou do cilindro
larg = largura da caixa
alt = altura da caixa
diameter = diametro do cilindro -- para mais informaçoes de diametro e medidas verifique no site
emba - embalagens   	116600055 = Caixa Encomenda 01 (18x13,5x9 cm)
		116600063 = Caixa Encomenda 02 (27x18x9 cm)
		870100203 = Caixa Encomenda 03 (27x22,5x13,5 cm)
		116600080 = Caixa Encomenda 04 (36x27x18 cm)
		116600160 = Caixa Encomenda 05 (54x36x27 cm)
		765000652 = Envelope Bolha para CD
		765000660 = Envelope Bolha para DVD
		870200313 = Envelope SEDEX cartonado Grande (40x28 cm)
		870200330 = Envelope SEDEX plástico Grande (40x28 cm)
cepori = cep de origem
cepdes = cep de destino
*/

function calc_frete($servico,$cepori,$cepdes,$peso,$valorD,$form,$comp,$larg,$alt,$diameter,$mpro,$valdec,$arec,$emba) {

//conteudo do Post
$data = "resposta=paginaCorreios&servico={$servico}&cepOrigem={$cepori}&cepDestino={$cepdes}&peso={$peso}&valorD={$valorD}&Formato={$form}&Comprimento={$comp}&Largura={$larg}&Altura={$alt}&Diametro={$diameter}&MaoPropia={$mpro}&valorDeclarado={$valdec}&avisoRecebimento={$arec}&embalagem={$emba}";

//Envia o Post e resgata html de resposta
$html = curl_init('http://www.correios.com.br/encomendas/prazo/prazo.cfm');
curl_setopt($html, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1");
curl_setopt($html, CURLOPT_TIMEOUT, 30);
curl_setopt($html, CURLOPT_POSTFIELDS, $data);
curl_setopt($html, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($html, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($html, CURLOPT_POST, 1);
$return = curl_exec($html);
curl_close($html);

//tratamento inicial do html
$return = explode('<!--/buscaCorreios-->', $return);
$return = $return[1];
$return = explode('<!--buscaCorreios-->', $return);
$return = $return[0];
$seg1 = explode('<tr class="tdAmarelo">', $return);
$seg2 = explode('<tr class="tdAzul">', $return);
//total do frete
$tfrete = explode('<td colspan="2">', $seg1[2]);
$tfrete = explode('</td>', $tfrete[1]);
$tfrete = substr($tfrete[0], 3);
//origem e destino
$ordes = explode('<td align="center">', $seg1[1]);
$origem = explode('</td>', $ordes[1]);
$origem = $origem[0];
$destino = explode('</td>', $ordes[2]);
$destino = $destino[0];
//prazo de Entrega
$prazo = explode('<b>', $seg2[2]);
$prazo = explode('</b>', $prazo[2]);
$prazo = substr($prazo[0], 0, -17);

//Resultados
$result = "O frete de $origem ate $destino tera o custo de R$:$tfrete, e chegara em $prazo Dias Apos a postagem";
return $result;
} 

function busca_cep($cep) {
//dados do post
$data = "resposta=paginaCorreios&servico=41106&cepOrigem=93880970&cepDestino={$cep}&peso=&valorD=&Formato=1&Comprimento=&Largura=&Altura=&Diametro=&MaoPropia=N&valorDeclarado=&avisoRecebimento=N&embalagem=";
//envia e receb 
$html = curl_init('http://www.correios.com.br/encomendas/prazo/prazo.cfm');
curl_setopt($html, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1");
curl_setopt($html, CURLOPT_TIMEOUT, 30);
curl_setopt($html, CURLOPT_POSTFIELDS, $data);
curl_setopt($html, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($html, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($html, CURLOPT_POST, 1);
$return = curl_exec($html);
curl_close($html);
//tratamento inicial
$return = explode('<!--/buscaCorreios-->', $return);
$return = $return[1];
$return = explode('<!--buscaCorreios-->', $return);
$return = $return[0];
$seg2 = explode('<tr class="tdAzul">', $return);
$cidabai = explode('<td align="center">', $seg2[1]);
//busca logradouro
$logradouro = explode('</td>', $cidabai[4]);
$logradouro = $logradouro[0];
//busca bairro
$bairro = explode('</td>', $cidabai[6]);
$bairro = $bairro[0];
//busca cidade e estado
$cidaes = explode('</td>', $cidabai[8]);
$cidaes = $cidaes[0];
$estado = substr($cidaes, -2);
$cidade = substr($cidaes, 0, -3);
//reultados
$result = "<li>Cidade:$cidade</li><li>Estado:$estado</li><li>Bairro:$bairro</li><li>Logradouro:$logradouro</li>";
return $result;
}


echo calc_frete("41106","93880970","69075840","2","","1","","","","","N","","N","");
echo busca_cep("93010010");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.