Ir para conteúdo

POWERED BY:

Arquivado

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

~TiuTalk~

Cálculo de Preço de Frete em função do Cep

Recommended Posts

Espero que gostem... Qualquer dúvida é só falar!

 

<?php
function calcula_frete($cep_org,$cep_dst,$peso,$mao,$valor,$aviso) {
/*
*********************************************
VARIAVEIS
*********************************************

$CEP_ORG	  - CEP DE ORIGEM
$CEP_DST	   - CEP DE DESTINO
$PESO			- PESO DA ENCOMENDA
$MAO			  - ENTREGA EM MAOS ( DEFINIR (S)- SIM OU (N)-NAO
$VALOR		   - VALOR DECLARADO DO CONTEUDO (FORMATO COM VIRGULA: 10,00)
*/

$url="http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=40010&cepOrigem={$cep_org}&cepDestino={$cep_dst}&peso={$peso}&MaoPropria={$mao}&valorDeclarado={$valor}&avisoRecebimento={$aviso}";
$html = implode("", file($url));
$html = explode('<td  align="center" colspan="2">', $html);
$html = $html[5];
$html = explode("<b>",$html);
$html = $html[1];
$html = explode("</b>",$html);
return str_replace(',', '.', substr($html[0], 3));
}
echo calcula_frete("45810000","22753005","5","N","20,00","N");
?>

Pra quem tem o file com URL desativado no servidor, e precisa usar o CURL:

function calcula_frete($cep_org,$cep_dst,$peso,$mao,$valor,$aviso) {

$url="http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=40010&cepOrigem={$cep_org}&cepDestino={$cep_dst}&peso={$peso}&MaoPropria={$mao}&valorDeclarado={$valor}&avisoRecebimento={$aviso}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec ($ch);
curl_close ($ch);

$html = explode('<td  align="center" colspan="2">', $html);
$html = $html[5];
$html = explode("<b>",$html);
$html = $html[1];
$html = explode("</b>",$html);
return str_replace(',', '.', substr($html[0], 3));
}

Informações importantes:

- O peso deve ser um número inteiro: 2

- O valor deve ser separado por vírgula: 2,00

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá TiuTalk, pois utilizei o Curl porque meu servidor nao aceita via file, pois então demora muito em fazer a conexão e no final não dá resultado nenhum, o que será por favor, estou precisando usar esse script();

att

Ruben

Compartilhar este post


Link para o post
Compartilhar em outros sites

~TiuTalk~, estou tentando utilizar sua function com CURL para o cálculo do frete, mas não estava retornando nada. Então, tentei acessar diretamente a URL que tem nela, e coloquei os parâmetros manualmente para ver o que iria retornar. O resultado foi uma página dos Correios dizendo:

 

SERVIÇO INDISPONÍVEL / SERVICE UNAVAILABLE

 

Infelizmente, estamos com o serviço indisponível no momento. Retorne dentro de alguns instances. Obrigado

Sorry, service unavailable, please could you back in some minutes. Thank you.

 

Se o acesso se deu através de um "link quebrado", por favor, deixe uma mensagem em nosso serviço de Fale com os Correios, informando os endereços da página onde o problema ocorreu e da página anterior, para que possamos corrigi-lo.

 

If you come from a "broken link", please, leave a message by clicking here , and please inform the page you came from and the page you're trying to reach, so we will be able to correct the error.

 

Se preferir volte para nossa Página Principal para continuar navegando em nosso site.

If you prefer, go back to our Home Page to continue navigating on our web site.

Este tópico é recente, portanto creio que eu esteja fazendo algo errado. Os CEPs estão corretos, pois são da minha casa e da casa de um amigo, mas de qualquer forma, estou postando abaixo o código completo:

 

<?php

function calcula_frete($cep_org,$cep_dst,$peso,$mao,$valor,$aviso) {

 

$url="http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=40010&cepOrigem={$cep_org}&cepDestino={$cep_dst}&peso={$peso}&MaoPropria={$mao}&valorDeclarado={$valor}&avisoRecebimento={$aviso}";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

$html = curl_exec ($ch);

curl_close ($ch);

 

$html = explode('<td align="center" colspan="2">', $html);

$html = $html[5];

$html = explode("<b>",$html);

$html = $html[1];

$html = explode("</b>",$html);

return str_replace(',', '.', substr($html[0], 3));

}

echo calcula_frete("17025700","17026740","5","N","20,00","N");

?>

Já verifiquei com meu servidor, e segundo eles, a biblioteca CURL está ativa e pode ser usuada.

Onde será que estou errando? Ou é a página dos Correios que está realmente fora?

Bom, desde já, agradeço sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, hoje de manhã utilizei esse código no desenvolvimento de um site e funcionou perfeitamente... Tente dar um echo na URL gerada, e tente acessá-la (acho que foi isso que você fez), o erro que apareceu, dos correios, pode ser por um momento de manutenção mesmo, isso acontece com sites que tem muitas requisições durante o dia... Talvez se você tentar novamente depois de alguns minutos pode dar tudo certo...

 

Outra coisa que esqueci de falar (e vou editar o tópico principal), o peso deve ser um número inteiro.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade aqui está postando um erro é o seguinte:

file(http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=40010&cepOrigem=50710090&cepDestino=22071000&peso=14&MaoPropria=N&valorDeclarado=20,00&avisoRecebimento=N) [function.file]: failed to open stream: Connection timed out in /home/lognetin/public_html/Lognet/Apresentacao/WEB/compra.php on line 94

Warning: implode() [function.implode]: Bad arguments. in /home/lognetin/public_html/Lognet/Apresentacao/WEB/compra.php on line 94

 

Favor aguardo resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite pessoal...

~TiuTalk~, agora funcionou... pelo menos está retornando resultado.

Creio que o problema era no site dos Correios mesmo.

Muito obrigado, e parabéns pela iniciativa.

 

rmini83, veja se seu servidor suporta a utilização da função file() por URL. No meu caso, por exemplo, eu consegui apenas usando a biblioteca CURL.

 

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que está exibindo esse erro:

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\Arquivos de programas\Apache Group\Apache2\htdocs\cep\cep.php on line 2

 

Parse error: syntax error, unexpected T_STRING in C:\Arquivos de programas\Apache Group\Apache2\htdocs\cep\cep.php on line 2

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiu Talk,

 

Como faço para instalar isso no windows 2000, pois baixei esse versão no site do php:

versão: curl-7.18.2-ssl-sspi-zlib-static-bin-w32 para o php 5.2.3.

 

Exibe esse mensagem

A biblioteca curl não está instalada !

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiu Talk,

 

Como faço para instalar isso no windows 2000, pois baixei esse versão no site do php:

versão: curl-7.18.2-ssl-sspi-zlib-static-bin-w32 para o php 5.2.3.

 

Exibe esse mensagem

A biblioteca curl não está instalada !

 

Um abraço.

 

 

Alissong

 

Talvez isso te ajude! :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom! Será que alguem tem uma solução para todos os tipos de envio, parece que certos

parametros so funciona para o SEDEX 10 e outros para SEDEX comum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui também ta funcionando perfeito. Será que é possível conseguir o prazo de entrega? pelo que eu vi.. eu dei um print_r no arquivo $html e ele exibiu a página dos correios e não tinha a informação do prazo ali..

 

valeu. abraços

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.