escapework / frete
Library pra cálculo de frete
Installs: 7 823
Dependents: 0
Suggesters: 0
Security: 0
Stars: 51
Watchers: 13
Forks: 17
Open Issues: 2
Requires
- php: >=5.5.0
- guzzlehttp/guzzle: ~5.0|~6.0|~7.0
Requires (Dev)
- phpspec/phpspec: ~2.0
README
Biblioteca PHP que utiliza os webservices dos correios para cálculo de frete, rastreamento de encomendas e busca de endereços através do CEP.
Instalação
Instalação via composer.
$ composer require escapework/frete:"0.5.*"
Calculando preço e prazo
use EscapeWork\Frete\Correios\PrecoPrazo; use EscapeWork\Frete\Correios\Data; use EscapeWork\Frete\FreteException; $frete = new PrecoPrazo(); $frete->setCodigoServico(Data::SEDEX) ->setCodigoEmpresa('Codigo') # opcional ->setSenha('Senha') # opcional ->setCepOrigem('cep de origem') # apenas numeros, sem hifen(-) ->setCepDestino('cep de destino') # apenas numeros, sem hifen(-) ->setComprimento(30) # obrigatorio ->setAltura(30) # obrigatorio ->setLargura(30) # obrigatorio ->setDiametro(30) # obrigatorio ->setPeso(0.5); # obrigatorio try { $result = $frete->calculate(); echo $result['cServico']['Valor']; echo $result['cServico']['PrazoEntrega']; var_dump($result); // debugge o resultado! } catch (FreteException $e) { // trate o erro adequadamente (e não escrevendo na tela) echo $e->getMessage(); echo $e->getCode(); // este código é o código de erro dos correios // pode ser usado pra dar mensagens como CEP inválido para o cliente }
Tipos de frete disponíveis
EscapeWork\Frete\Correios\Data::SEDEX; # sedex EscapeWork\Frete\Correios\Data::SEDEX_A_COBRAR; # sedex a cobrar EscapeWork\Frete\Correios\Data::SEDEX_10; # sedex 10 EscapeWork\Frete\Correios\Data::SEDEX_HOJE; # sedex hoje EscapeWork\Frete\Correios\Data::PAC; # pac
Buscando múltiplos serviços
Também é possível obter um array com vários serviços (Sedex e PAC, por exemplo) utilizando a classe PrecoPrazo
.
$frete = new PrecoPrazo(); $frete->setCodigoServico([Data::SEDEX, Data::PAC]) ... // todo os setters igual a chamada acima try { $results = $frete->calculate(); foreach ($results as $result) { echo $result['cServico']['Valor']; echo $result['cServico']['PrazoEntrega']; var_dump($result); // debugge o resultado! } } catch (FreteException $e) { // trate o erro adequadamente (e não escrevendo na tela) echo $e->getMessage(); }
Calculando para múltiplos produtos
Não existe nenhuma maneira completamente certa de se fazer isso (até onde ser). Eu recomendo usar a raiz cúbica dos produtos somadas para isto. Você pode ver mais informações aqui:
http://www.dothcom.net/blog/comercio-eletronico/calculo-de-frete-com-multiplos-volumes-dos-correios/
Rastreamento de encomendas
Fazendo o rastreio de encomendas online.
use EscapeWork\Frete\Correios\Rastreamento; use EscapeWork\Frete\FreteException; $rastreamento = new Rastreamento; $rastreamento->setUsuario('ECT') ->setSenha('SRO') ->setObjetos('SQ458226057BR'); try { $result = $rastreamento->track(); var_dump($result->delivered()); // se a entrega já foi finalizada (true ou false) var_dump($result->inTransit()); // se o pacote está em transito (true ou false) echo $result['evento']['tipo']; echo $result['evento']['status']; echo $result['evento']['data']; echo $result['evento']['hora']; echo $result['evento']['descricao']; var_dump($result); // debugar, debugar! } catch (FreteException $e) { // trate o erro adequadamente (e não escrevendo na tela) echo $e->getMessage(); }
Buscando múltiplas encomendas
Também é possível buscar múltiplas encomendas com a classe Rastreamento
.
$rastreamento = new Rastreamento; $rastreamento->setUsuario('ECT') ->setSenha('SRO') ->setObjetos(['SQ458226057BR', 'SQ458226057BR']); // passe um array com os objetos try { $results = $rastreamento->track(); foreach ($results as $result) { var_dump($result->delivered()); ... } }
Consulta de CEP pelo webservice dos correios
Você também pode buscar o endereço através de um CEP.
use EscapeWork\Frete\Correios\ConsultaCEP; use EscapeWork\Frete\FreteException; try { $consulta = new ConsultaCEP; $result = $consulta->setCep(93320080) ->find(); # ou, pra facilitar, você pode usar o método # ConsultaCEP::search(93320080) echo $result->bairro; echo $result->cep; echo $result->cidade; echo $result->complemento; echo $result->complemento2; echo $result->end; echo $result->uf; var_dump($result); // debugar, debugar! } catch (FreteException $e) { // trate o erro adequadamente (e não escrevendo na tela) echo $e->getMessage(); }
Testes
Caso queira rodar os testes em seu computador, clone o repositório, execute um composer install --dev
, e depois execute o seguinte comando no terminal:
$ vendor/bin/phpspec run
Referências
Referências utilizadas para o desenvolvimento.
License
See License