Addon para WHMCS que integra a emissão de faturas com a NFS-e Nacional (ADN) — o padrão nacional de Nota Fiscal de Serviço Eletrônica mantido pela RFB/ENCAT (https://www.gov.br/nfse). Cobre emissão, consulta, cancelamento, download de DANFS-e/XML e envio automático por e-mail, com isolamento total entre os ambientes de produção e homologação.
Desenvolvido pela GK2.
Guia completo de instalação e configuração (produção e homologação): https://oraculo.gk2.cloud/books/whmcs/page/configuracao-nfs-e-nacional-v10-producao-e-homologacao
Resumo rápido:
- Baixe o arquivo
nfsenacional-vX.Y.Z.zipda página de releases. - Extraia o conteúdo em
modules/addons/nfsenacional/na sua instalação WHMCS. - O zip já inclui a pasta
vendor/com todas as dependências — não é necessário rodarcomposer installno servidor de produção. - Em Configuration Value → System → Activate Modules → Other Addon Modules, ative o addon "NFS-e Nacional".
- Preencha as configurações do addon (certificado A1, série DPS, ambiente, política de emissão) — detalhado no guia acima.
⚠️ Não use o código direto do repositório em produção. Clone o repo apenas para desenvolvimento. Para instalação, use sempre o zip de release, que já vem comvendor/incluso e a pasta renomeada paranfsenacional.
- Emite a DPS (Declaração de Prestação de Serviço) a partir de uma fatura paga/gerada no WHMCS e obtém a NFS-e autorizada pelo SEFIN Nacional.
- Consulta, cancela e reenvia por e-mail notas já emitidas.
- Disponibiliza download de DANFS-e (PDF) e XML tanto na área do cliente quanto no admin.
- Mantém histórico completo por fatura (status, protocolo, chave de acesso, valores de ISS) em tabela própria do banco.
O código vive em src/NfseNacional/ sob o namespace GK2\NfseNacional, organizado
por responsabilidade (não por tipo de arquivo MVC):
nfsenacional.php Entry point do addon (config/activate/deactivate/output/clientarea)
hooks.php Registro dos hooks do WHMCS (carregado automaticamente)
src/NfseNacional/
├── Bootstrap.php Autoload (Composer, com fallback PSR-4 manual)
├── Admin/ Painel administrativo do addon
│ ├── AdminController.php Dispatch de páginas (dashboard, list, detail)
│ ├── ConfigFields.php Definição dos campos de configuração
│ └── Action/ Ações disparadas do admin (Emitir, Cancelar, Excluir, Reenviar e-mail)
├── ClientArea/ Área do cliente (listagem de notas do usuário logado)
│ ├── ClientAreaController.php
│ └── DownloadController.php Proxy de download (DANFS-e / XML)
├── Config/
│ └── ModuleConfig.php Leitura/escrita das configurações do addon (inclui
│ criptografia AES-256-CBC da senha do certificado)
├── Domain/ Regras de negócio e modelos de domínio
│ ├── AmbienteGuard.php Trava central: resolve o ambiente (produção/homologação)
│ │ uma única vez por requisição e nunca deixa misturar dados
│ │ ou chamadas de API entre os dois ambientes
│ ├── Entity/ Dps, Nfse
│ ├── Enum/ Ambiente, EmissaoPolitica, NfseStatus
│ └── Service/ Orquestração dos casos de uso:
│ EmissaoService, ConsultaService, CancelamentoService,
│ EmailService, DownloadUrlService, CepIbgeCache
├── Fiscal/ Tudo relacionado à montagem e assinatura do documento fiscal
│ ├── NacionalProvider.php Implementação de ProviderInterface para a API ADN
│ ├── Mapper/ Fatura/cliente WHMCS → estruturas fiscais
│ │ (Prestador, Tomador, Serviço, Tributo)
│ ├── Payload/ Monta o XML da DPS/Evento conforme XSD oficial
│ └── Signer/XmlSigner.php Assinatura digital XML (via robrichards/xmlseclibs)
├── Hook/ Integração com os hooks do WHMCS
│ ├── HookHandler.php Registro central de todos os hooks
│ ├── InvoiceHooks.php Gatilhos de emissão automática (fatura criada/paga)
│ └── AdminInvoiceUI.php, AdminInvoiceListUI.php,
│ ClientInvoiceListUI.php, ClientAreaMenu.php Injeção de UI nas telas do WHMCS
├── Persistence/ Acesso a dados (tblnfsenacional e tabelas de apoio)
│ ├── NfseRepository.php, Migration.php, DpsSequence.php
├── Security/TokenSigner.php Assinatura/validação de tokens usados nos links de download
└── Transport/ Cliente HTTP e autenticação com a API Nacional
├── HttpClient.php, ApiEndpoints.php, ApiResponse.php
└── Auth/ CertificateAuth (mTLS via certificado A1) e TokenAuth
- Um hook (
InvoiceHooks) ou uma ação manual do admin chamaEmissaoService::processarEmissao(). AmbienteGuardresolve o ambiente ativo (produção/homologação) uma vez e o propaga para repositório, provider e endpoints — impedindo qualquer mistura entre os dois.DpsPayloadBuilder(usando osMappers) monta o XML da DPS a partir da fatura e do cliente.NacionalProvidercompacta o XML (GZip + base64) e envia para o SEFIN Nacional (ApiEndpointsresolve as URLs por ambiente:*.nfse.gov.brem produção,*.producaorestrita.nfse.gov.brem homologação).- A resposta é persistida via
NfseRepository, e-mail é disparado se habilitado (EmailService), e o resultado é exibido no admin/área do cliente.
Consulta, cancelamento e obtenção de DANFS-e/XML seguem o mesmo padrão através de
ConsultaService e CancelamentoService.
- PHP >= 8.1
- WHMCS >= 8.12
- Certificado digital A1 (.pfx) do prestador de serviços
guzzlehttp/guzzle— cliente HTTP (com autenticação mTLS via certificado A1)robrichards/xmlseclibs— assinatura digital XML
# Clone o repositório
git clone <repo-url>
cd nota-fiscal
# Instale as dependências do módulo
cd nfsenacional-WHMCS
composer installImportante: A pasta
vendor/não é commitada no repositório. Após clonar ou trocar de branch, execute semprecomposer installpara regenerá-la a partir docomposer.lock. Ocomposer.lockgarante que todos os ambientes usem exatamente as mesmas versões das dependências.
nota-fiscal/ ← Raiz do repositório
├── .github/workflows/release.yml ← Workflow de release automático
├── DOCUMENTACAO-REFERENCIA-NFSE.md ← Catálogo dos arquivos de suporte (XSD, APIs, anexos)
├── esquemas-nfse-rtc-v1-01-*/ ← Schemas XSD oficiais da NFS-e
├── MANUAL API/ ← Especificações OpenAPI/Swagger das APIs
├── anexo_*.xlsx ← Planilhas oficiais (IBGE, NBS, tributações, eventos)
├── nfsenacional-WHMCS/ ← Módulo WHMCS
│ ├── composer.json ← Dependências PHP (guzzle, xmlseclibs)
│ ├── composer.lock ← Versões exatas lockadas (commitado)
│ ├── vendor/ ← ⚠️ Não commitado — gerado via composer install
│ ├── CHANGELOG.md ← Histórico de versões (Keep a Changelog)
│ └── src/NfseNacional/ ← Código-fonte do módulo
└── guia_*.pdf ← Guias e notas técnicas
O release é 100% automatizado via GitHub Actions (.github/workflows/release.yml).
Para publicar uma nova versão:
-
Atualize a versão no docblock do
nfsenacional-WHMCS/nfsenacional.php:/** * @version 1.0.1 ← altere aqui */
-
Registre as mudanças no
nfsenacional-WHMCS/CHANGELOG.md:## [1.0.1] - 2026-08-10 ### Corrigido - Timeout em chamadas de consulta corrigido - Encoding UTF-8 no e-mail de notificação ### Adicionado - Suporte a certificado A3 com cadeia completa
-
Abra um PR com as alterações para a branch
main. -
Ao mergear o PR, o workflow automaticamente:
- Extrai a versão do docblock
- Verifica se a tag já existe (evita duplicatas)
- Executa
composer install --no-dev - Empacota o módulo em
nfsenacional-vX.Y.Z.zip(pasta renomeada paranfsenacional) - Extrai a seção correspondente do
CHANGELOG.md - Cria a tag
vX.Y.Zno Git - Publica o release no GitHub com o zip anexado
| Convenção | Regra |
|---|---|
| Versionamento | SemVer — MAJOR.MINOR.PATCH |
| Changelog | Keep a Changelog — seções Adicionado, Alterado, Corrigido, Removido |
| PHP mínimo | 8.3+ (produção); composer.json declara >=8.1 por compatibilidade com WHMCS |
| Vendor | Não commitado — .gitignore ignora vendor/; composer.lock é commitado |
| Release | Automático no merge de PR para main; tag = versão do módulo |
| Nome do pacote | nfsenacional/ (sem sufixo -WHMCS) dentro do zip de release |