Ir para conteúdo

Arquivado

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

Carcleo

[Resolvido] Calculo de Frete correios

Recommended Posts

Ola amigos, estou aqui sofrendo para entender a dinamica de uma loja virtual e agora tem 3 duvidas que preciso tirar antes de prosseuir meu trabalho e gostaria de poder contar a ajuda de voces.

 

1) Peguei um script de calculo de frete (com a URL dos correios) que me retorna valores bem proximos aos do correios.

Segue código:

<?php

/**
* Executa calculo do frete usando webservice dos correios.
* @copyright  Phaneronsoft
* @author Marcelo Korjenioski - faleconosco@phaneronsoft.com
* @see http://www.phaneronsoft.com
* @filesource correios.php
* @version 1.1
*/

#####################################
# Código dos Serviços dos Correios  #
#    FRETE PAC = 41106       #
#    FRETE SEDEX = 40010       #
#    FRETE SEDEX 10 = 40215       #
#    FRETE SEDEX HOJE = 40290    #
#    FRETE E-SEDEX = 81019       #
#    FRETE MALOTE = 44105       #
#    FRETE NORMAL = 41017       #
#   SEDEX A COBRAR = 40045       #
#####################################

// Definindo constantes

// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
define('PESO',2.00);
define('EMBALAGEM',0.00);
// Valor adicional no envio como custo de embalagem.
define('COMPRIMENTO',20);
define('ALTURA',15);
define('LARGURA',20);

if($_POST) {
// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['servico']) {
$cod_servico = $_POST['servico'];
}
// CEP de Origem, em geral o CEP da Loja
$cep_origem = '36855000';
// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário

$cep_destino = $_POST['cep-destino'];

$cep_destino = eregi_replace("([^0-9])","",$cep_destino);

// URL de Consulta dos Correios
$correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico={$cod_servico}&nVlPeso=" . PESO . "&sCepOrigem={$cep_origem}&sCepDestino={$cep_destino}&nCdFormato=1&nVlComprimento=" . COMPRIMENTO . "&nVlAltura=" . ALTURA . "&nVlLargura=" . LARGURA;

// Capta as informações da página dos Correios
$correios_info = file($correios);
// Processa as informações vindas do site dos correios em um Array
foreach($correios_info as $info) {
// Busca a informação do Preço da Postagem
if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) {

$total = $tarifa[1] + EMBALAGEM;
}
if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) {
$PrazoEntrega = $PrazoEntrega[1];
}
}

// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($cod_servico) {
case 41106:
$nome_servico = " PAC ";
break;
case 40010:
$nome_servico = " SEDEX ";
break;
}

// Caso venha valor de resposta é numerio e maior que o custo da embalagem senão ocorreu algum erro na solicitação.
if(is_numeric($total) and ($total > $embalagem)) {
// Quando encontra o valor da postagem, exibe na página formatando em padrão de moeda 10,89
// Caso você não queira formatar basta comentar a linha abaixo que será exibido assim 10.89 e basta executar o comando abaixo
$total = number_format($total,2,',','.');
echo $nome_servico . $total . ' prazo entrega de ' . $PrazoEntrega . ' dia(s) ';
} else {
echo 'Erro ao consultar verifique se CEP esta correto';
}
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="http://demo.phaneronsoft.com/img/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<title>Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
<style type="text/css">

* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
}

body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}

div#wrapper {
margin:auto;
position:relative;
width:450px;
z-index:0;
}

.formMain .select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}

.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}

.formMain label {
display:block;
float:left;
margin-right:4px;
padding-bottom:5px !important;
}

.formMain legend {
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
padding:10px 5px;
}

.formMain .button {
background:#F5EED3;
border:1px solid #CCCCCC;
color:#666666;
cursor:pointer;
font-size:12px;
font-weight:bold;
letter-spacing:1px;
margin:10px 0 0;
overflow:visible;
text-transform:uppercase;
width:100%;
}

.formMain .inline {
margin:15px 0 0 !important;
}

.formMain .text, .formMain .select, .formMain .textarea, .formMain .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}

