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

php avançado

Php Avançado

Conversando com o amigo Diego Hermes, participante do Drupal-BR, pesquisamos sobre profissionais que já haviam utilizado soluções de cálculo de frete e descobri que existe uma url que você acessa e recebe os valores e parâmetros via GET.

 

Logo, desenvolvi uma função bem simples para buscar os valores. Segue abaixo para estudo e utilização.

 

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=–=-=-=-=-=-=-

1. <?php
2.
3. define(‘FRETE_PAC’, ‘41106’);
4. define(‘FRETE_SEDEX’, ‘40010’);
5. define(‘FRETE_SEDEX_10’, ‘40215’);
6. define(‘FRETE_SEDEX_HOJE’, ‘40290’);
7. define(‘FRETE_E_SEDEX’, ‘81019’);
8. define(‘FRETE_MALOTE’, ‘44105’);
9.
10. /**
11. * calcula_frete
12. *
13. * @param mixed $servico
14. * @param mixed $origem CEP da origem
15. * @param mixed $destino CEP do destino
16. * @param mixed $peso Peso em Kg
17. * @access public
18. * @return array
19. */
20. function calcula_frete ($servico, $origem, $destino, $peso) {
21. if (!$sock = fsockopen(‘www.correios.com.br’, 80, $errornro, $error, 60)) {
22. throw new Exception($error, $errornro);
23. }
24.
25. $msg = “GET /encomendas/precos/calculo.cfm?”
26. .”Servico={$servico}&cepOrigem={$origem}&cepDestino={$destino}”
27. .”&peso={$peso}&resposta=localhost HTTP/1.1\n”
28. .”Host: www.correios.com.br\nConnection: Close\n\n”;
29.
30. fwrite($sock, $msg);
31.
32. while (!feof($sock)) {
33. $line = fgets($sock);
34. if (!preg_match(‘/^Location: \w+\?(.*)$/i’,$line, $match)) continue;
35.
36. $data = array();
37. foreach(split(‘&’, $match[1]) as $item) {
38. $t = split(‘=’, $item);
39. $data[$t[0]] = trim($t[1]);
40. }
41.
42. break;
43. }
44. $data[‘Servico’] = urldecode($data[‘Servico’]);
45. $data[‘erro’] = urldecode($data[‘erro’]);
46.
47. return $data;
48. }
49.
50. $result = calcula_frete(FRETE_SEDEX, ‘20512170’, ‘78053378’, ‘2’);
51. var_dump($result);
52.
53.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=–=-=-=-=-=-=-
Bem simples, não é? Agora, $result contém a 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) “”
}

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=–=-=-=-=-=-=-

Autor : Pedro Faria de Miranda Pinto é estudante de Ciência da Computação e vem atuando na área de desenvolvimento web desde 2000 buscando soluções simples e inteligentes. Hoje atua fortemente na comunidade brasileira de Drupal.