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
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
Admin → Configurações → Apps & Integrações(ouSetup → Addon Modules)
Figura 1 - Acessando as opções
Figura n - Explicação da figura
- Localize NFS-e Nacional e clique em Activate
- 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.
Seção 1 — Tributação e Serviços
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)
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
.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
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
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:
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):
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)
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
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/