.formMain fieldset span.nameField {
color:#666666;
text-transform:uppercase;
}

h3 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
}

h3 span {
-x-system-font:none;
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}

#value {
-x-system-font:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}
</style>

</head>
<body>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" class="formMain formSearch wsizep100" onsubmit="submitForm(this); return false;">
<fieldset>
<legend>Filtrar Referência</legend>
<label for="servico" class="wsize015">
<span class="nameField">Envio</span>
<select id="servico" name="servico" title="Serviços dos Correios" class="select" tabindex="1">
<option value="41106">PAC</option>
<option value="40010">SEDEX</option>
</select>
</label>
<label class="wsize010" for="cep-destino">
<span class="nameField">CEP Destino</span>
<input id="cep-destino" class="text" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar" class="wsize010">
<input type="submit" id="pesquisar" name="pesquisar" tabindex="3" class="button inline"  value="Pesquisar" />
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function submitForm(form) {
/*
usa método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
form.request({
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/

if(transport.responseText !=-1)  {
$('value').innerHTML = transport.responseText;
} else {
form.reset();
$('value').innerHTML = 'Erro ao consultar';
}
}
});
return false;
}

</script>
</body>
</html>
<?php
} // fim else

?>

2)No caso do site dos correios falhar, o que é certo fazer? Verificar o erro com um IF e se houver erro, tentar um outro webservice?

Pergunto isso pois não posso impedir que o internauta deixe de efetuar a compra por causa dos correios não retornarem o valor do frete né?

Nesse casom o que fazer?

 

3) No calculo do PAC, é necessario enviar as dimensões da embalagem que vai levar a encomenda até a casa do comprador bem como o peso.

Não é pedido o volume do pacote e sim as dimensões.

A) Essas dimensões precisam de ser enviadas mesmo que a embalagem não seja comprada la nos correios?

B) Quanto às medidas,. deixa eu ver se entendi:

 

No form de cadastro de produtos acrescenta mais 3 campos, (comprimento,altura e largura) para o cliente digitar (ambiente administratio - cadastro de produto da loja virtual) as medidas de cada produto.

Depois, criar um contador de medidas (do jeito que fiz com o peso) para calcular as dimensões provaveis para a embalagem!

É isso?

Se for, será que encontro um codigo desses ai pronto?

 

Então, me ajuda fazer essa conta:

O site que eu administro, vende produtos pequenos de perfumaria e cuidados com a pele (sabonete, shampoo, antimofo)

 

No caso de um sabonete (medidas de cada sabonete)

5cm de comprimento

2cm de largura

1cm de altura

 

No caso de um shampoo (medidas de cada shampoo)

20cm de comprimento

4cm de largura

2cm de altura

 

Dai um cliente no site faz uma compra assim:

20 sabonetes e 10 shampoos.

 

A conta para desobrir as dimensões da embalagem de envio seria como?

Como fazer esse calculo?

 

Voces me explicando isso ai o resto da pra eu me virar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe, consegui dar uma enxugada boa no codigo, inclusive, ele retorna exatamente os mesmos valores do site dos correios.

 

Agora, preciso de ajuda para filtrar prelos erros de cep inserido errado, falha no site dos correios. Nesse caso, redirecionar para outra pagina.

 

Qual o código devo usar para achar esses erros?

 

Tambem preciso achar a cidade, estado, endereço do cep de destino escolhido pelo internauta a partir da resposta dos correios.

 

Como fazer isso?

 

 

Segue o codigo enxuto:

        $nCdEmpresa          = "";
        $sDsSenha            = "";
        $nCdServico          = $_POST['TENVIO'];
        $sCepOrigem          = 36855000;
        $sCepDestino         = $_POST['TCEP'];
		$sCepDestino         = eregi_replace("([^0-9])","",$sCepDestino);
        $nVlPeso             = $peso_medio;
        $nCdFormato          = 1;
        $nVlComprimento      = 20;
        $nVlAltura           = 20;
        $nVlLargura          = 20;
        $nVlDiametro         = 0;
        $sCdMaoPropria       = "S";
        $nVlValorDeclarado   = 0;
        $sCdAvisoRecebimento = "N";
'

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(preg_match("/^[1-9]{5}-[1-9]{3}$/",$_POST['TCEP']) == 0)
{

echo "cep inexistente!";
exit;
}
Assim como ta ele so aceita o cep:

XXXXX-XXX

Sendo todos os X's numeros. Axo q eh assim a estrutura do cep .-.

Se n for assim me avisa q concerto xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

iiiiii

 

foi mau. O crt+v só trouxe um pedaço do codigo.

vai ele todo:

 

Só que eu que queria pegar todos os retornos tipo endereço, UF, cepDestino, tarifa, do rerorno que o correio nos envia.

E tambem fazer assim:

Se der erro, redireciona para outra pagina, se não der erro, prossegue os calculos.

<?php
#####################################
# Código dos Serviços dos Correios  #
#    FRETE PAC = 41106              #
#    FRETE SEDEX = 40010            #
#    FRETE SEDEX 10 = 40215         #
#    FRETE SEDEX HOJE = 40290       #
#    FRETE E-SEDEX = 81019          #
#    FRETE MALOTE = 44105           #
#    FRETE NORMAL = 41017           #
#    SEDEX A COBRAR = 40045         #
#####################################

        $nCdEmpresa          = "";
        $sDsSenha            = "";
        $nCdServico          = $_POST['TENVIO'];
        $sCepOrigem          = 36855000;
        $sCepDestino         = $_POST['TCEP'];
		$sCepDestino         = eregi_replace("([^0-9])","",$sCepDestino);
        $nVlPeso             = $peso_medio;
        $nCdFormato          = 1;
        $nVlComprimento      = 20;
        $nVlAltura           = 20;
        $nVlLargura          = 20;
        $nVlDiametro         = 0;
        $sCdMaoPropria       = "S";
        $nVlValorDeclarado   = 0;
        $sCdAvisoRecebimento = "N";

// URL de Consulta dos Correios
$correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdEmpresa=$nCdEmpresa&sDsSenha=$sDsSenha&nCdServico=$nCdServico&sCepOrigem=$sCepOrigem&sCepDestino=$sCepDestino&nVlPeso=$nVlPeso&nCdFormato=$nCdFormato&nVlComprimento=$nVlComprimento&nVlAltura=$nVlAltura&nVlLargura=$nVlLargura&nVlDiametro=$nVlDiametro&sCdMaoPropria=$sCdMaoPropria&nVlValorDeclarado=$nVlValorDeclarado&sCdAvisoRecebimento=$sCdAvisoRecebimento";



// Capta as informações da página dos Correios
$correios_info = file($correios);
// Processa as informações vindas do site dos correios em um Array
/*
foreach ($correios_info as $line_num => $line) {
echo "Linha #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}
*/
foreach($correios_info as $info) {
// Busca a informação do Preço da Postagem
//////////////////////////////////////////////////////////////////////////////////////////
/// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS////////
//////////////////////////////////////////////////////////////////////////////////////////

if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro)) {
   print $Erro[1];
                                                           }	
