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

NomeVersão/BuildDescrição curtaResponsável (owner)Observações
NFS-e Nacional (WHMCS Addon)v1.0Addon para emissão de NFS-e Nacional via API SEFIN com mTLS (certificado A1)GK2 CloudXSD v1.01 — obrigatório bloco IBSCBS a partir de 2026
WHMCS8.0+Plataforma base de hospedagem/billingInfra
PHP8.1+Runtime — extensões obrigatórias: openssl, curl, mbstring, zlib, jsonInfra

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 Admin → Configurações → Apps & Integrações (ou Setup → Addon Modules)
  2. Localize NFS-e Nacional e clique em Activate
  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:preencha os campos organizados pelas seções abaixo.

Seção 1 — Tributação e Serviços

SeçãoCampoObrigatórioObservação
TributaçãoCNAESimEx: 6209100 para TI
TributaçãoCódigo de Serviço LC 116 (cTribNac)Sim6 dígitos. Ex: 010700 para item 1.07
TributaçãoCódigo de Serviço NBSNão9 dígitos. Deixe vazio se não souber — evita erro E0316
TributaçãoCódigo de Tributação Municipal (cTribMun)NãoExatamente 3 dígitos. Deixe vazio se não souber — evita erro E0314
TributaçãoExigibilidade do ISSSimPara operações normais: 1-Exigível
TributaçãoAlíquota ISS (%)NãoEx: 2.00. Consulte a lei municipal
PrestadorRetenção ISS (%)NãoDeixe vazio se não houver retenção na fonte

Seção 2 — Dados da Empresa (Prestador)

CampoObrigatórioObservação CNPJ do PrestadorSim14 dígitos,dígitos igual aodeve ser o mesmo CNPJ do certificado A1 PrestadorInscrição Municipal (IM)NãoDeixe vazio se o município rejeitar — evita erro E0120 PrestadorCódigo IBGE do MunicípioSim7 dígitos. Ex: 3550308 para São Paulo/SP PrestadorRegime TributárioSimConforme enquadramento da empresa PrestadorOptante pelo Simples NacionalSimMarque se for ME ou EPP Apuração Simples NacionalNãoObrigatório para optantes do Simples (evita erro E0166) Regime Especial de TributaçãoNão0=Nenhum para a maioria dos casos

Seção 3 — Certificado Digital A1

CampoObrigatórioObservação Caminho do Certificado A1SimCaminho absoluto no servidor para o .pfx. Ex: /etc/ssl/certs/empresa.pfx CertificadoSenha do Certificado A1SimSerá criptografada com AES-256 automaticamente no banco ao salvar

Seção 4 — API NFS-e Nacional

APICampoObrigatórioObservação AmbienteSimhomologacao para testes,testes (sem validade fiscal), producao para emissão real APISérie da DPSNãoPadrão: 1. Não altere sem necessidade — muda a sequência numérica OperacionalNome da Aplicação (verAplic)NãoIdentificador 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

CampoObrigatórioObservação Campo CPF/CNPJ do ClienteSimtaxid usa o campo padrão do WHMCS; ou selecione um custom field OperacionalEmissão Automática de NFS-e (política global do módulo)SimDefine 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. OperacionalExcluir Late Fee da Base de CálculoNãoMultas de atraso são excluídas do valor da NFS-e se habilitado Faturas (Descontos)NãoDeduz descontos da fatura da base de cálculo da NFS-e Faturas (Fundos/Crédito)NãoDeduz créditos aplicados na fatura da base de cálculo da NFS-e Cancelar NFS-e ao Cancelar FaturaNãoCancelamento automático via API ao cancelar a fatura no WHMCS Enviar NFS-e por E-mailNãoEnvia DANFS-e e XML ao cliente após autorização da nota OperacionalCancelar NFS-e ao Cancelar FaturaNãoCancelamento automático via API ao cancelar fatura OperacionalPerfis com Permissão Manual de NFS-eSimIDs 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:

CampoPadrãoObservação Indicador de Operação (cIndOp)SimPadrão: 050101Para paraTI. TIConsulte tabela RFB IBS/CBSCST IBS/CBSSimPadrão: 000Tributação plena IBS/CBSClassificação Tributária (cClassTrib)SimPadrão: 000001Consulte 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 campoComportamento
    (vazio) — herdaHerda a configuraçãopolítica global definida nas configurações do módulo em Emissão Automática de NFS-e 1- Nao Emitir NFS-e — nuncaNunca emite automaticamenteautomaticamente; parabloqueia estetambém clientea emissão manual pelo admin 2- Fatura Gerada — emiteEmite ao criar a fatura (hook InvoiceCreated), independente da política global 3- Fatura Paga — emiteEmite 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á sempredisponível disponível,para qualquer cliente, exceto quando o campo do cliente está explicitamente como 1- Nao Emitir NFS-e.

    Passo 9 — Configurar cron (opcional)

    Adicione em Configurações → Automation Settings → Custom Cron Jobs do WHMCS:

    php /caminho/para/whmcs/modules/addons/nfsenacional/cron.php

    Ou via crontab do servidor:

    */5 * * * * php /caminho/para/whmcs/modules/addons/nfsenacional/cron.php >> /var/log/nfse-nacional.log 2>&1

    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 (verde) ou Produção (verde escuro)
    • 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)

    Considerações de segurança

    • Chave AES-256256:: 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 A1A1:: jamais armazene o .pfx dentro do webroot público sem proteção de acesso HTTP.proteção. Use caminhos fora do public_html/ ou proteja via nginx/Apache..
    • Tokens de açãoação:: todos os botões destrutivos (emitir, cancelar, excluir) usam tokens HMAC-SHA256 gerados por instalação — resistentes a CSRF e timing attacks.
    • Proxy mTLSmTLS:: 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 certificadocertificado:: 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 (ele cria a tabela tblnfsenacional e custom fields)
    • 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 caso não sejam mais necessárias..


    Contexto de Ambiente

    Ambiente-alvoObjetivo neste ambienteDescrição curta
    HomologaçãoTestar emissão, cancelamento e download sem validade fiscalEndpoint: sefin.producaorestrita.nfse.gov.br/SefinNacional — notas sem valor legal
    ProduçãoEmissão real com validade jurídica e fiscalEndpoint: sefin.nfse.gov.br/SefinNacional — notas válidas; não podem ser desfeitas facilmente

    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