Ir para conteúdo

POWERED BY:

Arquivado

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

Edivaldo_Reis

[Resolvido] Calculo de frete

Recommended Posts

Estou desenvolvendo um carrinho de compras, onde o usuário deve fornecer o cep para o sistema calcular o frete.

O usuário terá as opções de sedex e entrega normal.

 

A dúvida é enorme, porque no Brasil há milhares de cep. E como saber os valores cobrados pelos correios ???

 

Alguem tem uma sugestão ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai vai uma função para calcular direto do correio

 

dai você só tem q mudar o código do serviço

 

que são

41106 = PAC

40010 = SEDEX

40215 = SEDEX 10

40045 = SEDEX a Cobrar

40290 = SEDEX HOJE

81019 = e-SEDEX

44105 = MALOTE

$valor_total =  number_format('1520,00','2','.','');
$peso		 = arredonda_peso($peso)

function arredonda_peso($peso){
	$tipo = gettype($peso);
	$peso = ereg_replace(",",".",$peso);
	settype($peso,"float");
	if (floor($peso)<$peso) {
		$peso = ceil($peso);
	}

	settype($peso,$tipo);
	return $peso;
}


function calcula_frete_correios($cep_origem, $cep_destino, $peso, $valor_total){
	$conexao = fsockopen("www.correios.com.br", 80, $errno, $errstr, 30);
	if (!$conexao){
		echo "$errstr ($errno)<br />\n";
	} else {
		$saida = "GET /encomendas/precos/calculo.cfm?servico=40010&CepOrigem=$cep_origem&CepDestino=$cep_destino&Peso=$peso&MaoPropria=Sim HTTP/1.1\r\n";
		$saida .= "Host: www.correios.com.br\r\n";
		$saida .= "Connection: Close\r\n\r\n";

		fwrite($conexao, $saida);
		$resposta = "";
		 
		while (!feof($conexao))	   
			$resposta .= fgets($conexao, 128);
		   
		fclose($conexao);
	   
		eregi("Tarifa=([0-9]+\.[0-9]+)", $resposta, $reg) . "<br />";
		if (!$reg[1]) {
			eregi("Tarifa=([0-9]+)", $resposta, $reg);
		}
			
		$resultado = $reg[1];
		return $resultado;
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

vitor_np,

 

Pode-me explicar como funciona esse função. Tenho que construir um formulário para chamá-la.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

fala Alissong

 

você fazer varias formar uma das é criar o form e passar os param. ou definir na mão

 

por ex:

 

$peso = arredonda_peso($_POST['peso']);

$varlosedex = calcula_frete_correios($_POST['cep_origem'], $_POST['cep_destino'], $peso, $_POST['valor_total'])

 

os post vem de um form

 

beleza?

 

abraçoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

vitor_np,

 

Há um tempo atrás peguei esse script do Jonathas Koerich na net, mas aqui ele não funciona. Então verifiquei o script e não achei erro. Portanto, peço-lhe atenção e verifique-o.

cep.php

<?php

/*=======================================================*\

||#######################################################||

||# #||

||# Desenvolvido para PHP5 #||

||# #||

||# Este script foi desenvolvido por Jonathas Koerich #||

||# Se tiveren algum problema com esse script por favor #||

||# me avisem jonathask@hotmail.com #||

||# #||

||#######################################################||

\*=======================================================*/

if(!empty($_POST["bt_calcular"])){

if($_POST["servico"]==41017){

$url="http://www.correios.com.br/encomendas/precos/default.cfm".

"?resposta=paginaCorreios&servico=".$_POST["servico"].

"&cepOrigem=".$_POST["cepOrigem"].

"&cepDestino=".$_POST["cepDestino"].

"&peso=".$_POST["pesoKg"].

"&MaoPropria=".$_POST["maoPropria"].

"&valorDeclarado=".$_POST["valorDeclarado"].

"&avisoRecebimento=".$_POST["avisarRecebimento"].

"&Comprimento=".$_POST["Comprimento"].

"&Largura=".$_POST["Largura"].

"&Altura=".$_POST["Altura"].

"&Diametro=".$_POST["Diametro"]."";

}else{

$url="http://www.correios.com.br/encomendas/precos/calculo.cfm?".

"resposta=paginaCorreios&servico=".$_POST["servico"].

"&cepOrigem=".$_POST["cepOrigem"].

"&cepDestino=".$_POST["cepDestino"].

"&peso=".$_POST["pesoKg"].

"&MaoPropria=".$_POST["maoPropria"].

"&valorDeclarado=".$_POST["valorDeclarado"].

"&avisoRecebimento=".$_POST["avisarRecebimento"]."";

}

$arquivo=implode("",file($url));

preg_match_all("#<b>(.*?)<\/b>#s",$arquivo,$negritos);

if(empty($negritos[1][6])){

preg_match_all('#<font color="red">(.*?)<\/font>#s',$arquivo,$font_red);

$busca=array("'<[\/\!]*?[^<>]*?>'si");

$trocas=array("","","\\1","\"","&","<",">"," ",chr(161),chr(162),

chr(163),chr(169),"chr(\\1)");

$aviso=preg_replace($busca,$trocas,$font_red[1][0]);?>

<div>Aviso:<?=$aviso?></div><br>

<?

}else{?>

<div>Valor da Encomenda:<?=$negritos[1][6]?></div><br>

<?

}

}

//Layout desenvolvido por Jonathas Koerich Direitos Reservados

?>

<html>

<head>

<title>Exemplo de Consulta de Encomenda dos correios</title>

<style type=text/css>

body{

font-weight:bold;

font-size:22px;

font-family:Verdana,Arial,sans-serif;

}

div{

font-family:Arial,Verdana,sans-serif;

font-weight:bold;

font-size:14px;

color:#000000;

border-width:0px 0px 0px 0px;

border-style:solid solid solid solid;

margin:0px 0px 0px 0px;

}

input{

background-color:#FFFFFF;

}

#i1{

background-color:#E1E1E1;

}

#t1{

width:200px;

height:24px;

text-align:right;

line-height:1.5;

}

