CakePHP Component Correios consultar frete

CakePhp, Geral, PHP | 27 Mar 2011

Eaitahh!!!

um tempo fora, de ferias literalmente de tudo…
voltei esse ano bombando com tudo novo, ideias e mais ideias.

bem vamos la!

classe simples para caramba, para facilitar pra rapeize que precisa consultar fretes na criacao de ecommerces.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php

/**
 * Classe que retorna os fretes do webservice dos correios, e endereço pelo CEP
 * @Author Luan Garcia <luan.garcia@gmail.com>
 **/


Class CorreiosComponent  extends Object{
    const PAC = 41106;
    const SEDEX = 40010;
    const SEDEX10 = 40215;
    private $url    = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?';
    private $origem = '';

    public $tipos = array('PAC'=> 41106,'SEDEX'=> 40010,'SEDEX10'=> 40215);

    private $campos = array(
            "nCdEmpresa"            => NULL,//codigo da empresa se tiver afiliacao com os correios
            "sDsSenha"              => NULL, //senha da afiliacao,
            "nCdServico"            => NULL,//servico sedex,sedex10,pac
            "sCepOrigem"            => NULL,//origem do frete
            "sCepDestin"            => NULL,//destino do pedido
            "nVlPeso"               => NULL,//peso do pedido 0.3 para 300 gramas max 30kg
            "nCdFormato"            => 1, //formato do pacote, caixa,envelope etc,
            "nVlComprimento"        => 26, //comprimento do pacote,
            "nVlAltura"             => 16, //altura do pacote,
            "nVlLargura"            => 9, //largura do pacote,
            "nVlDiametro"           => 0, //diametro do pacote,
            "sCdMaoPropria"         => "N",//entregar somente em mao propria
            "nVlValorDeclarado"     => 0,//declarar valor do pedido
            "sCdAvisoRecebimento"   => "N", //aviso de recebimento,
            "StrRetorno"            => "XML"
    );

    /**
     * Seta os valores da origem do frete e url (opicional)
     * @param String $origem cep de origem
     * @param String url dos correios em caso de atualizacao (opcional)
     */

    function __construct($origem = false, $url = false){
        if($origem){
            $this->origem = $origem;
        }
        if($url){
            $this->url = $url;
        }
    }

    /**
     * Retorna o valor e o prazo dos serviços dos correios (PAC,SEDEX e SEDEX10)
     * @param String $cep cep do destino
     * @param Int $peso peso da compra
     * @param Int $servico tipo de entrega (PAC,SEDEX e SEDEX10) se não passar valor retornar todos os meios de entrega;
     * @return Array
     **/

    public function consultarFrete($cep, $peso, $servico = false){
        App::import("Xml");
        $cep = preg_replace("/[^0-9]+/","", $cep);
        $this->campos['nVlPeso']        = $peso;
        $this->campos['sCepDestino']    = $cep;
        $this->campos['sCepOrigem']     = $this->origem;

        if(!$servico){
            foreach($this->tipos as $valor){
                $this->campos['nCdServico'] = $valor;
                $args = http_build_query($this->campos);
                $retorno[] = Set::reverse(new Xml(file_get_contents($this->url . $args)));
            }
        }else{
            if(is_numeric($servico)){
                $this->campos['nCdServico'] = $servico;
            }else{
                $this->campos['nCdServico'] = $this->tipos[strtoupper($servico)];
            }
            $args = http_build_query($this->campos);
            $retorno = Set::reverse(new Xml(file_get_contents($this->url . $args)));
        }

        //se houver erro retorna o metodo retorna false.
       if(isset($retorno['cServico'][0]['Erro'])&&$retorno['cServico'][0]['Erro']!="0"){
            $retorno = false;
        }
        return $retorno;

    }
}

para utilizar a classe fica o seguinte.
Lembrando que retorna um array com o valor e prazo de entrega.

1
2
3
        ...
        print_r($this->Correios->consultarFrete('92325400','0.3','SEDEX'),true);
        ....

Tirem proveito, ha braços!!!

Related posts:

  1. CakePHP Component Braspress Webservice Buenas! O blog depois de quase 8 meses no limbo,...
  2. CakePHP Component Cielo Webservice Olá, estava segurando este post por um tempo, pois estava...
  3. CakePHP validando formulários em Ajax com jQuery Buenas! essa semana ou semana passada não lembro, o ricardo...

Related posts plugin by:Related posts plugin  

Start earning money online in one hour visit:Ways to make money.

Tags: , , ,

4 Comments

« Older Comments
  • Alexandre Ribeiro

    Olá, achei seu post, fui testar, e deu o erro a seguir:

    Retornando:
    Fatal error: Class ‘Object’ not found in C:\wamp\www\testes\sfrete.php on line 40
    —————————————————————————————————-
    conteúdo da linha 40:

    Class CorreiosComponent extends Object{
    —————————————————————————————————-

    • Garcia

      Se vc está executando esse component fora o cakePHP? então tera que realizar algumas alterações no script.
      remover o SET:: e tirar a extensão do object.

Leave a Reply

* - fields are required