Consultar Frete ** RESOLVIDO **

Pessoal tenho o seguinte código para calcular o frete

[code]// 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(!empty({TipoEntrega})){
// Código do Serviço que deseja calcular, veja tabela acima:

$cod_servico = {TipoEntrega};

// CEP de Origem, em geral o CEP da Loja
$cep_origem = ‘13060-854’;

// CEP de Destino
$cep_destino = {CEP};
$cep_destino = preg_replace("/([^0-9])/i","",$cep_destino);

// URL de Consulta dos Correios
$correios = “http://ws.correios.com.br/calculador/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 estamos usando apenas PAC e SEDEX. Caso seja necessário, utilize outras opções.
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’;
}[/code]

Depois de digitar os dados de Tipo de entrega e cep e clicar no botão calcular exemplo o SC me retorna o seguinte erro:

Meu echo: Erro ao consultar verifique se CEP esta correto

ERRO
file(http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico={ 41106}&nVlPeso=2&sCepOrigem={ 13060-854}&sCepDestino={ 05886610}&nCdFormato=1&nVlComprimento=20&nVlAltura=15&nVlLargura=20) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
Invalid argument supplied for foreach()
Undefined variable: total

Mais fazendo um teste criando os arquivos na unha. um form em html chamando o arquivo php e retornando o valor da certo.

Alguém pode me ajudar descobrir o motivo do erro por favor?

isso aqui não pode ser problema?

{$cod_servico}

tente escapar as chaves:

\{$cod_servico\}

fiz um teste aqui e retornou ok:

http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico=40010&nVlPeso=1&sCepOrigem=09851000&sCepDestino=09851395&nCdFormato=1&nVlComprimento=16&nVlAltura=10&nVlLargura=11

o problema está na sua substituição de strings, da um echo $correios e cola o resultado aqui.

Entendi.

Da a seguinte mensagem

http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico={ 41106}&nVlPeso=2&sCepOrigem={ 13060-854}&sCepDestino={ 05886610}&nCdFormato=1&nVlComprimento=20&nVlAltura=15&nVlLargura=20

Vlw Haroldo.

Consegui aqui.

Retirei as {}

e funciono perfeitamente.

Olha só:

$correios = “http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico=$cod_servico&nVlPeso=".PESO."&sCepOrigem=$cep_origem&sCepDestino=$cep_destino&nCdFormato=1&nVlComprimento=".COMPRIMENTO."&nVlAltura=".ALTURA."&nVlLargura=”.LARGURA;

Resultado: PAC 12,00 prazo entrega de 3 dia(s)

O site dos correios costuma sair do ar e te deixar nas mão na hora de calcular o frete.
Cria uma conta no pagseguro e use este guia para adaptar ao seu aplicativo.
https://pagseguro.uol.com.br/v2/guia-de-integracao/frete.html
Assim, sua aplicação faz a consulta no webservice dos correios, se ele sair do ar, sua aplicação parte automaticamente para consultar o frete pelo pagseguro.
E pega as informações de retorno do pagseguro que te interessa, no caso o Frete.

O cara obrigado pela dica.

Vou mudar para PagSeguro então. Dei uma pesquisada na net o pessoal fala mal mesmo.

Grato!