if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) {
   $total = floatval(str_replace(',', '.', $tarifa[1]));
                                                         }

if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) {
   $PrazoEntrega = $PrazoEntrega[1];
                                                         }
														 													 
                                }
// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($nCdServico) {
case 41106:
$nome_servico = " PAC ";
break;
case 40010:
$nome_servico = " SEDEX ";
break;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que eu que queria pegar todos os retornos tipo endereço, UF, cepDestino, tarifa, do rerorno que o correio nos envia.

E tambem fazer assim:

Se der erro, redireciona para outra pagina, se não der erro, prossegue os calculos.

Outra coisa é a seginte: Esse url ficou muito tumultuada.

Como eu faria para organizala em linhas? tipo:

 

linhas 1 url + ?,

linha parametro 1 + &,

linha parametro 2 + &,

assim pos diante

 

Na verdade, eu queria a url assim:

 

$correios =
"http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?
StrRetorno=xml&
nCdEmpresa=$nCdEmpresa&
sDsSenha=$sDsSenha&
nCdServico=$nCdServico&
sCepOrigem=$sCepOrigem&
sCepDestino=$sCepDestino&
nVlPeso=$nVlPeso&
nCdFormato=$nCdFormato&
nVlComprimento=$nVlComprimento&
nVlAltura=$nVlAltura&
nVlLargura=$nVlLargura&
nVlDiametro=$nVlDiametro&
sCdMaoPropria=$sCdMaoPropria&
nVlValorDeclarado=$nVlValorDeclarado&
sCdAvisoRecebimento=$sCdAvisoRecebimento
";

