Jump to content
Fórum Script Brasil
  • 0

(Resolvido) frete em php


quattro

Question

:blink:

alguém poderia me ajudar com esse codigo, não consigo printar o valor na tela do carrinho, quando fecho os colchetes depois do "echo $resultado" da valor indefinido, se não fechar da o erro

/////////////////////////////////////////////////////////////

R$ 0,00 Total com frete R$

Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 32

Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 33

193,90

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$cod_servico = 40010;

$cep_origem = "05046000";

$cep_destino = $_POST['cepDestino'];

$peso = $_POST['peso'];

$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=.$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";

$correios_info = file($correios);

foreach($correios_info as $info){

if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){

$frete = $tarifa[1];

}

}

$troca_isso = array(',');

$por_isso = array('.');

$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST['semFrete]);

$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));

$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');

echo $resultado;

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

O erro informado diz que a variável não está definida, logo, o preg_match não está achando nada no retorno dos correios, verifique se está retornando algo e dentro do padrão de ER que você postou.

Link to comment
Share on other sites

  • 0
O erro informado diz que a variável não está definida, logo, o preg_match não está achando nada no retorno dos correios, verifique se está retornando algo e dentro do padrão de ER que você postou.

desculpe minha ignoraca ESerra, não sou muito avançado em php, pode me fizer como posso fazer isso.

Link to comment
Share on other sites

  • 0
  • 0
  • 0
Se você tentar acessar o endereço que passou vai ver que ele nem é encontrado... ai está o problema.

É provável que esta seja uma das URLs antigas, aqui você pode pegar o manual dos correios que tem os dados atuais do webservice.

na verdade a url tem que pegar os dados, estou tentando achar o erro no preg_match, pois as informações passam nas demais funções só que o calculo para ali...vou postar pra você ver...

........................................................

$correios_info = file($correios);

foreach($correios_info as $info){

if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){

$frete = $tarifa[1];

}

}

.......................................................

dei um echo na $correios e ele captou os dados via form..e parou ai na linha de cima

Link to comment
Share on other sites

  • 0
A questão é que URL em que você está tentando pegar os dados está errada... se você pegar aquela linha da URL e colar no nevegador deveria ver um XML com os dados do frete e no lugar disto está retornando um XML.

acho que ta cruzado a duvida...rs..veja

/////capta as info via post do meu carrinho

$cep_origem = "05046000";

$cep_destino = $_POST[cepDestino];

$peso = $_POST[peso];

////passa pela url dos correios

$correios = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=".$cep_origem."&sCepDestino=".$cep_destino."&nVlPeso=".$peso."&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml ";

////

veja que ele pegou os dados

//ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml

////

//// o problema esta aqui ele não ta calculando para o retorno do meu arquivo

$xml = file($correios);

foreach($xml as $info){

if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){

$frete = number_format($tarifa[1],2,',','.');

}

}

$troca_isso = array(',');

$por_isso = array('.');

$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST[semFrete]);

$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));

$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');

echo $resultado;

//////

então ele volta pro meu carrinho com a resposta em js

/////////////////

<script language="javascript" type="text/javascript">

$(document).ready(function(){

$('.buscaValorFrete').click(function(){

$('.vlrComFrete').html('<img src="images/spinner20.gif"/>');

$('.vlrFrete').html('<img src="images/spinner20.gif"/>');

if($('input[name=cep]').val() != ''){

var semofrete = "<?php echo $semfrete; ?>";

var peso_produtos = "<?php echo $totalpeso; ?>";

$.ajax({

url:'frete.php',

cache:false,

type:'POST',

data:'cepDestino='+$('input[name=cep]').val()+'&peso='+peso_produtos+'&semFrete='+semofrete,

success:function(data){

var v = data.split('-');

$('.vlrComFrete').html('R$ '+v[0]);

$('.vlrFrete').html('R$ '+v[1]);

}

});

}

});

});

</script>

//////////

o resultado que ele me da é

193,00(vlrComFrete) - 00,00(vlrFrete)

teria que ser por ex:

203,00 (vlrComFrete) - 10,00 (vlrFrete)

///////////////////////

