webARTz - Onde a WEB encontra a ARTE

Cadastre-se no Mercado Livre, clique aqui !!
17 out
PHP: Script para Cálculo de Frete dos Correios (Atualizado)

PHP: Script para Cálculo de Frete dos Correios (Atualizado)

Um dos grandes problemas de quem está pensando em montar uma Loja Virtual (e-Commerce) é o tal do cálculo de frete, isso dava uma dor de cabeça enorme para os desenvolvedores, pois para quase qualquer procedimento de compra online, o frete é vital, e necessita ser calculado e adicionado ao valor total que o cliente irá pagar.

Há algum tempo atrás, o site dos Correios disponibilizou um WebService para cálculo de valores e tarifas de postagem para seus principais serviços, como Sedex e PAC. No momento em que essa ferramenta foi disponibilizada, nos facilitou a vida, pois tínhamos uma forma funcional e com valores corretos para cálculo, e não como se utilizava há tempos atrás com um valor aproximado, muitas vezes maior do que realmente a postagem custava.

Para utilização, precisamos passar alguns parâmetros que são obrigatórios para que o WebService nos dê um retorno bem sucedido, que são o CEP de Origem, que no caso deve ser o da Loja Virtual, o CEP de Destino, que será o da pessoa que está comprando na Loja por exemplo, e o Peso total da encomenda (em Quilos, no caso se o peso for menos que 1Kg, deve se usar “0.3″ por exemplo para representar 300g), juntamente com o Código do Serviço de envio que será utilizado, no caso Sedex, PAC, Sedex 10, etc… Esses códigos dos tipos de serviços estão disponíveis junto no script, além disso é necessário informar as dimensões do pacote, no caso deste script ele já vem com valores de uma embalagem padrão, mas é recomendável que se ajuste conforme o cálculo.

Código dos Serviços
- 41106: PAC
- 40010: SEDEX
- 40045: SEDEX a Cobrar
- 40215: SEDEX 10

Código da Função de Cálculo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function calcula_frete($servico,$CEPorigem,$CEPdestino,$peso,$altura='4',$largura='12',$comprimento='16',$valor='1.00'){
    ////////////////////////////////////////////////
    // Código dos Serviços dos Correios
    // 41106 PAC
    // 40010 SEDEX
    // 40045 SEDEX a Cobrar
    // 40215 SEDEX 10
    ////////////////////////////////////////////////
    // URL do WebService
    $correios = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=".$CEPorigem."&sCepDestino=".$CEPdestino."&nVlPeso=".$peso."&nCdFormato=1&nVlComprimento=".$comprimento."&nVlAltura=".$altura."&nVlLargura=".$largura."&sCdMaoPropria=n&nVlValorDeclarado=".$valor."&sCdAvisoRecebimento=n&nCdServico=".$servico."&nVlDiametro=0&StrRetorno=xml";
    // Carrega o XML de Retorno
    $xml = simplexml_load_file($correios);
    // Verifica se não há erros
    if($xml->cServico->Erro == '0'){
        return $xml->cServico->Valor;
    }else{
        return false;
    }
}
?>

Exemplo de Uso:

1
2
3
<?php
echo calcula_frete('40010','93800000','90200210 ','0.5');
?>

.

Como sempre, eu disponibilizo o arquivo PHP do artigo aqui para Download.

Qualquer dúvida ou sugestão, escreva um comentário.

Categorias:
Destaque PHP

Comentários (10)