O que falta de concatenação para funcionar assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

feche cada linha com aspas e adicione um ponto ao final de cada linha

 

existe também a possibilidade de fazer um echo assim

echo <<<URL
aqui
vem
uma
url
multiline
URL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui assim:


// URL de Consulta dos Correios
$correios  ="http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?";
$correios .="StrRetorno=xml&";
$correios .="nCdEmpresa=$nCdEmpresa&";
$correios .="sDsSenha=$sDsSenha&";
$correios .="nCdServico=$nCdServico&";
$correios .="sCepOrigem=$sCepOrigem&";
$correios .="sCepDestino=$sCepDestino&";
$correios .="nVlPeso=$nVlPeso&";
$correios .="nCdFormato=$nCdFormato&";
$correios .="nVlComprimento=$nVlComprimento&";
$correios .="nVlAltura=$nVlAltura&";
$correios .="nVlLargura=$nVlLargura&";
$correios .="nVlDiametro=$nVlDiametro&";
$correios .="sCdMaoPropria=$sCdMaoPropria&";
$correios .="nVlValorDeclarado=$nVlValorDeclarado&";
$correios .="sCdAvisoRecebimento=$sCdAvisoRecebimento";

Isso ai fechou mas o lance de pegar os endereços na resposta dos correios?

Voce manja?

 

Tipo nessa parte, fazer se o erro vier imprimir o erro e parar, mas, se não vier erro, prosseguir.

 

foreach($correios_info as $info) {
// Busca a informação do Preço da Postagem
//////////////////////////////////////////////////////////////////////////////////////////
/// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS////////
//////////////////////////////////////////////////////////////////////////////////////////

if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro)) {
   print $Erro[1];
                                                           }	
if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) {
   $total = floatval(str_replace(',', '.', $tarifa[1]));
                                                         }

if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) {
   $PrazoEntrega = $PrazoEntrega[1];
                                                         }
														 													 
                                }

Eu fiz assim, mas quando não da erro, ele segue mas não envia o valor do frete:

 

foreach($correios_info as $info) {
// Busca a informação do Preço da Postagem
//////////////////////////////////////////////////////////////////////////////////////////
/// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS////////
//////////////////////////////////////////////////////////////////////////////////////////

if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro) == 0) {
   print $Erro[1]; exit;
                                                           }	
else {
if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) {
   $total = floatval(str_replace(',', '.', $tarifa[1]));
                                                         }

if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) {
   $PrazoEntrega = $PrazoEntrega[1];
                                                         }
}
														 													 
                                }

Compartilhar este post


Link para o post
Compartilhar em outros sites

percebeu que esse endereço retorna uma resposta XML, não??

 

utlilize a livraria simpleXML para tratar os dados recebidos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu irmão.

Mas olha só:

 

Num outro script com a url antiga, eu conseguia resgatar a UFOrigem, UFDestino, Cidade de origem e de destino.

 

E nesse script, não estou conseguindo.

 

Vou postar o codigo aqui, e por favor, veja onde estou errando:

<?php
#####################################
# Código dos Serviços dos Correios  #
#    FRETE PAC = 41106              #
#    FRETE SEDEX = 40010            #
#    FRETE SEDEX 10 = 40215         #
#    FRETE SEDEX HOJE = 40290       #
#    FRETE E-SEDEX = 81019          #
#    FRETE MALOTE = 44105           #
#    FRETE NORMAL = 41017           #
#    SEDEX A COBRAR = 40045         #
#####################################

        $nCdEmpresa          = "";
        $sDsSenha            = "";
        $nCdServico          = $_POST['TENVIO'];
        $sCepOrigem          = 36855000;
        $sCepDestino         = $_POST['TCEP'];
		$sCepDestino         = eregi_replace("([^0-9])","",$sCepDestino);
        $nVlPeso             = $peso_medio;
        $nCdFormato          = 1;
        $nVlComprimento      = 20;
        $nVlAltura           = 20;
        $nVlLargura          = 20;
        $nVlDiametro         = 0;
        $sCdMaoPropria       = "S";
        $nVlValorDeclarado   = 0;
        $sCdAvisoRecebimento = "N";

