Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Repository files navigation

EscapeWork/Frete

License MIT

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

useEscapeWork\Frete\Correios\PrecoPrazo;
useEscapeWork\Frete\Correios\Data;
useEscapeWork\Frete\FreteException;
$frete = newPrecoPrazo();
$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); # obrigatoriotry {
$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; # sedexEscapeWork\Frete\Correios\Data::SEDEX_A_COBRAR; # sedex a cobrarEscapeWork\Frete\Correios\Data::SEDEX_10; # sedex 10EscapeWork\Frete\Correios\Data::SEDEX_HOJE; # sedex hojeEscapeWork\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 = newPrecoPrazo();
$frete->setCodigoServico([Data::SEDEX, Data::PAC])
... // todo os setters igual a chamada acima
try {
$results = $frete->calculate();
foreach ($resultsas$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.

useEscapeWork\Frete\Correios\Rastreamento;
useEscapeWork\Frete\FreteException;
$rastreamento = newRastreamento;
$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 = newRastreamento;
$rastreamento->setUsuario('ECT')
->setSenha('SRO')
->setObjetos(['SQ458226057BR', 'SQ458226057BR']); // passe um array com os objetostry {
$results = $rastreamento->track();
foreach ($resultsas$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.

useEscapeWork\Frete\Correios\ConsultaCEP;
useEscapeWork\Frete\FreteException;
try {
$consulta = newConsultaCEP;
$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

About

Cálculo de Frete e busca de endereços dos Correios com PHP

Topics

Resources

Stars

52 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages