Função para cálculo de frete dos correios

Tagged:  •    •  

Trocando uma idéia com Diego Hermes (um camarada lá do fórum drupal-br) resolvi pesquisar se alguém já havia feito isso e descobri que existe uma url que você acessa e recebe os valores e parâmetros via GET.

Então eu resolvi fazer uma função BEEEEEEEEEM SIMPLES que pega os valores.

<?php

define
('FRETE_PAC',        '41106');
define('FRETE_SEDEX',      '40010');
define('FRETE_SEDEX_10',   '40215');
define('FRETE_SEDEX_HOJE', '40290');
define('FRETE_E_SEDEX',    '81019');
define('FRETE_MALOTE',     '44105');

/**
* calcula_frete

* @param mixed $servico
* @param mixed $origem CEP da origem
* @param mixed $destino CEP do destino
* @param mixed $peso Peso em Kg
* @access public
* @return array
*/
function calcula_frete ($servico, $origem, $destino, $peso) {
  if (!
$sock = fsockopen('www.correios.com.br', 80, $errornro, $error, 60)) {
    throw new
Exception($error, $errornro);
  }
   
 
$msg = "GET /encomendas/precos/calculo.cfm?"
       
."Servico={$servico}&cepOrigem={$origem}&cepDestino={$destino}"
       
."&peso={$peso}&resposta=localhost HTTP/1.1\n"
       
."Host: www.correios.com.br\nConnection: Close\n\n";

 
fwrite($sock, $msg);

  while (!
feof($sock)) {
   
$line = fgets($sock);
    if (!
preg_match('/^Location: \w+\?(.*)$/',$line, $match)) continue;
 
   
$data = array();
    foreach(
split('&', $match[1]) as $item) {
     
$t = split('=', $item);
     
$data[$t[0]] = trim($t[1]);
    }

    break;
  }
 
$data['Servico'] = urldecode($data['Servico']);
 
$data['erro'] = urldecode($data['erro']);

  return
$data;
}

$result = calcula_frete(FRETE_SEDEX, '20512170', '78053378', '2');
var_dump($result);

?>

Bem simples né? agora, $result contém o seguinte estrutura:

array(13) {
  ["Servico"]=>
  string(5) "SEDEX"
  ["cepOrigem"]=>
  string(8) "20512170"
  ["cepDestino"]=>
  string(8) "78053378"
  ["UFOrigem"]=>
  string(2) "RJ"
  ["LocalOrigem"]=>
  string(7) "Capital"
  ["UFdestino"]=>
  string(2) "MT"
  ["LocalDestino"]=>
  string(7) "Capital"
  ["Peso"]=>
  string(1) "1"
  ["MaoPropria"]=>
  string(1) "0"
  ["AvisoRecebimento"]=>
  string(1) "0"
  ["valorDeclarado"]=>
  string(1) "0"
  ["Tarifa"]=>
  string(4) "27.5"
  ["erro"]=>
  string(0) ""
}

Espero que seja util para alguém e se você criar algo mais elaborado, me avisa que eu posto aqui!

T+

Média
(1 vote)

Enviar novo comentário

O conteúdo deste campo é privado não será exibido publicamente.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <pre> <br>
  • Linhas e parágrafos quebram automaticamente.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

Mais informações sobre opções de formatação

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
5 + 5 =
Resolva este simples problema de matemática e digite o resultado. Por exemplo para 1+3, digite 4 e não 5.