A questão é que URL em que você está tentando pegar os dados está errada... se você pegar aquela linha da URL e colar no nevegador deveria ver um XML com os dados do frete e no lugar disto está retornando um XML.

acho que ta cruzado a duvida...rs..veja

/////capta as info via post do meu carrinho

$cep_origem = "05046000";

$cep_destino = $_POST[cepDestino];

$peso = $_POST[peso];

////passa pela url dos correios

$correios = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=".$cep_origem."&sCepDestino=".$cep_destino."&nVlPeso=".$peso."&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml ";

////

veja que ele pegou os dados

//ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml

////

//// o problema esta aqui ele não ta calculando para o retorno do meu arquivo

$xml = file($correios);

foreach($xml as $info){

if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){

$frete = number_format($tarifa[1],2,',','.');

}

}

$troca_isso = array(',');

$por_isso = array('.');

$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST[semFrete]);

$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));

$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');

echo $resultado;

//////

então ele volta pro meu carrinho com a resposta em js

/////////////////

&lt;script language="javascript" type="text/javascript">

$(document).ready(function(){

$('.buscaValorFrete').click(function(){

$('.vlrComFrete').html('<img src="images/spinner20.gif"/>');

$('.vlrFrete').html('<img src="images/spinner20.gif"/>');

if($('input[name=cep]').val() != ''){

var semofrete = "<?php echo $semfrete; ?>";

var peso_produtos = "<?php echo $totalpeso; ?>";

$.ajax({

url:'frete.php',

cache:false,

type:'POST',

data:'cepDestino='+$('input[name=cep]').val()+'&peso='+peso_produtos+'&semFrete='+semofrete,

success:function(data){

var v = data.split('-');

$('.vlrComFrete').html('R$ '+v[0]);

$('.vlrFrete').html('R$ '+v[1]);

}

});

}

});

});

</script>

//////////

o resultado que ele me da é

193,00(vlrComFrete) - 00,00(vlrFrete)

teria que ser por ex:

203,00 (vlrComFrete) - 10,00 (vlrFrete)

///////////////////////

Link to comment
Share on other sites

  • 0
A sua expressão regular:

if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){

está procurando por preco_posta, mas o valor do frete está em Valor.

seria

foreach($xml as $info){

if(preg_match('/\ (.*)\<\/valor>;/',$info,$tarifa)){

$frete = number_format($tarifa[1],2,',','.');

}

}

mas o print vem ainda assim

R$ 0,00http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&StrRetorno=xml (*aparece porque dei um echo no $correios)

Link to comment
Share on other sites

  • 0

Olhei aqui e o retorno dos correios está informando: O comprimento não pode ser inferior a 18 cm.

Você vai ter que informar as dimensões (largura, comprimento, altura) conforme consta no manual que passei lá em cima.

EDIT: não sei se ainda função, mas postei no meu blog a alguma tempo atrás uma função que retornava o valor correto:

http://www.edgarserra.com/15/funcao-para-c...-atualizado.jsp

Link to comment
Share on other sites

  • 0
Olhei aqui e o retorno dos correios está informando: O comprimento não pode ser inferior a 18 cm.

Você vai ter que informar as dimensões (largura, comprimento, altura) conforme consta no manual que passei lá em cima.

EDIT: não sei se ainda função, mas postei no meu blog a alguma tempo atrás uma função que retornava o valor correto:

http://www.edgarserra.com/15/funcao-para-c...-atualizado.jsp

tentei de outra forma, so não consigo concatenar o resultado xml com o php pra retornar pro carrinho

//////////////////////

//PEGAMOS OS DADOS DE RETORNO XML COM O SIMPLEXML DO PHP

$dados_correios = simplexml_load_file($URLcorreios);

$total1 = $dados_correios->xpath('cServico/Valor');

$total1 = floatval(str_replace(',', '.', $total1[0]));

$total1 = $total1 + 2.00;

$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($total1, 2, ',', '.');

$frete = $resposta[valor];

$vlrSemFrete = $_POST['semFrete'];

$vlrComFrete = (number_format($vlrSemFrete+$frete, 2,',','.'));

$resultado = $vlrComFrete;

echo $resultado;

echo $correios;

//////////////////

da valor undefined no frete

mas o total ele pega e ainda soma com o 2 que coloquei

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...