#t2{

width:200px;

height:24px;

margin:-24px 0px 0px 200px;

color:#FFFFFF;

}

#t3{

width:400px;

height:24px;

text-align:center;

}

</style>

<script language=JavaScript type=text/javascript>

<!--

function habilita(){

if(document.frete.servico.value==41017){

document.frete.Formato.disabled=false;

document.frete.Comprimento.disabled=false;

document.frete.Largura.disabled=false;

document.frete.Altura.disabled=false;

document.frete.Formato.style.background="#FFFFFF";

document.frete.Comprimento.style.background="#FFFFFF";

document.frete.Largura.style.background="#FFFFFF";

document.frete.Altura.style.background="#FFFFFF";

if(document.frete.Formato.value==1){

document.frete.Diametro.disabled=true;

document.frete.Diametro.style.background="#E1E1E1";

document.frete.Diametro.value="";

}else{

document.frete.Diametro.disabled=false;

document.frete.Diametro.style.background="#FFFFFF";

}

}else{

document.frete.Formato.disabled=true;

document.frete.Comprimento.disabled=true;

document.frete.Largura.disabled=true;

document.frete.Altura.disabled=true;

document.frete.Diametro.disabled=true;

document.frete.Formato.style.background="#E1E1E1";

document.frete.Comprimento.style.background="#E1E1E1";

document.frete.Largura.style.background="#E1E1E1";

document.frete.Altura.style.background="#E1E1E1";

document.frete.Diametro.style.background="#E1E1E1";

}

}

//-->

</script>

</head>

<body>

Exemplo de Consulta de Encomenda dos correios

<form name=frete method=post>

<div>

<div id=t1>Serviço:</div>

<div id=t2>.<select name=servico size=1 onchange=habilita();>

<option value=40010>SEDEX</option>

<option value=40290>SEDEX Hoje</option>

<option value=40215>SEDEX 10</option>

<option value=40045>SEDEX a Cobrar</option>

<option value=41017 selected>Encomenda Normal</option>

</select>

</div>

<div id=t1>Formato:</div>

<div id=t2>.<select name=Formato size=1 onchange=habilita();>

<option selected value=1>Caixa/Pacote</option>

<option value=2>Rolo/Prisma</option>

</select>

</div>

<div id=t1>Cep de Origem:</div>

<div id=t2>.<input name=cepOrigem type=text size=7></div>

<div id=t1>Cep de Destino:</div>

<div id=t2>.<input name=cepDestino type=text size=7></div>

<div id=t1>Comprimento (cm):</div>

<div id=t2>.<input name=Comprimento type=text size=3></div>

<div id=t1>Largura (cm):</div>

<div id=t2>.<input name=Largura type=text size=3></div>