// URL de Consulta dos Correios entregue à variavel $correios
$correios ="http://shopping.correios.com.br/wbm/shopping/script/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";



// Capta as informações da página dos Correios
$correios_info = file($correios);
// Processa as informações vindas do site dos correios em um Array
  
//Aqui vê os retornos trazidos pelos correios
foreach ($correios_info as $line_num => $line) {
echo "Linha #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}

foreach($correios_info as $info) {
// Busca a informação do Preço da Postagem
//////////////////////////////////////////////////////////////////////////////////////////
/// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS////////
//////////////////////////////////////////////////////////////////////////////////////////

if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro)) {
   print $Erro[1];
                                                           }	
if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) {
   $total = floatval(str_replace(',', '.', $tarifa[1]));
                                                         }

if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) {
   $PrazoEntrega = $PrazoEntrega[1];
                                                         }
														 													 
                                }
// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($nCdServico) {
case 41106:
$nome_servico = " PAC ";
break;
case 40010:
$nome_servico = " SEDEX ";
break;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está errando em manipular um arquivo XML sem tratá-lo como XML

 

exiba a variável $correios e veja como o resultado é um conjunto de informações perfeitamente formatado e com tudo o que você precisa utilizar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok

Print $correios
Retornou:

http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=36855000&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=S&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nCdServico=40010&nVlDiametro=0&StrRetorno=xml 

O que eu preciso (e não estou conseguindo)é, a partir do xml retornado pelos correios e não dos dados que eu enviei pela url, resgatar os valores de

 

Cep Destino

Estado Destino

Cidade Destino

Endereco Destino

 

 

e, tambem é claro

 

As tarifas em separado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, se precisar de mais de uma tarifa, vai precisar fazer mais de uma requisição, uma para cada tipo de entrega.

 

Para 'descobrir' o endereço completo de destino com base no cep, você vai precisar de um banco de dados chamado DNE(Diretório Nacional de Endereços).

É possível adquirir um CD em qualquer agência dos correios (em torno de 12.00) e exportar a base em ACCESS que vem no CD. Também pode comprar versões genéricas do DNE pela internet.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

 

Então quem, disponiliza no site os endereços adquiriu esse CD e adaptou à sua base de dados.

 

Achei que vinha nos retornos do xml.

 

Não é tão necessario assim.

 

Mas, só pra fechar esse post, na url antiga (webservice) dos correios, o retorno vinha com muito mais variaveis.

É isso mesmo ou estou falando bobagem?

 

Tipo

 

url antinga

http://www.correios.com.br/encomendas/precos/calculo.cfm

 

url nova

 

http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

não deu pra ver nos links.. mas acho que toda a informação que você precisa (exceto preço e prazo) você já tem, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não sei qual sua real necessidade de recriar um serviço. Mas pelo que li, eu posso concluir que você está reinventando a roda.

Se é para usar um cálculo aproximado dos correios, existem projetos já prontos

Tem um que eu gosto, que é só inserir a url e ele te retorna um xml.

É só ler o xml e correr pro abraço. Fácil, prático, evita 300 mil linhas de código e você gasta seu tempo livre pensando em assuntos mais produtivos.

 

 

http://frete.w21studio.com/

Grátis e super fácil de implementar. Tem até HELP.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a parte do endereço eu já lhe expliquei como é possível fazer.

 

quanto às tarifas, creio que o ideal é utilizar o primeiro link, então.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

O que eu quiz dizer é que com aquela url .cfm, o xml rertornava os endereços mas a url .apsx não esta retornando (ou não estou sabnendo como)

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.