Configuração: NFS-e Nacional - v1.0 - Produção e Homologação
Objetivo
Descrever o processo de instalação, configuração e ativação do addon NFS-e Nacional no WHMCS, permitindo a emissão, consulta e cancelamento de NFS-e via API SEFIN/ADN do governo federal (sefin.nfse.gov.br).
Versão da ferramenta
| Nome | Versão/Build | Descrição curta | Responsável (owner) | Observações |
|---|---|---|---|---|
| NFS-e Nacional (WHMCS Addon) | v1.0 | Addon para emissão de NFS-e Nacional via API SEFIN com mTLS (certificado A1) | GK2 Cloud | XSD v1.01 — obrigatório bloco IBSCBS a partir de 2026 |
| WHMCS | 8.0+ | Plataforma base de hospedagem/billing | Infra | — |
| PHP | 8.1+ | Runtime — extensões obrigatórias: openssl, curl, mbstring, zlib, json | Infra | — |
Pré-requisitos
- Acesso SSH ao servidor com permissão para instalar dependências via Composer
- Composer 2.x instalado no servidor
- Certificado digital ICP-Brasil A1 (
.pfx/.p12) válido e dentro da validade - CNPJ do prestador idêntico ao CNPJ do certificado A1
- Acesso ao painel admin do WHMCS com permissão para gerenciar addons
- Servidor web com suporte a regras de bloqueio de acesso a arquivos sensíveis (Apache ou nginx)
- Código IBGE do município (7 dígitos), código de serviço LC 116 (6 dígitos) e CNAE definidos com o contador
Passos de configuração
Passo 1 — Upload dos arquivos
Copie a pasta nfsenacional para o diretório de addons do WHMCS:
modules/addons/nfsenacional/
Confirme que a estrutura contém ao menos: nfsenacional.php, hooks.php, cron.php, composer.json e a pasta src/.
Passo 2 — Instalar dependências via Composer
Acesse o diretório do módulo e execute:
cd /caminho/para/whmcs/modules/addons/nfsenacional
composer install --no-dev --optimize-autoloader
Isso instalará robrichards/xmlseclibs (assinatura XML RSA-SHA256) e guzzlehttp/guzzle (cliente HTTP). O diretório vendor/ será criado dentro do módulo.
Passo 3 — Permissões de arquivos
chown -R www-data:www-data /caminho/para/whmcs/modules/addons/nfsenacional
chmod -R 755 /caminho/para/whmcs/modules/addons/nfsenacional
chmod 644 /caminho/para/whmcs/modules/addons/nfsenacional/nfsenacional.php
O arquivo .nfse_enc_key (chave AES-256 para criptografia da senha do certificado) será criado automaticamente com permissão 0600 no primeiro acesso ao painel admin.
Passo 4 — Proteger o arquivo de chave de criptografia
Apache — crie modules/addons/nfsenacional/.htaccess:
<Files ".nfse_enc_key">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
</Files>
nginx — adicione no bloco server {} do vhost:
location ~* /modules/addons/nfsenacional/\.nfse_enc_key {
deny all;
return 404;
}
Após editar o nginx, recarregue: nginx -t && systemctl reload nginx
Passo 5 — Certificado digital A1
Armazene o arquivo .pfx / .p12 em um caminho fora do webroot ou em diretório protegido. Exemplos:
/etc/ssl/certs/empresa/certificado.pfx
/var/www/certs/certificado.pfx
Ajuste as permissões:
chmod 640 /caminho/para/certificado.pfx
chown root:www-data /caminho/para/certificado.pfx
Passo 6 — Ativar o addon no WHMCS
- Acesse Setup → Addon Modules
Figura 1 - Acessando as opções
Figura 2 - Acessando os módulos addon
- Localize NFS-e Nacional e clique em Activate
Figura 3 - Ativando o módulo
- Após ativar, o módulo cria automaticamente: tabela
tblnfsenacional, template de e-mail NFS-e Nacional (tipogeneral) e custom fields de cliente (Emitir NFS-e (Nacional) e Reter ISS (Nacional))
Passo 7 — Configurar o addon
Acesse Admin → Addons → NFS-e Nacional → Configurar e preencha os campos organizados pelas seções abaixo.
Figura 4 - Tela de configuração do módulo
Seção 1 — Tributação e Serviços
| Campo | Obrigatório | Observação |
|---|---|---|
| CNAE | Sim | Ex: 6209100 para TI |
| Código de Serviço LC 116 (cTribNac) | Sim | 6 dígitos. Ex: 010700 para item 1.07 |
| Código de Serviço NBS | Não | 9 dígitos. Deixe vazio se não souber — evita erro E0316 |
| Código de Tributação Municipal (cTribMun) | Não | Exatamente 3 dígitos. Deixe vazio se não souber — evita erro E0314 |
| Exigibilidade do ISS | Sim | Para operações normais: 1-Exigível |
| Alíquota ISS (%) | Não | Ex: 2.00. Consulte a lei municipal |
| Retenção ISS (%) | Não | Deixe vazio se não houver retenção na fonte |
Seção 2 — Dados da Empresa (Prestador)
| Campo | Obrigatório | Observação |
|---|---|---|
| CNPJ do Prestador | Sim | 14 dígitos — deve ser o mesmo CNPJ do certificado A1 |
| Inscrição Municipal (IM) | Não | Deixe vazio se o município rejeitar — evita erro E0120 |
| Código IBGE do Município | Sim | 7 dígitos. Ex: 3550308 para São Paulo/SP |
| Regime Tributário | Sim | Conforme enquadramento da empresa |
| Optante pelo Simples Nacional | Sim | Marque se for ME ou EPP |
| Apuração Simples Nacional | Não | Obrigatório para optantes do Simples (evita erro E0166) |
| Regime Especial de Tributação | Não | 0=Nenhum para a maioria dos casos |
Seção 3 — Certificado Digital A1
| Campo | Obrigatório | Observação |
|---|---|---|
| Caminho do Certificado A1 | Sim | Caminho absoluto no servidor para o .pfx. Ex: /etc/ssl/certs/empresa.pfx |
| Senha do Certificado A1 | Sim | Será criptografada com AES-256 automaticamente no banco ao salvar |
Seção 4 — API NFS-e Nacional
| Campo | Obrigatório | Observação |
|---|---|---|
| Ambiente | Sim | homologacao para testes (sem validade fiscal), producao para emissão real |
| Série da DPS | Não | Padrão: 1. Não altere sem necessidade — muda a sequência numérica |
| Nome da Aplicação (verAplic) | Não | Identificador da aplicação emissora que aparece na NFS-e. Padrão: WHMCS-NfseNac-1.0. Máximo 20 caracteres |
Seção 5 — Configurações Operacionais
| Campo | Obrigatório | Observação |
|---|---|---|
| Campo CPF/CNPJ do Cliente | Sim | taxid usa o campo padrão do WHMCS; ou selecione um custom field |
| Emissão Automática de NFS-e (política global do módulo) | Sim | Define o comportamento padrão para todos os clientes que não têm configuração individual. Opções: Não Emitir / Fatura Gerada / Fatura Paga. Cada cliente pode sobrescrever essa política pelo custom field Emitir NFS-e (Nacional) no seu perfil. |
| Excluir Late Fee da Base de Cálculo | Não | Multas de atraso são excluídas do valor da NFS-e se habilitado |
| Faturas (Descontos) | Não | Deduz descontos da fatura da base de cálculo da NFS-e |
| Faturas (Fundos/Crédito) | Não | Deduz créditos aplicados na fatura da base de cálculo da NFS-e |
| Cancelar NFS-e ao Cancelar Fatura | Não | Cancelamento automático via API ao cancelar a fatura no WHMCS |
| Enviar NFS-e por E-mail | Não | Envia DANFS-e e XML ao cliente após autorização da nota |
| Perfis com Permissão Manual de NFS-e | Sim | IDs dos perfis admin autorizados a emitir manualmente (separados por vírgula). Vazio = todos os perfis |
Seção 6 — IBS/CBS (Reforma Tributária)
Campos obrigatórios no XSD v1.01 a partir de 2026. Preencha conforme orientação do contador:
| Campo | Padrão | Observação |
|---|---|---|
| Indicador de Operação (cIndOp) | 050101 |
Para TI. Consulte tabela RFB |
| CST IBS/CBS | 000 |
Tributação plena |
| Classificação Tributária (cClassTrib) | 000001 |
Consulte tabela RFB |
Passo 8 — Configurar comportamento por cliente
No perfil de cada cliente no admin, preencha o custom field Emitir NFS-e (Nacional). Este campo sobrescreve a política global configurada no módulo (campo Emissão Automática de NFS-e da Seção 5):
| Valor do campo | Comportamento |
|---|---|
| (vazio) | Herda a política global definida nas configurações do módulo em Emissão Automática de NFS-e |
1- Nao Emitir NFS-e |
Nunca emite automaticamente; bloqueia também a emissão manual pelo admin |
2- Fatura Gerada |
Emite ao criar a fatura (hook InvoiceCreated), independente da política global |
3- Fatura Paga |
Emite somente após pagamento confirmado (hook InvoicePaid), independente da política global |
Atenção: campo vazio no cliente ≠ "Não Emitir". Quando vazio, o módulo usa a política global. A emissão manual pelo painel admin está disponível para qualquer cliente, exceto quando o campo está explicitamente como 1- Nao Emitir NFS-e.
Validação pós-configuração
- Acesse Admin → Addons → NFS-e Nacional e confirme que o painel carrega sem erros
- Verifique se o badge de ambiente exibe Homologação ou Produção
- Crie ou selecione uma fatura de teste e clique em Emitir NFS-e — o status deve retornar
AUTORIZADA - Teste o download do DANFS-e e do XML pela página de detalhe da nota
- Se o envio de e-mail estiver ativo, verifique o recebimento pelo cliente
- Confirme que o arquivo
.nfse_enc_keyfoi criado com permissão0600e está inacessível via HTTP (retorna 404)
Figura 5 - Listagem de notas fiscais
Considerações de segurança
- Chave AES-256: o arquivo
.nfse_enc_keyarmazena a chave de criptografia da senha do certificado. Deve ser protegido por regra nginx/Apache e ter permissão0600. Um dump de banco sozinho não expõe a senha do certificado. - Certificado A1: jamais armazene o
.pfxdentro do webroot público sem proteção. Use caminhos fora dopublic_html/. - Tokens de ação: todos os botões destrutivos (emitir, cancelar, excluir) usam tokens HMAC-SHA256 gerados por instalação — resistentes a CSRF e timing attacks.
- Proxy mTLS: os links de DANFS-e e XML são servidos pelo proxy interno do módulo com certificado A1 — nunca expostos diretamente. Tokens HMAC impedem enumeração de IDs.
- Senha do certificado: armazenada criptografada (prefixo
ENC:) emtbladdonmodules. Nunca logar ou exibir o valor bruto.
Backups/Rollback
Backup antes da instalação
- Faça backup do banco de dados do WHMCS antes de ativar o addon
- Guarde o arquivo
.nfse_enc_keyem local seguro após a primeira geração — sem ele, a senha do certificado armazenada no banco não pode ser descriptografada
Rollback
Passo 1
Desative o addon em Admin → Configurações → Apps & Integrações → NFS-e Nacional → Deactivate.
Passo 2
Remova a pasta modules/addons/nfsenacional/ do servidor.
Passo 3
Restaure o backup do banco caso necessário. A tabela tblnfsenacional e os custom fields criados podem ser removidos manualmente via SQL se necessário.
Passo 4
Remova as regras de bloqueio do nginx/Apache adicionadas para o .nfse_enc_key.
Contexto de Ambiente
| Ambiente-alvo | Objetivo neste ambiente | Descrição curta |
|---|---|---|
| Homologação | Testar emissão, cancelamento e download sem validade fiscal | Endpoint: sefin.producaorestrita.nfse.gov.br/SefinNacional |
| Produção | Emissão real com validade jurídica e fiscal | Endpoint: sefin.nfse.gov.br/SefinNacional |
Controle de Mudanças
Informações de controle de versão
- Última revisão 13-04-2026
- Próxima revisão 13-10-2026
- Autor GK2 Cloud
- Revisor —
- Versão 1.0.0
Notas Adicionais
- Mudar o ambiente de
homologacaoparaproducaonão apaga registros anteriores — eles ficam no banco comambiente='homologacao'e não aparecem no painel. - O campo Inscrição Municipal deve ser deixado vazio se o município ainda não tem IM cadastrado no CNC NFS-e (evita erro E0120).
- O campo Código NBS deve ser deixado vazio se não tiver certeza do código correto (evita erro E0316).
- O CEP do endereço do tomador deve pertencer ao município informado em
cMun— caso contrário o SEFIN retorna erro E0240. Configure fallback manual emdata/cep_ibge.jsonquando necessário.
Referências
- API SEFIN Nacional — Swagger em
docs/API NFS-e - Sefin Nacional (v1).jsondentro do módulo - XSD oficial v1.01 —
docs/nfse-esquemas_xsd-prodrest-v1-01-*/Schemas/1.01/ - Portal público de consulta: https://www.nfse.gov.br/ConsultaPublica/
- ViaCEP (consulta IBGE por CEP): https://viacep.com.br/





No comments to display
No comments to display