Skip to main content

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
  1. Acesse Setup → Addon Modules

    image.png


    Figura 1 - Acessando as opções


    imagem exemplo.pngimage.png


    Figura n2 - ExplicaçãoAcessando daos figuramódulos addon

  2. Localize NFS-e Nacional e clique em Activate

    image.png


    Figura 3 - Ativando o módulo

  3. Após ativar, o módulo cria automaticamente: tabela tblnfsenacional, template de e-mail NFS-e Nacional (tipo general) 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.

 

image.png


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_key foi criado com permissão 0600 e está inacessível via HTTP (retorna 404)

    image.png


    Figura 5 - Listagem de notas fiscais


Considerações de segurança

  • Chave AES-256: o arquivo .nfse_enc_key armazena a chave de criptografia da senha do certificado. Deve ser protegido por regra nginx/Apache e ter permissão 0600. Um dump de banco sozinho não expõe a senha do certificado.
  • Certificado A1: jamais armazene o .pfx dentro do webroot público sem proteção. Use caminhos fora do public_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:) em tbladdonmodules. 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_key em 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 homologacao para producao não apaga registros anteriores — eles ficam no banco com ambiente='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 em data/cep_ibge.json quando necessário.

Referências