CakePHP Component Correios consultar frete
CakePhp, Geral, PHP | 27 Mar 2011Eaitahh!!!
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 |
Tirem proveito, ha braços!!!
Related posts:
- CakePHP Component Braspress Webservice Buenas! O blog depois de quase 8 meses no limbo,...
- CakePHP Component Cielo Webservice Olá, estava segurando este post por um tempo, pois estava...
- 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













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{
—————————————————————————————————-
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.