fagner/laravel-shipping-gateway
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!
fagner/laravel-shipping-gateway 适用场景与选型建议
fagner/laravel-shipping-gateway 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 23 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 11 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 fagner/laravel-shipping-gateway 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 fagner/laravel-shipping-gateway 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 23
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 15
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-07