<div id=t1>Altura (cm):</div>

<div id=t2>.<input name=Altura type=text size=3></div>

<div id=t1>Diametro (cm):</div>

<div id=t2>.<input name=Diametro type=text size=3></div>

<div id=t1>Peso (Kg):</div>

<div id=t2>.<select name=pesoKg size=1>

<option value=0.3 selected>0,300</option>

<option value=1>1</option>

<option value=2>2</option>

<option value=3>3</option>

<option value=4>4</option>

<option value=5>5</option>

<option value=6>6</option>

<option value=7>7</option>

<option value=8>8</option>

<option value=9>9</option>

<option value=10>10</option>

<option value=11>11</option>

<option value=12>12</option>

<option value=13>13</option>

<option value=14>14</option>

<option value=15>15</option>

<option value=16>16</option>

<option value=17>17</option>

<option value=18>18</option>

<option value=19>19</option>

<option value=20>20</option>

<option value=21>21</option>

<option value=22>22</option>

<option value=23>23</option>

<option value=24>24</option>

<option value=25>25</option>

<option value=26>26</option>

<option value=27>27</option>

<option value=28>28</option>

<option value=29>29</option>

<option value=30>30</option>

</select>

</div>

<div id=t1>Mão Propria:</div>

<div id=t2>.<select name=maoPropria size=1>

<option value=S>Sim</option>

<option value=N selected>Não</option>

</select>

</div>

<div id=t1>Valor Declarado: R$</div>

<div id=t2>.<input name=valorDeclarado type=text size=5></div>

<div id=t1>Avisar Recebimento:</div>

<div id=t2>.<select name=avisarRecebimento size=1>

<option value=S>Sim</option>

<option value=N selected>Não</option>

</select>

</div>

<div id=t3><input type=submit name=bt_calcular value=Calcular id=i1></div>

</div>

</form>

</body>

<script>habilita();</script>

</html>

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

fala veio

 

beleza...

 

o erro está na linha que contem esse código

 

Errado:

<div>Valor da Encomenda:<?=$negritos[1][6]?></div><br>

Correto:

<div>Valor da Encomenda:<?=$negritos[1][7]?></div><br>

beleza...

 

apenas lembrando se você puder trocar <?= por <?php

 

seria ótimoo

 

Abraçoooo

Compartilhar este post


Link para o post
Compartilhar em outros sites

vitor_np,

 

Cara muito obrigado, fiz as alterações como você solicitou e ficou show.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, testei e aprovei esse webservice para calculo de frete dos correios (sedex e PAC). Vou postar a função para se fazer o calculo, muito simples:

 

<?php

 

/*

| Função para calculo de frete, Sedex e Encomenda PAC

|

| @Autor Natanael L. Freire

| @E-mail natanael@w21studio.com

| @Site w21studio.com

| @service http://frete.w21studio.com

| @Apoio http://www.comocriarsites.com.br

| @Licença Gratis

|

|

| @servico 1:sedex, 2:pac, 3:sedex e pac

| @cod código de usuário (você receberá este número ao se cadastrar gratuitamente no site http://frete.w21studio.com)

| @cep cep de destino - somente números (8 digitos)

| @peso peso do volume. Peso máximo: 30. Use '.' ponto para separar as casas decimais, exemplo: 0.3

| @comprimento comprimento do volume em cm. Comprimento máximo 60. Formato aceito: somente números

| @largura largura do volume em cm. Largura máxima 60. Formato aceito: somente números

| @altura altura do volume em cm. Altura máxima 60. Formato aceito: somente números

| O resultado de comprimento + largura + altura NÃO pode ser superior a 150

|

| OBS: Todos os parametros devem ser passados dentro de aspas - preferencialmente simples

|

*/

 

function calcularFrete($servico, $cod, $cep, $peso, $comprimento, $largura, $altura)

{

return simplexml_load_file("http://frete.w21studio.com/calFrete.xml?cep=$cep&cod=$cod&peso=$peso&comprimento=$comprimento&largura=$largura&altura=$altura&servico=$servico");

 

}

 

$frete = calcularFrete('1', '1000', '72853035', '15', '20', '10', '5');

 

 

 

 

foreach($frete as $key => $value)

{

echo "$key = $value<br />";

}

A função é auto explicativa, mas para reforçar é importante que você faça o cadastro no site http://frete.w21studio.com e informe o seu cep de origem e pegue seu código.

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.