Trackbacks/Pingbacks (0)

  • Jonatas de Souza escreveu:

    Responder

    Bom dia, tudo bem? veja se pode me ajudar.

    Porque nos campos abaixo não aceita Post ou GET

    Qual o nome do resulta em php tipo
    Abraços

    quinta-feira, 20 de outubro de 2011 às 11:04 www.nonimar.com
    • Rodrigo Luis escreveu:

      Olá Jonatas,
      Pode repetir sua pergunta ?? Pois não veio campos no seu comentário.

      quinta-feira, 20 de outubro de 2011 às 11:13 www.webartz.com.br
  • Jonatas de Souza escreveu:

    Responder

    Bom dia, tudo bem? veja se pode me ajudar.

    Porque nos campos abaixo não aceita Post ou GET

    echo calcula_frete(’40010′,’93800000′,’90200210 ‘,’0.5′);

    Qual o nome do resulta em php tipo
    echo $frete

    Abraços

    quinta-feira, 20 de outubro de 2011 às 11:16 www.nonimar.com
    • Rodrigo Luis escreveu:

      Olá Jonatas,
      Ele aceita sim, tanto POST quanto GET, talvez a forma com que você está declarando eles na hora de fazer o uso da função “calcula_frete” que está errado.
      O ideal neste caso é antes da função você declarar uma variável com o valor deste GET ou POST, exemplo abaixo:
      $cep_origem = $_GET['cep1'];
      $cep_destino = $_GET['cep2'];

      calcula_frete(’40010′,$cep_origem,$cep_destino,’0.5′);

      Teste ai por gentileza.

      quinta-feira, 20 de outubro de 2011 às 11:29 www.webartz.com.br
  • Atanaildo escreveu:

    Responder

    Olá bom dia.
    Primeira mente muito obg pelo post, estive procurando isso por muito tempo.

    bom o codigo funciona se eu pegar a url q ele gera e colar no navegador, ou seja ele me retorna os valores. Mas quando eu coloco no script php ele me retorna esses erros.

    Warning: simplexml_load_file(http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?
    nCdEmpresa=&sDsSenha=&sCepOrigem=93800000&sCepDestino=90200210%20&nVlPeso=0.5&
    nCdFormato=1&nVlComprimento=16&nVlAltura=4&nVlLargura=12&sCdMaoPropria=n&
    nVlValorDeclarado=1.00&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml) [function.simplexml-load-file]: failed to open stream: Uma operação de soquete foi tentada em uma rede inacessível. in D:DropboxNotebook atanaildolojaadminpaginascadastrarprodutos.php on line 21

    Notice: Trying to get property of non-object in D:DropboxNotebook atanaildolojaadminpaginascadastrarprodutos.php on line 23

    Você poderia me informa oq pode está acontecendo??

    segunda-feira, 24 de outubro de 2011 às 9:12
    • Rodrigo Luis escreveu:

      Olá Atanaildo,
      Verifique seu phpinfo() e php.ini, pois pode ser que você não está conseguindo rodar o comenado “simplexml_load_file”.

      segunda-feira, 24 de outubro de 2011 às 19:13 www.webartz.com.br
  • Atanaildo escreveu:

    Responder

    Boa tarde,
    Rodrigo eu vi seu comentario a resolvi enviar a pagina para o meu servidor e nele funciono perfeitamente oq q quer dizer q o problema está no meu wamp q ñ está rodando o comando como vc falo. Eu já tentei de tudo para mudar e fazer funcinar mais não consigo se vc tiver uma dica de como posso fazer para funcionar eu agradeço.

    Obg, vlw msm

    terça-feira, 25 de outubro de 2011 às 15:21
    • Rodrigo Luis escreveu:

      Olá Aranaildo,
      Como o uso do XML necessita o carregamento de algumas bibliotecas no PHP, seria ideal você procurar no Google qual a biblioteca necessária para rodar o “simplexml_load_file” no Wamp, possivelmente você terá de fazer ajustes no arquivo “php.ini” do Wamp.

      terça-feira, 25 de outubro de 2011 às 15:39 www.webartz.com.br
  • Atanaildo escreveu:

    Responder

    Rodrigo mais uma vez obg pelas informações eu testei um script aqui com um xml ma mesma pasta em q o arquivo php com o script está e funciono srsrsrs bom já não sei mais oq fazer mais vou dá uma googada um pouco mais aqui se achar a resposta posto aqui talvez mais pessoas possam ter esse msm problema com o wamp.

    vlw

    terça-feira, 25 de outubro de 2011 às 17:07
  • 10ºClaudio escreveu:

    Responder

    Muito útil…obrigado.

    terça-feira, 20 de dezembro de 2011 às 10:50 www.londrinaacompanhantes.com
  • Este post ainda não possui Pingbacks ou Trackbacks

Faça seu Comentário

webARTz - Onde a WEB encontra a ARTE

Free Page Rank Tool Visitantes Online Server Monitor Spam Poison Creative Commons License
Contribuindo na Web desde Março de 2008| Powered by Wordpress.org| Hospedado na KingHost| Fundado por Rodrigo Luis e Anderson Backes
Voltar ao Topo