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

(Resolvido) frete em php


quattro

Pergunta

: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 para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...