Dev (Back & Front)ARTIGO

Behavior com métodos dos Correios

Após criar o plugin para validações de itens brasileiros, duas funçõezinhas para verificar itens dos Correios. O código está junto do projeto Cake PT-BR, no GitHub (http://github.com/jrbasso/cake_ptbr/tree/master).

Similar ao Behavior de Validação, as funções dos Correios foram colocadas dentro de um Behavior. O nome dele é Correios (sugestivo 🙂 ). Nesse behavior há dois métodos:

valorFrete

Calcula o valor do frete. Parâmetros:

  • servico: define o tipo de serviço que será feito. Os valores válidos são através das constantes: CORREIOS_SEDEX, CORREIOS_SEDEX_A_COBRAR, CORREIOS_SEDEX_10, CORREIOS_SEDEX_HOJE, CORREIOS_E_SEDEX, CORREIOS_ENCOMENDA_NORMAL, CORREIOS_PAC.
  • cepOrigem: Cep de origem no formato XXXXX-XXX.
  • cepDestino: Cep de destino no formato XXXXX-XXX.
  • peso: Peso, em quilos, do item a ser transportado. O valor deve ser um número e não deve ultrapassar 30.
  • maoPropria:(opcional. Padrão falso) Valor booleano para indicar se o transporte é com mão própria.
  • valorDeclarado: (opcional. Padrão 0.00) Valor do item a ser transportado.
  • avisoRecebimento: (opcional. Padrão falso) Cálculo com aviso de recebimento.

O retorno será negativo em caso de erro, que podem ser as constantes:

  • ERRO_CORREIOS_PARAMETROS_INVALIDOS: Um ou mais parâmetros com formato ou conteúdo inválido.
  • ERRO_CORREIOS_EXCESSO_PESO: Peso acima do limite (30 Kg).
  • ERRO_CORREIOS_FALHA_COMUNICACAO: Problema de comunicação com o site dos Correios.
  • ERRO_CORREIOS_CONTEUDO_INVALIDO: O conteúdo retornado pelo Correios não é o esperado.

Em caso de sucesso, será retornado um array com os seguintes índices:

  • ufOrigem: UF da Origem
  • ufDestino: UF do Destino
  • capitalOrigem: Valor booleano indicando se a origem é considerada capital
  • capitalDestino: Valor booleano indicando se o destino é considerado capital
  • valorMaoPropria: Valor, em reais, da mão própria
  • valorTarifaValorDeclarado: Valor da tarifa pelo valor declarado
  • valorFrete: Valor apenas do frete, sem incluir os valores de mão própria e tarifa do valor declarado
  • valorTotal: Soma de todos os valores anteriores

endereco

Informa o endereço baseado em algum CEP. O único parâmetro é o CEP no formato XXXXX-XXX. Os valores de retorno podem ser as constantes ERRO_CORREIOS_PARAMETROS_INVALIDOS, ERRO_CORREIOS_FALHA_COMUNICACAO ou ERRO_CORREIOS_CONTEUDO_INVALIDO em caso de erro. Em caso de sucesso, o retorno será um array com os índices logradouro, bairro, cidade e uf.

Bem, agora vamos aos códigos. Um exemplo usando o behavior:

class Correios extends AppModel {<br />    var $name = 'Correios';<br />    var $useTable = false;<br />    var $actsAs = array('CakeBr.Correios');<br /> <br />    function frete($cepDestino) {<br />        // Supondo que é uma loja que transporta produtos pequenos (até 1Kg)<br />        return $this->valorFrete(CORREIOS_SEDEX, Configure::read('Loja.CEP'), $cepDestino, 1.0);<br />    }<br />}<br /> <br />// Outro caso<br />class Endereco extends AppModel {<br />    var $name = 'Endereco';<br />    var $actsAs = array('CakeBr.Correios');<br /> <br />    function beforeSave($options) {<br />        $endereco = $this->endereco($this->data['Endereco']['CEP']);<br />        if ($endereco < 0) {<br />            return false;<br />        }<br />   <br />    $this->data['Endereco'] =<br />array_merge($this->data['Endereco'], $endereco); // Aqui serão<br />incluídas as informações de logradouro, bairro, cidade e uf.<br />    }<br />}

Qualquer dúvida estamos aí!

é analista de sistemas e programador, graduado em Ciência da Computação pela Universidade do Estado de Santa Catarina (UDESC). Trabalha com as linguagens PHP (com grande conhecimento no framework CakePHP), XHTML/CSS/JS, C/C++ (desenvolvimento de aplicativos para Windows com MFC), Objective-C (com foco no desenvolvimento para iPhone) e sempre busca desenvolver baseado em design-patterns. Atualmente trabalha na empresa Dígitro Tecnologia, em Florianópolis.

Ver perfil