sysborg/focusnfe
Composer 安装命令:
composer require sysborg/focusnfe
包简介
Integração Laravel com a FocusNFe para NFe, NFCe, CTe, MDFe e NFSe
README 文档
README
Pacote de implementação da FocusNFe para Laravel por Sysborg
Introdução
O projeto tem como objetivo facilitar a integração de aplicações Laravel com a FocusNFe, utilizando uma abordagem consistente e bem estruturada.
Ele expõe uma camada focada em services, DTOs, helpers e eventos Laravel para integração com a API da FocusNFe.
O pacote expõe services para os módulos documentados pela FocusNFe e, nos fluxos já implementados, dispara eventos Laravel para facilitar integrações internas.
Quick Start
composer require sysborg/focusnfe php artisan vendor:publish --tag=config
FOCUSNFE_TOKEN=seu-token-focusnfe FOCUSNFE_AMBIENTE=production
use Sysborg\FocusNfe\app\Services\NFe; $nfe = app(NFe::class); $response = $nfe->get('pedido-123');
Guias
Eventos
- status: É o status code do http Saiba mais
- data: É o retorno da FocusNFe sem nenhum tipo de alteração.
- success: Se a ação esperada foi realizada efetivamente ou não.
Evento quando um webhook é normalizado pela aplicação consumidora
use \Sysborg\FocusNfe\app\Events\HooksReceived
O retorno é transparente e idêntico ao que a FocusNFe fornece. Neste caso, a explicação introdutória sobre eventos não se aplica, pois trata-se de um Webhook, um tipo diferente de evento.
Webhooks no Laravel
O pacote oferece o service de gestão de webhooks na FocusNFe, o WebhookDTO, o evento HooksReceived e o helper WebhookPayloadNormalizer para padronizar dados na aplicação consumidora.
Pelo manual da FocusNFe, os campos relevantes para autenticação do webhook são authorization e authorization_header. Em vez de depender de uma assinatura HMAC não documentada, a estratégia recomendada é configurar um token compartilhado no cadastro do webhook e validá-lo no seu endpoint de recepção.
Exemplo de cadastro do webhook:
use Sysborg\FocusNfe\app\DTO\WebhookDTO; use Sysborg\FocusNfe\app\Services\Webhooks; $webhooks = app(Webhooks::class); $webhooks->cadastrar(new WebhookDTO( cnpj_emitente: '07504505000132', url: 'https://seu-dominio.com/focusnfe/webhooks', evento: 'nfe_autorizada', authorization: 'Bearer meu-token-interno', authorization_header: 'Authorization', ));
Exemplo simples de normalização em um listener/serviço da aplicação consumidora:
use Illuminate\Support\Facades\Event; use Sysborg\FocusNfe\app\Events\HooksReceived; use Sysborg\FocusNfe\app\Services\WebhookPayloadNormalizer; $payload = [ 'event' => 'nfe_autorizada', 'cnpjEmitente' => '07504505000132', 'ref' => 'pedido-123', ]; WebhookPayloadNormalizer::dispatch($payload, 'focusnfe:webhook');
Se quiser trocar o nome do cabeçalho, configure o campo authorization_header no WebhookDTO e valide o mesmo nome na camada HTTP da sua aplicação. Essa camada não faz parte do package.
Padrão de dados para os eventos abaixo
Todos os eventos abaixo retornam a mesma estrutura de dados.
[
'status' => int,
'data' => array, // retorno transparente da FocusNFe
'success' => bool
]
Cobertura atual de eventos
Eventos atualmente disponíveis no package:
EmpresaCreatedEmpresaUpdatedEmpresaDeletedHooksReceivedNFeAutorizadaNFeCanceladaNFeInutilizadaNFCeAutorizadaNFCeCanceladaCTeAutorizadoCTeCanceladoMDFeAutorizadoMDFeCanceladoMDFeEncerradoNFSeEnviadaNFSeCanceladaNFSeNacionalAutorizadaNFSeNacionalCancelada
Observação importante:
- os eventos acima refletem a cobertura atual do código
- nem todo endpoint existente no pacote já dispara evento
HooksReceivedé um evento de normalização/entrada disparado pela aplicação consumidora, diferente dos eventos de retorno de service
Eventos por módulo
Empresa
Criação da empresa
use \Sysborg\FocusNfe\app\Events\EmpresaCreated
Os dados enviados pelo evento são explicados no início da sessão eventos. Criação de empresa
Alteração da empresa
use \Sysborg\FocusNfe\app\Events\EmpresaUpdated
Os dados enviados pelo evento são explicados no início da sessão eventos. Alteração de empresa
Exclusão da empresa
use \Sysborg\FocusNfe\app\Events\EmpresaDeleted
Os dados enviados pelo evento são explicados no início da sessão eventos. Exclusão de empresa
NFe
use \Sysborg\FocusNfe\app\Events\NFeAutorizada;
use \Sysborg\FocusNfe\app\Events\NFeCancelada;
use \Sysborg\FocusNfe\app\Events\NFeInutilizada;
NFCe
use \Sysborg\FocusNfe\app\Events\NFCeAutorizada;
use \Sysborg\FocusNfe\app\Events\NFCeCancelada;
CTe
use \Sysborg\FocusNfe\app\Events\CTeAutorizado;
use \Sysborg\FocusNfe\app\Events\CTeCancelado;
MDFe
use \Sysborg\FocusNfe\app\Events\MDFeAutorizado;
use \Sysborg\FocusNfe\app\Events\MDFeCancelado;
use \Sysborg\FocusNfe\app\Events\MDFeEncerrado;
NFSe Municipal
use \Sysborg\FocusNfe\app\Events\NFSeEnviada
Os dados enviados pelo evento são explicados no início da sessão eventos. NFSe - Envio
NFSe - Cancelada
use \Sysborg\FocusNfe\app\Events\NFSeCancelada
Os dados enviados pelo evento são explicados no início da sessão eventos. NFSe - Cancelamento
NFSe Nacional
use \Sysborg\FocusNfe\app\Events\NFSeNacionalAutorizada;
use \Sysborg\FocusNfe\app\Events\NFSeNacionalCancelada;
Documentação Oficial do Laravel
Documentação Laravel de Eventos
Rotas
Controllers
Services
Os services atualmente disponíveis no pacote são:
BackupsCEPCFOPCNAECnpjsConsultaEmailsCTeCTERecebidasEmpresasMDFeMunicipiosNCMNFCeNFeNFeRecebidasNFSeNFSeArquivoNFSeNacionalNFSeRecebidasWebhooks
Exemplo básico de resolução via container
use Sysborg\FocusNfe\app\Services\NFe; $service = app(NFe::class);
NFe
Operações atualmente suportadas:
enviagetcancelacartaCorrecaoinutilizarinutilizacoesreenviaEmaildownloadXmlinsucessoEntregaatorInteressadoprorrogacaoIcmsregistraEconfconsultaEconfcancelaEconf
Exemplo:
use Sysborg\FocusNfe\app\DTO\NFeDTO; use Sysborg\FocusNfe\app\Services\NFe; $nfe = app(NFe::class); $response = $nfe->get('minha-referencia');
NFCe
Operações atualmente suportadas:
enviagetcancelainutilizacoesreenviaEmailregistraEconfconsultaEconfcancelaEconf
Exemplo:
use Sysborg\FocusNfe\app\Services\NFCe; $nfce = app(NFCe::class); $response = $nfce->get('minha-referencia');
CTe
Operações atualmente suportadas:
enviaconsultacancelacartaCorrecaodesacordoregistroMultimodaldadosGtv
Exemplo:
use Sysborg\FocusNfe\app\Services\CTe; $cte = app(CTe::class); $response = $cte->consulta('minha-referencia');
MDFe
Operações atualmente suportadas:
enviaconsultacancelaincluiCondutorincluiDFeencerra
Exemplo:
use Sysborg\FocusNfe\app\Services\MDFe; $mdfe = app(MDFe::class); $response = $mdfe->consulta('minha-referencia');
NFSe Municipal
Operações atualmente suportadas:
enviagetcancelareenviaEmail
Exemplo:
use Sysborg\FocusNfe\app\Services\NFSe; $nfse = app(NFSe::class); $response = $nfse->get('minha-referencia');
NFSe Nacional
Operações atualmente suportadas:
enviaconsultacancela
Exemplo:
use Sysborg\FocusNfe\app\Services\NFSeNacional; $nfsen = app(NFSeNacional::class); $response = $nfsen->consulta('minha-referencia');
Webhooks
Operações atualmente suportadas:
cadastrarlistarconsultaratualizarremovertestar
Exemplo:
use Sysborg\FocusNfe\app\Services\Webhooks; $webhooks = app(Webhooks::class); $response = $webhooks->listar();
Testes automáticos
O repositório já possui cobertura para DTOs e services principais, incluindo cenários adicionados recentemente para:
NFeNFCeCTeMDFeNFSeNacionalWebhooksEmpresaDTOCnpjscomgetDto()
DTOs utilitários recentes
CNPJ tipado
Além da Response bruta do service Cnpjs, o pacote agora expõe conversão tipada para os campos documentados no manual local.
use Sysborg\FocusNfe\app\Services\Cnpjs; $cnpjs = app(Cnpjs::class); $empresa = $cnpjs->getDto('07504505000132'); if ($empresa) { $razaoSocial = $empresa->razao_social; $uf = $empresa->endereco?->uf; }
EmpresaDTO
O EmpresaDTO cobre os campos atualmente documentados no manual local para:
- habilitação de
NFSe Nacional CSCeID Tokende produção e homologação- séries e próximas numerações de
NFe,NFCe,NFSe,NFSe Nacional,CTe,CTe OSeMDFe - flags operacionais como manifestação, contingência offline e emissão síncrona
Instalação
Requisitos
- PHP 8.0+
- Laravel 9+
- Token da API FocusNFe
Composer
composer require sysborg/focusnfe
Publicar configuração
php artisan vendor:publish --tag=config
Variáveis de ambiente
FOCUSNFE_TOKEN=seu-token-focusnfe FOCUSNFE_AMBIENTE=production FOCUSNFE_LOG_CHANNEL=stack FOCUSNFE_LOG_LEVEL=error FOCUSNFE_RETRY_TIMES=3 FOCUSNFE_RETRY_SLEEP=1000 FOCUSNFE_RATE_LIMIT_ENABLED=true FOCUSNFE_RATE_LIMIT_MAX_ATTEMPTS=60 FOCUSNFE_RATE_LIMIT_DECAY_SECONDS=60
Documentação complementar
- Guia de instalação detalhado
- Guia de configuração
- Exemplos por fluxo
- Tratamento de erros e respostas
- Eventos disponíveis
- FAQ
- Guia de migração
Apoio
Se este pacote te ajudou no dia a dia e você quiser apoiar o projeto de forma opcional, você pode me pagar um café via Buy Me a Coffee.
O apoio é totalmente voluntário e o foco principal deste repositório continua sendo qualidade técnica, documentação e evolução aberta do package.
Documentação da FocusNFe
sysborg/focusnfe 适用场景与选型建议
sysborg/focusnfe 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 370 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 10 月 18 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「nfe」 「focus」 「cte」 「nfce」 「fiscal」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 sysborg/focusnfe 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 sysborg/focusnfe 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 sysborg/focusnfe 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Transforme NFe(xml) em objetos PHP (e vice-versa)
Lista atualizada de NCM
API para geração e envio de notas fiscais eletrônicas brasileiras
Even smarter automatic image cropping for SilverStripe
Kontur.Focus API client library
Alfabank REST API integration
统计信息
- 总下载量: 370
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 28
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-18