Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Gerador De Cálculo De Frete


denisent

Pergunta

Caros colegas

criei um site html simples, mas funcional. Agora gostaria de incrementá-lo adicionanado a opção ao cliente de calculo do frete ( do tipo em que o cliente digita o cep de destino, de origem e a forma de entrega desejada ( sedex/ encomenda normal) e o sistema retorna com o valor do frete. Parece que é um link direto dos coreios. alguém pode me ajudar? Desde já informo que sou leiga em qualquer linguagem, mas esforçada e auto didata.

Link para o comentário
Compartilhar em outros sites

21 respostass a esta questão

Posts Recomendados

  • 0

Para o cálculo do frete use o seguinte:

<?
if( isset($_GET["action"]) && $_GET["action"] == "Submit" ){
$url="http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=41017&cepOrigem=".$_POST["cepOrigem"]."&cepDestino=".$_POST["cepDestino"]."&peso=".$_POST["pesoKg"]."&MaoPropria=".$_POST["maoPropria"]."&valorDeclarado=".$_POST["valorDeclarado"]."&avisoRecebimento=".$_POST["avisarRecebimento"];
$return = implode("", file($url));
preg_match_all("#<b>(.*?)<\/b>#s", $return, $matches);
$parms = Array(
"cepOrigem"=>$_POST["cepOrigem"],
"cepDestino"=>$_POST["cepDestino"],
"pesoKg"=>$_POST["pesoKg"],
"maoPropria"=>$_POST["maoPropria"],
"valorDeclarado"=>$_POST["valorDeclarado"],
"avisarRecebimento"=>$_POST["avisarRecebimento"],
"totalPagar"=>$matches[1][7],
);

// Para Debug
echo '<h1>Retorno:</h1>';
echo '<pre><div style="font-size: 15px;">';
print_r($parms);
echo '</div></pre>';
echo '<br/><hr><br/>';
}
?>

<html>
<!-- Layout feito por Carlos Rocha - Todos os direitos dele biggrin.gif -->
<head>
<title>Exemplo de Consulta de Frete</title>
<style type"text/css">
body {
margin: 0;
padding: 30px 50px;
font: 70% Verdana, Arial, sans-serif;
}
h1 {font-size: 140%;}
form {margin: 30px 50px 0;}
form fieldset {
float: left;
padding: 0 20px 10px;
background: #e5e5e5;
border-style: solid;
border-width: 1px 2px 2px 1px;
border-color: #AAA;
}
form legend {
margin-bottom: 15px;
padding: 5px 10px;
background: #F5F5F5;
border-style: solid;
border-width: 1px 2px 2px 1px;
border-color: #AAA;
font-weight: bold;
}
form p {
float: left;
clear: both;
margin: 0;
}
form label {
float: left;
clear: left;
display: block;
width: 120px;
height: 30px;
margin-right: 5px;
padding-top: 3px;
cursor: pointer;
text-align: right;
color: #C00;
}
</style>
</head>
<body>
<h1>Exemplo de Consulta de Frete</h1>
<form action="?action=Submit" method="post">
<fieldset>
<legend>Preencha todos os campos</legend>
<p>
<label for="cepOrigem">Cep de Origem: </label>
<input name="cepOrigem" type="text" id="cepOrigem" size="7" />
</p>
<p>
<label for="cepDestino">Cep de Destino: </label>
<input name="cepDestino" type="text" id="cepDestino" size="7" />
</p>
<p>
<label for="pesoKg">Peso (Kg): </label>
<select name="pesoKg" size="1" id="pesoKg">
<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>
</p>
<p>
<label for="maoPropria">M&atilde;o Propria:</label>
<select name="maoPropria" size="1" id="maoPropria">
<option value="S">Sim</option>
<option value="N" selected>N&atilde;o</option>
</select>
</p>
<p>
<label for="valorDeclarado">Valor Declarado: R$ </label>
<input name="valorDeclarado" type="text" id="valorDeclarado" size="5" />
</p>
<p>
<label for="avisarRecebimento">Avisar Recebimento: </label>
<select name="avisarRecebimento" size="1" id="avisarRecebimento">
<option value="S">Sim</option>
<option value="N" selected>N&atilde;o</option>
</select>
</p>
<p>&nbsp; </p>
<p>
<input type="submit" id="bt-submit" value="Calcular" />
</p>
</fieldset>
</form>
</body>
</html>
?>[/codebox]

Se você olhar na segunda linha a parte:

servico=41017

Ai você declara qual o tipo de serviço que será usado, no caso:

41017 = Encomenda Normal

40010 = Sedex

40290 = Sedex Hoje

40215 = Sedex 10

40045 = Sedex a Cobrar

Para trocar os tipos de Frete você pode usar um menu dropdown (igual no site dos correios), a parte mais difícil já tá ai, agora é só você implementar.

Link para o comentário
Compartilhar em outros sites

  • 0

Mm deixa tentrar ser mais claro,tipo assim...se fosse assim:

"http://www.minhapagina.com.br/calculo/taxa.php?origem=".$_POST['origem']."&destino=".$_POST['cep1'].$_POST['cep2']."&peso=".$peso;...
assim eu enviaria ..e na minha página eu direcionaria ao site do correio,pegando esses valores e transformando em os requisitados em :
url="http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=41017&cepOrigem....

Ainda não sei se fui total claro,...

Link para o comentário
Compartilhar em outros sites

  • 0

Afinal de contas, você não sabe como pegar os dados vindos do site dos correios é isso?

Se você não entendeu a coisa funciona assim:

Essa página envia os dados por POST para ela mesma, a variável $url é formada, ela é o endereço da página dos correios, o script PHP acessa a página dos correios ($return) e lê ela, é formado um array (preg_match_all) com os elementos que estão entre as tags de negrito (<b> </b>) na página que foi lida dos correios... pronto, o array formado vai ser o que você vai ter que tratar, no caso o $matches[1][6] corresponde ao valor do frete lido da página dos correios.

Note que em nenhum momento tem redirecionamento e etc... o próprio PHP lê a página dos correios...

Link para o comentário
Compartilhar em outros sites

  • 0

ESerra em relação aquele assunto de redirecionametoveja me deparei com isso,tentei adptar a consulta direto dos correios e não consegui,veja:

$url = "http://www.minhapagina.com.br/calculo/taxa.php?origem=".$_POST['origem']."&destino=".$_POST['cep']."&peso=".$_POST['peso'];
            $vlr=get_xml($url);
                    
            if (!is_numeric($vlr)) {
                $_SESSION['valor']="";
                unset($_SESSION['valor']);
                $valor=$vlr;
            } else {
                $_SESSION['nome']=$_POST['nome'];
                $_SESSION['endereco']=$_POST['endereco'];
                $_SESSION['forma']=$_POST['forma'];
                $_SESSION['bairro']=$_POST['bairro'];
                $_SESSION['cidade']=$_POST['cidade'];
                $_SESSION['uf']=$_POST['uf'];
                $_SESSION['cep']=$_POST['cep'];
                $_SESSION['valor']=$vlr;
            }
        }

        if (isset($_SESSION['valor']))
            $valor="R$ ".number_format($_SESSION['valor'],2,",","");

