fagner/laravel-shipping-gateway
最新稳定版本:v1.0.1
Composer 安装命令:
composer require fagner/laravel-shipping-gateway
包简介
Gateway unificado de fretes para MelhorEnvio (logística e transporte)
README 文档
README
Gateway unificado para Melhor Envio e Correios com foco em integrações Laravel. A biblioteca expõe uma API simples em português para consultar preços, gerar e imprimir etiquetas, além de oferecer suporte nativo ao ambiente sandbox do Melhor Envio.
Índice
- Instalação
- Configuração
- Uso básico
- Melhor Envio - Fluxo Completo
- Sandbox do Melhor Envio
- Logs e observabilidade
- Testes
- Contribuindo
Instalação
Adicione o pacote ao seu projeto Laravel via Composer:
composer require fagner/laravel-shipping-gateway
Configuração
-
Registre o
ShippingServiceProviderna sua aplicação Laravel:-
Laravel <= 10: adicione
Fagner\LaravelShippingGateway\Providers\ShippingServiceProvider::classao arrayprovidersemconfig/app.php. -
Laravel 11+: edite
bootstrap/app.phpe inclua o provider dentro dewithProviders, por exemplo:use Fagner\LaravelShippingGateway\Providers\ShippingServiceProvider; return Application::configure(basePath: dirname(__DIR__)) // ... ->withProviders([ ShippingServiceProvider::class, ]) ->create();
-
-
Publique o arquivo de configuração (opcional):
php artisan vendor:publish --tag=shipping-config
-
(Opcional) Publique e personalize o arquivo de configuração:
php artisan vendor:publish --tag=shipping-config # ou php artisan vendor:publish --tag=laravel-shipping-gateway-configCaso não publique, a lib usa os valores padrão do pacote.
-
Defina as variáveis de ambiente necessárias no
.envdo projeto que consome a lib:SHIPPING_DEFAULT=melhor_envio MELHOR_ENVIO_TOKEN="seu-token" MELHOR_ENVIO_USE_SANDBOX=false MELHOR_ENVIO_BASE_URI=https://www.melhorenvio.com.br/api/v2/ MELHOR_ENVIO_SANDBOX_BASE_URI=https://sandbox.melhorenvio.com.br/api/v2/ CORREIOS_TOKEN=null CORREIOS_BASE_URI=https://api.correios.com.br/ CORREIOS_TIMEOUT=10
-
Limpe ou recrie o cache de configuração se necessário:
php artisan config:clear # ou php artisan config:cache
Uso básico
Injete o ShippingManager onde precisar e monte um ShipmentRequest com os dados do frete.
use Fagner\LaravelShippingGateway\DTOs\ShipmentRequest; use Fagner\LaravelShippingGateway\Manager\ShippingManager; class CheckoutController { public function cotar(ShippingManager $shippingManager) { $solicitacao = new ShipmentRequest( cepOrigem: '01001-000', cepDestino: '20040-010', pesoKg: 1.2, comprimentoCm: 20, larguraCm: 15, alturaCm: 10, valor: 100, opcoes: [ 'service_id' => 123, // ID do serviço retornado pela API 'from' => ['zip_code' => '01001-000'], 'to' => ['zip_code' => '20040-010'], // 'products' => [...], // opcional // 'volumes' => [...], // opcional: será gerado automaticamente se omitido ], ); // Cotação individual do provedor configurado como padrão $cotacoes = $shippingManager->driver()->consultarPrecos($solicitacao); // Gerar etiqueta e recuperar PDF em base64 $etiqueta = $shippingManager->driver()->gerarEtiqueta($solicitacao); // Quando precisar reaproveitar o mesmo payload para impressão $etiquetaImpressa = $shippingManager->driver()->imprimirEtiqueta($solicitacao); return response()->json([ 'cotacoes' => $cotacoes, 'etiqueta' => [ 'codigo_rastreio' => $etiqueta->codigoRastreio, 'pdf_base64' => $etiqueta->etiquetaBase64, ], ]); } }
Consultar preços de todos os provedores
$todas = $shippingManager->getRatesFromAllProviders($solicitacao);
Melhor Envio - Fluxo Completo
O MelhorEnvioAdapter implementa corretamente o fluxo oficial da API do Melhor Envio, que consiste em 4 etapas automáticas:
- Adicionar ao Carrinho →
POST /api/v2/me/cart - Finalizar Compra (Checkout) →
POST /api/v2/me/shipment/checkout - Gerar Etiqueta →
POST /api/v2/me/shipment/generate - Imprimir Etiqueta →
POST /api/v2/me/shipment/print
Quando você chama gerarEtiqueta() ou imprimirEtiqueta(), todas essas etapas são executadas automaticamente.
📚 Para exemplos completos e detalhados de uso do Melhor Envio, consulte:
👉 EXEMPLO_MELHOR_ENVIO.md
O documento inclui exemplos de:
- Consulta de preços e obtenção do
service_id - Geração de etiquetas com todos os campos obrigatórios
- Múltiplos volumes e produtos
- Opções de seguro, AR, mão própria
- Tratamento de erros
- E muito mais!
Sandbox do Melhor Envio
Ative o sandbox definindo MELHOR_ENVIO_USE_SANDBOX=true e forneça o endpoint/token apropriado. Consulte a documentação oficial do Sandbox do Melhor Envio para gerar credenciais, entender as limitações e simular fluxos com segurança.
Logs e observabilidade
Os adapters emitem logs através de PSR-3 (psr/log). Em um projeto Laravel, o logger padrão do framework é detectado automaticamente. Eventos como falhas de requisição, respostas inesperadas ou etiquetas geradas sem conteúdo são registrados com níveis error/warning, enquanto operações bem-sucedidas de geração de etiqueta são registradas em info.
Se quiser inspecionar ou customizar os registros, ajuste o canal de log da aplicação ou injete um logger próprio ao resolver o ShippingManager.
Testes
composer install ./vendor/bin/phpunit
Os testes utilizam orchestra/testbench com mocks do Guzzle, garantindo que as integrações com o Melhor Envio não dependem de chamadas reais.
Contribuindo
- Faça um fork e crie sua branch (
git checkout -b feature/minha-feature). - Garanta que os testes continuam verdes (
./vendor/bin/phpunit). - Envie um pull request descrevendo suas mudanças.
Bug reports e sugestões são bem-vindos!
统计信息
- 总下载量: 23
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-07