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.

 

ESTE SCRIPT FOI ATUALIZADO EM 17/10/2011 E ESTÁ FUNCIONANDO CORRETAMENTE !!

11 de junho de 2008
Categoria(s): PHP
Faça sua parte, divulgue o Post !!
  • Twitter
  • Google Buzz
  • Digg
  • Delicious
  • Stumbleupon
  • Technorati
  • Reddit
  • Facebook
  • LinkedIn
  • E-mail
Você pode gostar de ver:
Sobre o Autor
Rodrigo Luis
Trabalho com desenvolvimento WEB há cerca de 10 anos, e com programação em PHP há cerca de 10 anos. Tenho conhecimento em diversas linguagens, mas meu domínio é especifico em PHP, JavaScript, CSS e HTML/XHTML, tenho algum conhecimento em MySQL. Além disso é claro, tenho domínio sobre ferramentas gráficas como Adobe Fireworks e Photoshop, e CorelDRAW. Sou um fã de Tecnologia de tudo que é tipo, seja relacionada a internet ou mesmo a tecnologia de hardware. Minha formação acadêmica é na área de Publicidade e Propaganda.
Exibir Pingbacks/Trackbacks
Comentários (84)
Exibir Comentários
Pingbacks/Trackbacks (0)
  • katyacyllene disse:

    oi ! estou garimpando um código para Sedex já um tempo. e gostei desse . Só uma dúvida como eu coloco , instalo na minha pagina configurado para aparecer um local padronizado para colocar o cep e a quantidade do produto e aparecendo o resultado a baixo ? Como configuro isso na minha página ??
    Eu inseri esse Script na página e só apareceu assim : 10,7010.7 :)

    Poderia me ajudar nisso ?
    Obrigada !!

    domingo, 05 de outubro de 2008 às 3:41
  • Rodrigo Luis disse:

    Olá Katya,
    Esse script é pré-configurado com o CEP do local de origem, então você tem q especificar no campo $cep_destino, o CEP que o usuário preencheu, dai na quantidade de produtos não é inclusa nesse script, aqui você só terá de multiplicar por exemplo o PESO de cada produto, caso seja mais de um, para ter um valor de peso aproximado para especificar, pois como você deve imaginar, o valor do frete varia conforme o peso.
    Quanto ao valor retornado, você deve usar a função do PHP number_format() para usar a separação de , entre os valores, ou então só dar um print no valor que ficará com . separando as casas decimais. No teu caso, você imprimiu os 2 resultados, com formatação de moeda brasileira e sem, no caso ele imprimiu na pagina o valor 10,7010.7 que na verdade é 10,70 formatado e 10.7 valor padrão. Seguindo o script acima, como disse você opta em utilizar o valor formatado que está de exemplo na linha 32 do script, ou não formatado conforma linha 34.

    Espero ter ajudado.

    segunda-feira, 06 de outubro de 2008 às 9:51
  • Bruno_TS. disse:

    Bem, minha dúvida é parecida com a de cima. Se puder me ajudar agradeço muito!
    Fiz tudo do jeito que vc falou. Mas só aparece o valor 12,40.
    Como faço pra colocar meu CEP peso, serviço e o CEP de destino para aparecer o valor correto do frete?
    Fiz uma PG só pra mostrar o valor, estou pegando os valores pelo metodo POST a mas acho que não está dando certo…

    Agradeço!!

    segunda-feira, 06 de outubro de 2008 às 20:28
  • Rodrigo Luis disse:

    Olá Bruno, funciona da seguinte forma, na linha 15 do script especificado o código do serviço nos correios (um pouco mais acima tem em comentário o código de cada serviço), ali você especifica qual o serviço que você quer, Sedex, PAC, etc… Já nas linhas 17 e 19 você especifica os CEPs de destino e origem, e na linha 21 o peso em quilos. Quanto ao método post, você pode usar por exemplo se sua variavel passada por post do CEP de origem for $meu_cep, na linha 17 você deve colocar assim: $cep_origem = $_POST['meu_cep']; que receberá via POST o CEP postado… e assim por diante nas outras variaveis que você me perguntou.

    segunda-feira, 06 de outubro de 2008 às 21:54
  • Bruno_TS. disse:

    Muito obrigo Rodrigo, desculpe minha distração. =]
    Mas deu certo mesmo… Fiz isso que vc falou:

    Deu certinho… Só errei pq coloquei isso antes do
    E nas linhas 17 a 19 eles estavam recebendo outros valores… Pura distração minha… =P
    Muito obrigado pela contribuição…
    Estas de parabéns!

    Há, estou tentando colocar esse sistema em um site Oscommerce… Os bons são pagos e não estou afim de pagar. Só em último caso… =]

    Abraços!!
    Voltarei outras vezes!

    segunda-feira, 06 de outubro de 2008 às 22:01
  • Bruno_TS. disse:

    Uma dúvida que acabou de surgir. Posso saber qual o tempo de entrega do produto? Ou seja informar ao cliente o tempo de entrega determinado pelo Correio?

    Obrigado!!!

    segunda-feira, 06 de outubro de 2008 às 22:37
  • katyacyllene disse:

    O que eu estou dizendo e como colocar para aparecer um campo padronizado para a pessoa que entrar no site se caso interessar, ela irar digitar o seu Cep para obter a sua informação que no caso e o valor que ira aparecer. ou – assim e só um Exemplo : )
    http://i36.tinypic.com/j7tc1s.jpg E só para mostrar a parte para colocar o CEP entendeu ?
    desculpa alguma coisa

    terça-feira, 07 de outubro de 2008 às 2:59
  • Rodrigo Luis disse:

    Bruno, bom, na questão de prazos, esse script não busca essa informação, até porque creio que o site dos correios não forneçam isso, creio que geralmente os sites fazem uma média de dias padrão para diferentes lugares/estados do pais.

    Katya, esse script aqui é um script de calculo de frete, o formulário onde a pessoa vai preencher o CEP, etc… isso você tem que fazer, ele apenas busca a informação do valor no site dos correios conforme as variaveis de CEP, serviço e peso passados para esse script.

    terça-feira, 07 de outubro de 2008 às 8:53
  • katyacyllene disse:

    Ok Rodrigo !! Agora e saber fazer esse bendito formulário :) Você ajudou em muito Brigadão .

    terça-feira, 07 de outubro de 2008 às 17:16
  • 10°

    Rodrigo Luis disse:

    Katya, você só precisa de um formulário simples de postagem do CEP, mas se você tem dificuldades de fazer um formulário ou não souber, faça uma procura no google para achar algum modelo.
    Espero ter ajudado !!

    terça-feira, 07 de outubro de 2008 às 18:03
  • 11°

    cacau disse:

    Ola Rodrigo !! O que eu gostaria de saber e se o código gera esse valor que está no script 10,89 ok
    Eu pergunto como se coloca o valor correto da mercadoria para gerar o valor do frete certo?

    Esse o script que esta ai e para eu copiar direto numa página, (ctrl c e ctrl v) ou enviar para dentro do meu servidor do site esse arquivo “frete_correios.php” que baixei aqui.
    e se for isso enviar para o diretório do site qual e a tag que puxa esse sclipt para a pagina?
    São tantas perguntas rss Já viu que sou leiga né

    domingo, 30 de novembro de 2008 às 20:27
  • 12°

    Rodrigo Luis disse:

    Olá Cacau,
    O valor que o script gera é baseado no site dos correios, calculado pelo tipo de serviço escolhido (sedex, pac, etc), peso da mercadoria, cep de origem e cep de destino.

    Neste exemplo de script, não é necessário colocar o valor da sua mercadoria para gerar o frete, pois como mencionei acima, ele gera o valor do frete conforme os parametros que falei.

    Quanto a copia e colar, sim o script deve funcionar corretamente, exceto em alguns servidores, que não permitem o uso do comando “file” em PHP. Mas creio que deva funcionar corretamente sim em seu servidor, caso não funcione me avise. Quanto ao incluir o arquivo frete_correios.php, creio que deva funcionar, porém como não conheço a lógica de funcionamento desta sua sacola de compras, não posso te afirmar com certeza, mas não custa tentar, faça os testes ai, e veja se funciona.

    segunda-feira, 01 de dezembro de 2008 às 7:14
  • 13°

    cacau disse:

    Ok !! O estranho e se eu tenho uma mercado ria com um valor de Ex : $49,50 como os correios vai saber esse valor ? Se o meu cliente quer saber quanto custará o frete final (valor X peso) o cep do cliente = valor da mercadoria que ele irá pagar. Não sei se entendi errado ou certo e nem sei se estou explicando a minha dúvida correta rss espero que sim :)

    terça-feira, 02 de dezembro de 2008 às 10:29
  • 14°

    Rodrigo Luis disse:

    Olá Cacau, esse script aqui postado apenas faz o calculo de frete, a soma com o valor de seu produto, para gerar um total, etc isso você terá de fazer em seu site, esse script que fiz o artigo, apenas efetua o calculo do valor de frete consultando o site dos Correios informando o CEP de origem e destino, juntamente com o peso do produto(s) em questão. Não sei se você entendeu Cacau, mas esse script apenas calcula o frete.

    terça-feira, 02 de dezembro de 2008 às 12:37
  • 15°

    cacau disse:

    Desculpa a burrice da minha pergunta rsss.. Mais eu entendi sim Brigadão !! E valeu pelo script ele funciona perfeitamente :)

    quarta-feira, 03 de dezembro de 2008 às 23:54
  • 16°

    Rodrigo Santos disse:

    Olá, no site dos correios existe a possibilidade de verificar o valor do frete, porém lá tem a opção e pede também para colocar o valor da mercadoria, conforme o valor da mercadoria é cobrado uma taxa…. como é possível colocar o valor da mercadoria para dar esse valor da taxa?

    segunda-feira, 27 de julho de 2009 às 15:52
    • 17°

      Rodrigo Luis disse:

      Olá Rodrigo, basta você acrescentar o parametro na URL (&valorDeclarado=XXX) que ele envia aos correios, que ele já calcula a taxa e lhe retorna o valor total.

      segunda-feira, 27 de julho de 2009 às 15:59
  • 18°

    Rafael disse:

    Olá Amigos.

    Tentando utilizar um script em PHP para calculo de frete porém tenho dúvida em como utiliza-lo. Quero chamar o script a partir de uma filme (flash) se entrar no site vai perceber onde quero coloca-lo.

    Agradeceria muito a ajuda.

    Obrigado

    Rafael

    terça-feira, 08 de setembro de 2009 às 10:16
  • 19°

    Rodrigo Luis disse:

    Olá Rafael, infelizmente para utilizar ele no Flash eu não tenho conhecimento para lhe ajudar, porém esse script busca um resultado de um XML gerado no site dos Correios, então creio que se você ir em busca de uma forma de ler os dados desse XML pelo flash, conseguirá resolver seu problema.

    terça-feira, 08 de setembro de 2009 às 11:05
  • 20°

    Malachite disse:

    Puta merda… Rodrigão não sei porque você perde tanto tempo com perguntas triviais e idiotas, se a pessoa não sabe nem fazer um form pra que pegar um script de calculo de frete ??? Para com isso….. A única pergunta pertinente foi a 16, o resto tudo pergunta cretina….

    quinta-feira, 17 de setembro de 2009 às 9:25
  • 21°

    Rodrigo Luis disse:

    Olá Malachite, entendo sua colocação, mas nossa função aqui e ajudar o pessoal nas dúvidas, inclusive nestas mais triviais e básicas.

    quinta-feira, 17 de setembro de 2009 às 13:19
  • 22°

    Vitor melo siqueira disse:

    Minha duvida é a seguinte:
    o comprimento, largura e altura interferem no calculo do valor do frete?

    se sim, como colorcar isto no codigo.

    agradeço

    segunda-feira, 21 de setembro de 2009 às 11:18
  • 23°

    Rodrigo Luis disse:

    Olá Vitor, sim no caso do PAC influencia as dimensões do pacote a ser enviado, porém a diferença é minima, em questão de valores, pois o que é mais importante é o peso do item que será enviado.

    segunda-feira, 21 de setembro de 2009 às 12:08
  • 24°

    Dennys Eduardo disse:

    Olá.

    Parabéns pelo artigo. Gostaria de tirar uma dúvida.

    Como eu faço para que um site de vendas (usando o oscommerce) consiga fazer o cálculo de frete… calculando o valor do frete a partir do endereço ou do CEP de cada fabricante… e não do endereço da loja virtual?

    Grato!

    quarta-feira, 30 de setembro de 2009 às 8:45
  • 25°

    Rodrigo Luis disse:

    Olá Dennys, o script é funcional informando o CEP de Origem e Destino, ou seja, para fazer o cálculo do frete como Origem o Fabricante, basta você montar um sistema para isso, onde você cadastra o CEP de cada fabricante, e na hora do cálculo você traz essa informação da sua base de dados por exemplo, e realiza o cálculo.

    quarta-feira, 30 de setembro de 2009 às 9:05
  • 26°

    Marcelo disse:

    Fala Rodrigo!
    Parabéns pelo material, realmente muito bom. Tava procurando a horas e todos estavam dando problema. Esse funcionou direitinho. Adaptei para o que eu precisava e tá funcionando que é uma beleza.
    Fica a dica: ao invés de retornar apenas a tarifa, poderia retornar o array inteiro com a explicação de cada índice. Mais ou menos isso:
    //ARRAY DE RETORNO
    //Índices
    //[5] – Tipo: SEDEX, PAC ETC
    //[6] – Estado origem
    //[7] – Cidade origem
    //[8] – Cep origem
    //[9] – Estado destino
    //[10] – Cidade destino
    //[11] – Cep destino
    //[12] – peso em KG
    //[17] – Tarifa / Preço

    Abraço!

    Marcelo

    quarta-feira, 30 de setembro de 2009 às 18:10
  • 27°

    Rodrigo Luis disse:

    Olá Marcelo, show de bola, que bom que o script foi de bom proveito para você. Quanto a adaptação, valeu pela dica, vou analisar com calma, e quem sabe implemento neste script ai.
    :D

    quarta-feira, 30 de setembro de 2009 às 18:39
  • 28°

    Marcelo disse:

    Rodrigo, eu de novo.
    Seguinte…

    To tentando somar o retorno da tarifa dos correios com uma outra variável. Algo do tipo:
    $soma = 30;
    $frete = $correios_info[17];
    $soma_final = $soma + $frete;

    Mas não consigo realizar essa soma. Tentei forçar a variável “$frete” para double, inteiro, etc, e me retorna 0. Tu tens uma solução para isso??
    Aguardo, abraço,

    Marcelo

    quinta-feira, 08 de outubro de 2009 às 12:00
  • 29°

    Rodrigo Luis disse:

    Olá Marcelo, você já verificou se a formatação do valor que está vindo dos correios não é com (,) virgula, ou algo assim, que possa gerar algum problema na hora de fazer alguma soma, como é o teu caso ai, pois antes de trazer o resultado no meu exemplo eu formato ele para o padrão de moeda nosso aqui, usando o number_format().

    quinta-feira, 08 de outubro de 2009 às 12:34
  • 30°

    Moura disse:

    Olá Rodrigo e outros experts,
    To a horas tentando achar um gadget pra colocar no meu blog que calcule o frete dos correios,
    Fico injuriado, pq eu não sou programador de PHP e vou só no CTRL V e CTRL C pra tentar fazer as coisas, e não acho nada dessa maldita estatal que não é capaz de abrir uma coisa tão simples que é benefício pra ela mesmo, uma simples rotina PHP.
    Peço humildemente ajuda, uma rotina q apenas precise inserir o CEP ORIGEM, CEP DESTINO, PESO e se é SEDEX OU PAC.
    Não sei mais onde procurar.
    Obrigado e abraço a todos.

    domingo, 22 de novembro de 2009 às 19:06
  • 31°

    Ruben disse:

    Bom dia Rodrigo, aqui apresenta o seguinte erro:
    Warning: file(http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=41017&cepOrigem=50710090&cepDestino=04222002&peso=0.2&MaoPropria=N&avisoRecebimento=N&resposta=xml) [function.file]: failed to open stream: HTTP request failed!
    Como corrigir??

    sábado, 28 de novembro de 2009 às 7:39
  • 32°

    Rodrigo Luis disse:

    Olá Ruben, bom dia.
    Possivelmente seu servidor web possui alguma restrição a alguns dos comando que é executado nesta função de calculo de frete. Pelo que vi no erro que você reportou, seu servidor não está permitindo que o script abra e acesse a pagina de resultados no site dos correios.

    segunda-feira, 30 de novembro de 2009 às 7:36
  • 33°

    Alexandre Lopes disse:

    Parabens Rodrigo [da Silva Sauro : brincadeira] Luis…

    Melhor que e mais simpes do que isso somente dois disso… kkkkk

    Simples e funcional…
    Abraços

    terça-feira, 08 de dezembro de 2009 às 12:04
  • 34°

    Diogo disse:

    Não testei o script, mas eu uso um similar e não está mais funcionando o calculo do PAC. Parece que os correios removeu o PAC desse calculo. Já tentei passar as variaveis que agora sao obrigatorias para calcular o pac: o formato, comprimento, largura, altura, mas nada. Se alguem souber de algo, da um toque, farei o mesmo. valeu.

    segunda-feira, 08 de fevereiro de 2010 às 13:50
  • 35°

    Rodrigo Luis disse:

    Olá Diogo, é na verdade os Correios estão dificultando um pouco a nossa vida, mas sempre temos que procurar alternativas, e estou testando uma ferramenta do PagSeguro para cálculo de frete via PAC/Sedex, que na verdade é free, que realiza a consulta no site do PagSeguro que tem sua base de cálculo atualizada pelo base dos Correios, ou seja, não há diferença entre os valores de uma e de outra.
    Vale a pena dar uma conferida no script PHP do cálculo de frete do PagSeguro.

    segunda-feira, 08 de fevereiro de 2010 às 14:49
  • 36°

    Daniel Borges disse:

    Fala Rodrigo, to com a mesma dificuldade do nosso amigo em calcular o PAC, tambem conheço a ferramenta do pag seguro, tentei dar uma vasculhada pra fazer retornar apenas os valores mas nao obitive sucesso. Essa questão de frete já ta uma novela, uma coisa tao simples os correios fazem virar uma confusão. Mas Valew o script, pelo menos o SEDEX ainda funfa. Em caso de sucesso com o pagseguro compartilhe conosco. Abração cara.

    quinta-feira, 11 de fevereiro de 2010 às 22:11
  • 37°

    Tiago Lopes disse:

    Pessoal,
    Eu estava utilizando o módulo do pagseguro até então… Porém o mesmo também parou de funcionar… Entre em contato com o suporte deles e estou esperando uma resposta. Estou atrás de uma solução alternativa também. Se eu encontrar algo posto aqui!
    Abraços

    sexta-feira, 19 de março de 2010 às 11:39
  • 38°

    wanderlei disse:

    Olá, Tenho esta loja e gostaria de saber se vc Faz serviço de adaptação? O Problema é no formulario do Cep, se digitar o cep certo o cauculo é ok direto do correios, mas se digita ex: 00000-000 ele calcula 0,00 e continua a fazer a compra até finalizar e sem cobrar o frete. tem como retornar tbm o endereço e o mesmo ir p/ o form do cadastro? e se tem como ao invés do cálculo pelo site do correios, poderia ser em um arquivo interno no site ou DB. se precisar para analizar te envio o Arquivo.

    sábado, 24 de abril de 2010 às 2:01
  • 39°

    Rodrigo Luis disse:

    Olá Wanderlei, há sim como fazer, basta que você aplique uma validação que pode ser em javascript em cima do campo do CEP, para que ele ao postar deva ser diverente de 000000-000 e não esteja vazio sem nada preenchido.
    Quanto a trazer os dados para o form, após ter consultado o o CEP, é possivel sim, basta você fazer a consulta e postar os dados em seu formulário, mas isso é mais parte de programação e funcionalidade de seu script. Veja com o seu programador essa parte, creio que não seja muito complexo de fazer.

    sábado, 24 de abril de 2010 às 8:59
  • 40°

    Rafael Silva disse:

    Ola Rodrigo Luis! estou desenvolvendo um site de vendas e não consigo instalar a função de calcular frete. Eu gostaria de um sistema e pegasse os valores de peso, cep origem e cep destino no banco de dados e atribuisse o valor do frete na compra do cliente. Quanto vc cobra para desenvolver este sistema para meu site?

    sexta-feira, 21 de maio de 2010 às 10:27
  • 41°

    Miquéias de Souza disse:

    Rodrigo Parabéns por esse tutorial a muito tempo eu estava procurando um código assim
    ja intalei na minha loja e esta tudo belezinha.

    só não conseguifazer o codigo calcular o pac mas o sedex ta belezinha
    parabens…

    domingo, 23 de maio de 2010 às 16:19
  • 42°

    Rodrigo Luis disse:

    Miquéias de Souza, realmente como esse sistema consulta o site dos Correios, e o mesmo está apresentando problemas em relação a consulta do PAC, mas creio que em breve os Correios devem estar solucionando isso e esse script deve passar a voltar a funcionar.

    domingo, 23 de maio de 2010 às 18:42
  • 43°

    Rodrigo Luis disse:

    Rafael Silva, infelizmente não tenho como desenvolver esse tipo de trabalho em virtude de tempo, mas com certeza você pode contratar um programador PHP com um pouco de conhecimento e indicar esse script para implementação em seu site.

    domingo, 23 de maio de 2010 às 18:44
  • 44°

    Cleiton Becker disse:

    Opa,
    Bom esses script foi de grande valia para um trabalhinho de faculdade que estou fazer.
    E desta forma quero compartilhar com vocês o que consegui implementar.

    No site dos correios tem um webservice que calcula os preços e você pode colocar mais algumas informações como parametros. Neste endereço vocês poderam encontrar um manual http://www.correios.com.br/webservices/.

    Bom meu código fechou nisso aqui:

    <?

    // Capta as informaçőes da página dos Correios
    $correios_info = file($urlweb);
    // 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
    preg_match("/\(.*)\/”,$info,$tarifa);
    $valor = $tarifa[0];

    preg_match(“/\(.*)\/”,$info,$tarifa);
    $ValorValorDeclarado = $tarifa[0];

    preg_match(“/\(.*)\/”,$info,$tarifa);
    $PrazoEntrega = $tarifa[0];

    preg_match(“/\(.*)\/”,$info,$tarifa);
    $ValorMaoPropria = $tarifa[0];

    }
    ?>

    Espero ajudar alguém como esse script me ajudou hoje.

    quarta-feira, 09 de junho de 2010 às 10:23
  • 45°

    Cleiton Becker disse:

    Pessoal,

    O forum está cortando uma parte do código, neste caso é a url que efetua a busca no site do correios.

    Dentro do manual que tem no link dos correios es´ta o mesmo.

    Abraço a todos.

    quarta-feira, 09 de junho de 2010 às 10:27
  • 46°

    kelly disse:

    Oi Rodrigo, copiei seu codigo, colei no bloco de notas e coloquei pra rodar, mas na página só aparece pra mim 0,000
    Porque da esse erro?

    quarta-feira, 23 de junho de 2010 às 11:54
  • 47°

    Rodrigo Luis disse:

    Olá Kelly, voce está passando os parametros na função de cálculo corretamente ??

    quarta-feira, 23 de junho de 2010 às 13:19
  • 48°

    Filipe disse:

    rodrigo to com o seguinte problema o correio ta retornando o valor com ##,## (# <- numero)
    exemplo
    frete = 15,60
    valor do produto = 80

    ai eu faço
    $frete= $tarifa[1]; < – valor 15,60
    $valor_produto = $_POST['txtvalorproduto']; < – 80 reais
    $total = $frete + $valor_produto
    o resultado teria que ser 95,60
    ela ta retornando 95,00

    da um help ai
    qualquer operação que eu faça ele da como o frete fose 15 reais mais na verdade e 15,60

    terça-feira, 06 de julho de 2010 às 5:20
  • 49°

    Rodrigo Luis disse:

    Olá Filipe, creio que seu erro seja no caractere de separação do decimal, no caso o PHP usa o ponto (.) para separação de decimais em calculos, e pelo que você demonstrou me parece que você está utilizando virgula (,).
    Teste fazer o seguinte na variavel $frete, use assim str_replace(“,”,”.”,$tarifa[1]). Isso fara a substituição de (,) por (.), mas lembre que o valor de $valor_produto também precisa estar com o separador de casa decimal igual, com o (.).
    Espero ter ajudado.

    terça-feira, 06 de julho de 2010 às 8:50
  • 50°

    Filipe disse:

    Deu certo agora a soma ficou no valor correto, valeu cara me ajudo e muito seu Script está de parabéns :D

    terça-feira, 06 de julho de 2010 às 14:12
  • 51°

    bruno Estevao disse:

    Boa tarde

    Eu tenho um script ja que funciona como o seu, praticamente igual. baixei o seu testei tudo certinho, porém existe um problema.
    Quando se coloca SEDEX ou SEDEX 10, ele calcula certinho, porém, se escolher PAC, ou seja, o código do serviço 41106, o script funciona certinho, mas o site dos correios retorna o seguinte erro:

    -888
    Erro ao calcular a tarifa

    gostaria de saber se alguém já passou por isso também e se alguém sabe a solução para esse problema.

    terça-feira, 20 de julho de 2010 às 12:42
  • 52°

    Lidia disse:

    Olá! Estou montando um blog de vendas e gostaria de colocar o rastreamento do correio e o calculador de frete na pagina do blog.
    Como sou novata nisso e não entendo bem, poderia me passar passo-a-passo como fazer?
    Obrigada

    sexta-feira, 23 de julho de 2010 às 12:38
    • 53°

      Rodrigo Luis disse:

      Olá Lídia,

      Como seu blog é no Blogspot eu não sei ao certo como funcionaria um sistema de cálculo de frete e restreamento, visto que o Blogspot possui algumas restrições, etc.
      O ideal seria você verificar se há algum plugin no painel do Blogspot que permita essa integração com cálculo de frete e rastreamento.

      Espero ter lhe ajudado.

      sexta-feira, 23 de julho de 2010 às 13:50
  • 54°

    bruno Estevao disse:

    Rodrigo, veja minha dúvida por favor e me de uma resposta, por favor.

    Eu tenho um script ja que funciona como o seu, praticamente igual. baixei o seu testei tudo certinho, porém existe um problema.
    Quando se coloca SEDEX ou SEDEX 10, ele calcula certinho, porém, se escolher PAC, ou seja, o código do serviço 41106, o script funciona certinho, mas o site dos correios retorna o seguinte erro:

    -888
    Erro ao calcular a tarifa

    gostaria de saber se alguém já passou por isso também e se alguém sabe a solução para esse problema.

    sexta-feira, 23 de julho de 2010 às 14:34
    • 55°

      Rodrigo Luis disse:

      Olá Bruno,

      Pelo que soube o site dos Correios tem enfrentado esse tipo de problema, me parece que eles estão fazendo algum upgrade no sistema deles, ou algo do tipo que algumas vezes o sistema de cálculo fica instavel.
      Sobre a questão do PAC, recentemente realizei alguns testes e notei que em algumas vezes com o PAC dava erro ao realizar o cálculo, porém isso é algum problema no sistema do site dos Correios.

      Recentemente outro usuário aqui do Blog comentou que os Correios lançaram um Webservice para esse tipo de operação, porém eu ainda não o testei para lhe dar maiores informações, caso queira conferir, segue o link -> http://www.correios.com.br/webservices/

      sexta-feira, 23 de julho de 2010 às 14:55
  • 56°

    Nelson disse:

    Muito bom o sript nao testei, mas ja usei algo parecido, a questao que trago aqui, e porque nao criarmos uma classe “Correios.class.php” ou uma funcao mesmo que receba as variaveis de parametro?
    E tornarmos esse script de simples utilizacao e reuso do codigo.

    Abrass

    domingo, 01 de agosto de 2010 às 15:37
    • 57°

      Rodrigo Luis disse:

      Olá Nelson,
      Se você quiser criar esta classe em PHP e compartilhar conosco e com os uauários do blog aqui, sua contribuição será bem vinda.

      domingo, 01 de agosto de 2010 às 21:20
  • 58°

    Rubens Saad disse:

    Amigão. O site dos correios não está com problemas não. A string de conexão agora é outra e é necessário dois laços. Para conseguir solucionar o problema, entrei no site dos webserviecs dos correios, peguei o webservice atual e o coloquei pra funcionar. Segue ai pra galera: $url = “http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo?nCdEmpresa=&sDsSenha=&nCdServico=$servico&sCepOrigem=$cepOrigem&sCepDestino=$cepDestino&nVlPeso=$peso&nCdFormato=$formato&nVlComprimento=$comprimento&nVlAltura=$altura&nVlLargura=$largura&nCdServico=$servico&nVlDiametro=$diametro&sCdMaoPropria=$maoPropria&nVlValorDeclarado=0&sCdAvisoRecebimento=N”;

    Para o laços:

    $xml = new SimpleXMLElement ( trim( utf8_encode( file_get_contents( $url ) ) ) );

    foreach ( $xml->Servicos as $webs ) {
    foreach ( $webs->cServico as $row ) {

    $output = ‘Valor: ‘ . $row->Valor . ‘‘;
    $output .= ‘Prazo de entrega: ‘ . $row->PrazoEntrega . ‘‘;
    $output .= ‘Valor Mão Própria: ‘ . $row->ValorMaoPropria . ‘‘;
    $output .= ‘Valor Aviso Recebimento: ‘ . $row->ValorAvisoRecebimento . ‘‘;
    $output .= ‘Entrega domiciliar: ‘ . $row->EntregaDomiciliar . ‘‘;
    $output .= ‘Entrega sábado: ‘ . $row->EntregaSabado . ‘‘;

    $output .= ($row->Erro != ’0′) ? ‘ERRO: (‘ . $row->Erro . ‘) ‘ . $row->MsgErro . ‘‘ : NULL;
    }
    }

    return $row->Valor;

    domingo, 05 de setembro de 2010 às 14:37
  • 59°

    Vitor Melo Siqueira disse:

    Como adicionar a este script as dimensões do produto (Comprimento,Altura e Largura)?
    Meu calculo via sedex deu certo porem via PAC deu: Erro ao calcular a tarifa.

    sexta-feira, 10 de setembro de 2010 às 16:02
  • 60°

    Walter Manoxal disse:

    Bom dia, alguém saberia programar, calcular valor gerado por (PHP):

    Valor de CEP (Cliente Origem) até minha residência + R$20.00 + Da minha residência até o CEP destino (Cliente destino), que apareça apenas o resultado, valor total em R$.

    Obrigado.

    terça-feira, 28 de setembro de 2010 às 10:47
    • 61°

      Rodrigo Luis disse:

      Olá Walter,

      Basta você somar o valor do frete com estes R$ 20,00 mencionado, e formatar o número conforme você deseja exibí-lo.

      terça-feira, 28 de setembro de 2010 às 11:01
  • 62°

    Walter Manoxal disse:

    Muito obrigado, retornarei com outra dúvida, no momento esqueci o assunto.. rsrs. E parabéns pelo site!!

    terça-feira, 28 de setembro de 2010 às 11:30
  • 63°

    Vitor Melo Siqueira disse:

    Como adicionar a este script as dimensões do produto (Comprimento,Altura e Largura)?
    Meu calculo via sedex deu certo porem via PAC deu: Erro ao calcular a tarifa

    quarta-feira, 06 de outubro de 2010 às 13:04
  • 64°

    Rodrigo disse:

    Olá Rodrigo.
    Eu utilizo o código abaixo, mas o mesmo parou de funcionar. Você poderia me ajudar com ele e/ou postar um código atualizado pois o seu também não está funcionando? Muito Obrigado.

    //—————————————————————————————————-
    //——————————– FUNÇÃO DE CÁLCULO >>> SEDEX NORMAL ——————————–
    //—————————————————————————————————-

    //——— VARIÁVEIS SEDEX NORMAL ———-//
    //——————————————-//
    $sedexn_servico = 40010;
    $sedexn_cepori = 20530971;
    $sedexn_cepdes = $cep;
    $sedexn_peso = 1;//$quantidade;
    $sedexn_valorD = ”;
    $sedexn_form = ”;
    $sedexn_comp = ”;
    $sedexn_larg = ”;
    $sedexn_alt = ”;
    $sedexn_diameter = ”;
    $sedexn_mpro = ‘N’;
    //utilizar para calcular o seguro de envio
    $sedexn_valdec = ”;//$subtotal;
    $sedexn_arec = ‘N’;
    $sedexn_emba = 116600187;

    //conteudo do Post
    $sedexn_data = “resposta=paginaCorreios&servico={$sedexn_servico}&cepOrigem={$sedexn_cepori}&cepDestino={$sedexn_cepdes}&peso={$sedexn_peso}&valorD={$sedexn_valorD}&Formato={$sedexn_form}&Comprimento={$sedexn_comp}&Largura={$sedexn_larg}&Altura={$sedexn_alt}&Diametro={$sedexn_diameter}&MaoPropia={$sedexn_mpro}&valorDeclarado={$sedexn_valdec}&avisoRecebimento={$sedexn_arec}&embalagem={$sedexn_emba}”;

    //Envia o Post e resgata html de resposta
    $sedexn_html = curl_init(‘http://www.correios.com.br/encomendas/prazo/prazo.cfm‘);
    curl_setopt($sedexn_html, CURLOPT_USERAGENT, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1″);
    curl_setopt($sedexn_html, CURLOPT_TIMEOUT, 30);
    curl_setopt($sedexn_html, CURLOPT_POSTFIELDS, $sedexn_data);
    curl_setopt($sedexn_html, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($sedexn_html, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($sedexn_html, CURLOPT_POST, 1);
    $sedexn_r = curl_exec($sedexn_html);
    curl_close($sedexn_html);

    $sedexn_return = $sedexn_r;

    //tratamento inicial do html
    $sedexn_return = explode(‘‘, $sedexn_return);
    $sedexn_return = $sedexn_return[1];
    $sedexn_return = explode(‘‘, $sedexn_return);
    $sedexn_return = $sedexn_return[0];
    $sedexn_seg1 = explode(”, $sedexn_return);
    $sedexn_seg2 = explode(”, $sedexn_return);

    //RETORNA VALOR TOTAL (FRETE + EMBALAGEM 7)
    $sedexn_frete = explode(”, $sedexn_seg1[3]);
    $sedexn_frete = explode(”, $sedexn_frete[1]);
    $sedexn_frete = substr($sedexn_frete[0], 7);

    //RETORNA PRAZO DE ENTREGA
    $sedexn_prazo = explode(‘‘, $sedexn_seg2[2]);
    $sedexn_prazo = explode(‘
    ‘, $sedexn_prazo[2]);
    $sedexn_prazo = substr($sedexn_prazo[0], 0);
    //——————————— FIM DO CÁLCULO DO SEDEX NORMAL ———————————-
    //—————————————————————————————————-

    quarta-feira, 13 de outubro de 2010 às 18:40
  • 65°

    everton_l disse:

    Rodrigo. Muito legal seu código e muito útil. Implementei ele no site mas não retorna valor quando uso o código para PAC. Só com o PAC está dando problema. Uma outra pergunta, dá pra fazer uso dele usando AJAX? Vlw.

    quinta-feira, 21 de outubro de 2010 às 12:54
    • 66°

      Rodrigo Luis disse:

      Olá Everton,

      Creio que sim, a implementação com o uso do AJAX é possível, entretanto não cheguei a fazer nenhum teste, mas penso que se for programado certinho, não haverá problemas.

      Quanto ao resultado do PAC, outros usuários já reportaram que agora os Correios está exigindo que se passe as dimensões da encomenda para resultar o valor do PAC, e no caso esse script é mais antigo e não passa essa informação.

      quinta-feira, 21 de outubro de 2010 às 13:23
  • 67°

    Daniel disse:

    Não estou conseguindo calcular o valor do PAC, como irei calcular o PAC se não tem os itens comprimento, largura e altura? Aonde inserir estes itens no código? Apenas o Sedex está funcionando, pois este não necessita destes requisitos.

    segunda-feira, 01 de novembro de 2010 às 1:33
    • 68°

      Rodrigo Luis disse:

      Olá Daniel,

      Como você deve ter lido nos outros comentários, esse script é anterior a necessidade destes parametros para calculo do PAC pelo site dos Correios, portanto não há como realizar o cálculo com este script, pelo fato dele estar defasado.

      Estou montando um novo artigo falando de calculo de frete, utilizando o WebService dos Correios. Em breve este material estará no ar. Aguarde.

      segunda-feira, 01 de novembro de 2010 às 9:31
  • 69°

    Ilton Rogério disse:

    Olá Rodrigo, tudo bem?
    Cara coloquei seu código para rodar, mas pra mim só aparece o valor: 0,000
    coloquei o codigo aqui:
    http://www.sputnikbrasil.com.br/frete_correios.php
    Pode me ajudar

    sexta-feira, 14 de janeiro de 2011 às 11:04
    • 70°

      Rodrigo Luis disse:

      Olá Ilton, possivelmente é erro de formatação do número, ai ao realizar uma soma, ou cálculo, ele retorna zero (0).

      sexta-feira, 14 de janeiro de 2011 às 11:08
  • 71°

    fernando disse:

    Cara o meu tbm so da zero configurei de todas as formas e nao deu certo!
    so da 0,0000

    segunda-feira, 14 de fevereiro de 2011 às 15:17
  • 72°

    Vitor Martins disse:

    como eu faço para funcionar este codigo, tem alguma apostila para eu aprender cofigurar e hospedar este codigo, quero usar para calculo de frete no mercado livre, abraço.

    sábado, 26 de março de 2011 às 3:14
  • 73°

    Malachite disse:

    Espero que você esteja ganhando dinheiro com esse blog, principalmente com esse post… Por que para aturar esse bando de perguntas ‘idiotas’, tem que valer a pena mesmo… Ou ser uma espécie de buda ou dalai lama né :P

    quinta-feira, 31 de março de 2011 às 16:22
  • 74°

    Jonatas de Souza disse:

    Boa tarde amigo.
    Inserir o código calculo de frete, não funcionou

    Voce pode ajudar?

    quarta-feira, 10 de agosto de 2011 às 17:28
    • 75°

      Rodrigo Luis disse:

      Olá Jonatas, sim está ocorendo um problemas, mas não é por causa do script, mas sim pelo fato que os Correios alteraram a forma de funcionamento para o cálculo do PAC, e como esse script é de 2008, o mesmo ficou desatualizado.

      Em breve eu estarei postando aqui um novo script funcional.

      quarta-feira, 10 de agosto de 2011 às 19:15
  • 76°

    Samuel Bruno disse:

    Coloquei os Dados, mas não aparece erro nem consigo visualizar o valor do frete.
    qual o código que tenho que por na página pra exibir o resultato?

    por acaspo é

    ou

    me ajudem não sou programador…

    domingo, 21 de agosto de 2011 às 20:07
    • 77°

      Rodrigo Luis disse:

      Olá Samuel,

      Você não conseguiu exibir nenhum dos resultados, nem com Sedex e nem com PAC ??

      No caso do PAC, os Correios alteraram a forma de cálculo, e esse script está desatualizado ainda. Mas via Sedex ele está funcionando corretamente,

      segunda-feira, 22 de agosto de 2011 às 8:02
  • 78°

    Anderson Jv disse:

    Não primeira vez que seus post me ajuda :D

    parabéns por esse belo trabalho.

    sábado, 27 de agosto de 2011 às 14:16
  • 79°

    Roberto disse:

    Olá,

    Usei o php que você colocou para download, mas não retorna nada, é algum problema comigo ou ninguem está conseguindo usar esse código?

    Grato

    sexta-feira, 16 de setembro de 2011 às 13:28
    • 80°

      Rodrigo Luis disse:

      Olá Roberto, como você pode ter visto nos comentários, o script está desatualizado, e o cálculo via PAC não está mais funcionando.

      sexta-feira, 16 de setembro de 2011 às 13:59
  • 81°

    Fernando disse:

    O correio utiliza webservice para esse serviço, para utilizar você devera conter um conhecimento minímo em xml.

    O processo é o seguinte :
    Você monta a url com todos os parametros necessarios (peso,largura…), e eles lhe retornam um xml, então a partir deste xml retornado você faz seus calculos no site e etc..

    Segue o link:
    http://www.correios.com.br/webservices/default.cfm?CFID=22523415&CFTOKEN=17235984&jsessionid=e03072a7ea37eceea1086d6b6225654f95a2

    sexta-feira, 16 de setembro de 2011 às 18:11
  • 82°

    Rodrigo Luis disse:

    Pessoal, a todos que estavam com problemas de uso do antigo script, o mesmo foi atualizado, utilizando como método de cálculo o WebService dos Correios.

    segunda-feira, 17 de outubro de 2011 às 16:51
  • 83°

    Newerton disse:

    Rodrigo, sabe me dizer se o Correios tem um Webservice que retorna o nome da cidade de destino e origem, ou somente a cidade de destino, este do correios retorna em tabela HTML, em XML não tem como?

    quinta-feira, 09 de fevereiro de 2012 às 19:41
  • Este post não possui Pingbacks/Trackbacks

Escreva um Comentário

Blog webARTz: Onde a WEB encontra a ARTE

2008~2012 Blog webARTz // Powered by Wordpress // Hospedado na KingHost // Desenvolvido por: Agência BBD
Fechar
Voltar ao Topo
Atenção !!
Nosso blog passou por grandes mudanças e melhorias na estrutura, recursos e conteúdo.

Estas alterações podem causar dificuldade na navegação, por este motivo alguns bugs e/ou problemas podem ocorrer. Caso isso ocorra pedimos que você nos notifique pelo "Fale Conosco" aqui do blog.

No momento estamos trabalhando para o perfeito funcionamento
do blog.

Obrigado !!
Fechar
Abrir Aviso