minha dúvida é como eu receberia isso em "minhapagina.com.br/calculo/taxa.php" ou então como eu adptaria pra fazer essa consulta nessa mesma página onde tenho esse código,...

Obs: Esse não é o código completo da pag,eu ainda o estou tentando o entender pra depois fazer as modificações que quero,confesso que esta difícil mas...chego lá!

Obrigado!!

Editado por viejoyo
Link para o comentário
Compartilhar em outros sites

  • 0

Será que alguém poderia me dizer porque eu não consigo transformar o "$matches[1][7]" em sessão??

tentei

$_SESSION['valor'] = $matches[1][7];

e também

$frete = $matches[1][7];

$_SESSION['valor'] = number_format($frete, 2,",",".");

e nada..

detalhe ta tudo funcionando,consigo enviar o valor total de compras,os itens e tudo,so o do frete que num vai,porque?

Obrigado!!

Link para o comentário
Compartilhar em outros sites

  • 0

Quando eu penso que ta tudo funcionando ..aparece algo...hehe..será que alguém poderia me dizer porque não to conseguindo somar os centavos??Muito estranho ex se o produto é 300,00 e a taxa 11,50 ele coloca o valor de 311,00 ...veja como estou fazendo..

Primeiro to tirando o "R$" do $matches...

$valor_frete=substr($matches[1][7],2,7);
depois o exibo, nota: tentei exibir de 2 maneiras
1ª = R$ <?=number_format($valor_frete, 2,",",".");?>...ai nunca me aparece os 0,50 cents;
2 = bom então <?=$valor_frete;?>
faço a soma
$valor = ($valor_prod + $valor_frete);
ai o total geral
<?=number_format($valor, 2,",",".");?>

E nunca obtenho o valor correto e já fiz algumas alterações de exibições e nada...se alguém tiver alguma dica ai eu agradeço muito!!

Editado por viejoyo
Link para o comentário
Compartilhar em outros sites

  • 0

Para se somar você deve colocar PONTO em vez de VÍRGULA para os centavos, use o str_replace para substituir a VÍRGULA atual pelo PONTO, ai some os valores e ai use o number_format para deixar o resultado com o aspecto que estamos acostumados...

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz assim:

$strp = str_replace(",", "." ,$total_prod);
$strf = str_replace("," ,"." ,$total_frete); 
$valor_total = ($strp + $strf);

Fiz alguma coisa errada?

Obrigado!!

Já ta resolvido...na verdade o valor do produto eu já estava cadastrando com PONTO ao invés de VÍRGULA,então não necessitava usar str_replace,e sim so o do frete,..muito obrigado pela ajuda mais uma vez!!!

Editado por viejoyo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...