A Nota Fiscal Eletrônica (NF-e) é um dos padrões técnicos mais importantes do ecossistema de negócios brasileiro. Todo sistema de gestão, e-commerce ou ERP desenvolvido no Brasil precisa emitir, processar ou consumir NF-e em algum momento. Este guia cobre o que todo desenvolvedor precisa saber.
O que é a NF-e tecnicamente
A NF-e é um arquivo XML com estrutura definida pelo Manual de Orientação do Contribuinte (MOC) publicado pela SEFAZ nacional e pelos estados. O arquivo segue o padrão XML Schema (XSD) disponível publicamente em nfe.fazenda.gov.br.
O ciclo de vida de uma NF-e:
- Geração do XML pelo emissor (empresa)
- Assinatura digital com certificado A1 ou A3 (ICP-Brasil)
- Transmissão para a SEFAZ via WebService SOAP
- Autorização pela SEFAZ (retorna a chave de acesso de 44 dígitos)
- Impressão do DANFE (documento auxiliar)
- Armazenamento do XML por 5 anos
Estrutura básica do XML da NF-e
A NF-e tem uma hierarquia clara:
NFe
└── infNFe
├── ide (identificação da nota)
├── emit (emitente)
├── dest (destinatário)
├── det[] (itens/produtos)
│ ├── prod (dados do produto)
│ └── imposto (ICMS, PIS, COFINS, IPI)
├── total (totais da nota)
├── transp (transporte)
├── cobr (cobrança/duplicatas)
└── infAdic (informações adicionais)
Ambientes: Homologação vs Produção
Todo desenvolvimento começa no ambiente de homologação (tpAmb=2), onde as notas são aceitas mas não têm valor fiscal. Só depois de testes completos você migra para produção (tpAmb=1).
A URL dos WebServices muda conforme o estado e o ambiente. Para consulta da situação de uma nota em produção:
https://nfe.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx
Bibliotecas em PHP para NF-e
nfephp-org/sped-nfe (recomendada)
A mais completa e mantida ativamente:
composer require nfephp-org/sped-nfe
// Configuração básica
use NFePHPNFeMake;
use NFePHPNFeTools;
$config = [
'atualizacao' => '2026-01-01T00:00:00',
'tpAmb' => 2, // 1=prod, 2=homologação
'razaosocial' => 'Empresa Teste Ltda',
'cnpj' => '12345678000195',
'siglaUF' => 'SP',
'schemes' => 'PL_009_V4',
'versao' => '4.00',
'tokenIBPT' => '',
];
$tools = new Tools(json_encode($config), Certificate::readPfx(
file_get_contents('/path/to/cert.pfx'),
'senha_certificado'
));
Bibliotecas em Python
PyNFe
pip install PyNFe
from pynfe.processamento.serializacao import SerializacaoXML
from pynfe.entidades import Emitente, Destinatario, NotaFiscal
# Criar a nota fiscal
nf = NotaFiscal()
nf.uf = 'SP'
nf.natureza_operacao = 'Venda de mercadorias'
# ... configurar emitente, destinatário, produtos, impostos
Webservices SEFAZ: operações principais
| Operação | Descrição |
|---|---|
| NFeAutorizacao4 | Envio da NF-e para autorização |
| NFeRetAutorizacao4 | Retorno do resultado da autorização (assíncrono) |
| NFeConsultaProtocolo4 | Consulta situação da NF-e pela chave de acesso |
| NFeCancelamento4 | Solicita cancelamento de NF-e autorizada |
| NFeInutilizacao4 | Inutiliza faixa de números que não serão usados |
| NFeStatusServico4 | Verifica se o serviço da SEFAZ está disponível |
Certificado Digital: o que integrar
Toda NF-e precisa ser assinada com certificado digital ICP-Brasil. Para sistemas web:
- Certificado A1 (arquivo .pfx): armazenado no servidor. Mais fácil de integrar automaticamente, mas menos seguro. Recomendado para emissão automatizada em servidor.
- Certificado A3 (token/smartcard): mais seguro mas exige hardware físico do usuário. Complicado para sistemas web.
Para leitura do certificado A1 em PHP:
$pfx = file_get_contents('/secure/path/certificado.pfx');
$senha = 'senha_certificado'; // armazene em variável de ambiente!
openssl_pkcs12_read($pfx, $certs, $senha);
NFS-e: nota de serviço (mais complexa)
Diferentemente da NF-e de produtos (padrão nacional), a NFS-e (serviços municipais) é fragmentada: cada prefeitura tem seu próprio WebService, layout e regras. Existem algumas iniciativas de padronização (ABRASF), mas a cobertura ainda é incompleta.
Para integrar NFS-e, recomenda-se usar uma plataforma intermediária como:
- eNotas: API única que cobre 3.500+ municípios
- feegow: focado em saúde e serviços
- Nuvem Fiscal: API moderna cobrindo NF-e, NFS-e e MDF-e
Boas práticas de implementação
- Nunca hardcode a senha do certificado — use variáveis de ambiente
- Implemente retry com backoff exponencial para chamadas aos WebServices SEFAZ
- Armazene sempre o XML autorizado e o protocolo de autorização
- Monitore o prazo de validade do certificado digital (geralmente 1 ou 3 anos)
- Teste exaustivamente em homologação antes de ir para produção
- Implemente a contingência offline (NF-e em Contingência DPEC ou EPEC) para quando a SEFAZ estiver fora
A integração com NF-e é um dos trabalhos mais específicos do ecossistema brasileiro de desenvolvimento. Mas uma vez implementado corretamente, é uma fonte de valor enorme para qualquer sistema de gestão.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.