Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
N

nfe

> 编程语言
Open source

Nota Fiscal Eletrônica em Java.

761 stars0 likes0 views
WebsiteGitHub

About

Nota Fiscal Eletrônica em Java.

Nota Fiscal Eletrônica

Comunicador de nota fiscal e nota fiscal do consumidor da fazenda.

Atenção

Este é um projeto colaborativo, sinta-se à vontade em usar e colaborar com o mesmo.

Antes de submeter um pull request, verifique a estrutura seguida pelo projeto e procure incluir no mesmo testes unitários que garantam que a funcionalidade funciona como o esperado.

Possuímos um grupo de WhatsApp para discussões sobre o desenvolvimento da lib: https://chat.whatsapp.com/LFmqpkoiIYc6Zy3d4TnZGU

Antes de usar

Antes de começar a implementar, é altamente recomendável a leitura da documentação oficial que o governo disponibiliza em http://www.nfe.fazenda.gov.br/portal

Caso não possua conhecimento técnico para criar notas fiscais, um profissional da área (como um contador) pode lhe auxiliar.

Instalação

Diretamente pelo Maven

xml

  com.github.wmixvideo
  nfe
  ${latest.release}

Para acessar a lista de versões disponíveis, acesse a página de release aqui no github.

Diretamente pelo código fonte (última versão em desenvolvimento)

bash
   git clone https://github.com/wmixvideo/nfe
   mvn clean install

Como usar

Basicamente você precisará de uma implementação de NFeConfig (exemplificado abaixo), com informações de tipo de emissão, certificados digitais, e uma instância da WsFacade, essa classe tem a responsabilidade de fazer a ponte entre o seu sistema e a comunicação com os webservices da Sefaz.

…

Configurar pelo repositório de certificados do Windows:

Carregando os alias disponíveis(certificados instalados) no Windows:

java
KeyStore keyStoreCert = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); 
keyStoreCert.load(null, null);
Enumeration aliasEnum = keyStoreCert.aliases();

Após isso é necessário algum método para o usuário escolher entre um destes alias, talvez por meio de um JOptionPane((>=Java8), e então fazer o load com a respectivo alias escolhido e sua senha.

Alguns exemplos

Considere para os exemplos abaixo que config seja uma instância da implementação da interface NFeConfig.

Status dos webservices

java
NFStatusServicoConsultaRetorno retorno = new WSFacade(config).consultaStatus(DFUnidadeFederativa.SC, DFModelo.NFE);
System.out.println(retorno.getStatus());
System.out.println(retorno.getMotivo());

O Resultado será (caso o webservice responsável por SC esteja OK):

107
Servico em operacao

Envio do lote para o sefaz

Popule os dados do lote a ser enviado para o Sefaz:

java
NFLoteEnvio lote = new NFLoteEnvio();
// setando os dados do lote

Faça o envio do lote através do facade:

java
final NFLoteEnvioRetorno retorno = new WSFacade(config).enviaLote(lote);

Corrige nota

Faça a correção da nota através do facade:

java
final NFEnviaEventoRetorno retorno = new WSFacade(config).corrigeNota(chaveDeAcessoDaNota, textoCorrecao, sequencialEventoDaNota);

Cancela nota

Faça o cancelamento da nota através do facade:

java
final NFCancelamentoRetornoDados retorno = new WSFacade(config).cancelaNota(chaveDeAcessoDaNota, protocoloDaNota, motivoCancelaamento);

Consulta nota por chave de acesso ou NSU

Faça a consulta da nota através do facade:

java
final NFDistribuicaoIntRetorno retorno = new WSFacade(config).consultarDistribuicaoDFe(cnpj, uf, chaveAcesso, nsu, ultNsu);

Consulta CTe

Faça a consulta do CTe através do CTDistribuicaoInt:

java
final CTDistribuicaoInt distDFeInt = new CTDistribuicaoInt();
distDFeInt.setVersao("1.00");
 distDFeInt.setAmbiente(isTeste() ? DFAmbiente.HOMOLOGACAO : DFAmbiente.PRODUCAO);
distDFeInt.setUnidadeFederativaAutor(DFUnidadeFederativa.valueOf("SC"));
distDFeInt.setCnpj("60436332000145");
distDFeInt.setDistribuicao(new CTDistribuicaoNSU().setUltimoNSU("000000000036552");

final String retornoConsulta = WSDistribuicaoCTe.consultar(distDFeInt, new NFeConfig());

Convertendo objetos Java em XML

Qualquer objeto que seja uma representação XML do documento NFe, pode ser obtido seu XML de forma fácil bastando chamar o método toString, por exemplo, para conseguir o XML do lote, invoque o toString

java
NFLoteEnvio lote = new NFLoteEnvio();
// setando os dados do lote
...

// Obtendo o xml do objeto
String xmlGerado = lote.toString();

Convertendo nota XML em Java

Existe uma classe que pode receber um File/String e converter para um objeto NFNota, faça da seguinte forma:

java
final NFNota nota = new DFPersister().read(NFNota.class, xmlNota);
final NFNotaProcessada notaProcessada = new DFPersister().read(NFNotaProcessada.class, xmlNotaProcessada);

Ou desabilitando o modo estrito (habilitado por padrão):

java
final NFNota nota = new DFPersister(false).read(NFNota.class, xmlNota);

Armazenando notas autorizadas

Você precisará armazenar as notas autorizadas por questões legais e também para a geração do DANFE, uma forma de fazer é armazenar o xml das notas ao enviar o lote:

java
final List notas = lote.getNotas();
// Armazena os xmls das notas
...

Ao fazer a consulta do lote, crie um objeto do tipo NFNotaProcessada e adicione o protocolo da nota correspondente, além da nota assinada:

…

Funcionalidades

  • Possui validação de campos a nível de código;
  • Valida o XML de envio de lote através dos xsd's disponibilizados pela Sefaz;
  • Gera o XML dos objetos de maneira simples, invocando o metodo toString() dá conta do recado.
  • Suporta diferentes TimeZones, com a implementacao do devido metodo na classe de configuração (DFConfig e suas subclasses).

Serviços disponíveis

Serviço Status
Envio lote Estável
Consulta lote Estável
Consulta status Estável
Consulta nota Estável
Download nota Estável
Corrige nota Estável
Cancela nota Estável
Inutiliza nota Estável
Consulta cadastro Estável
Manifestação de destinatário Estável

Requisitos

JDK >= 1.8

Maven >= 3.x

Criação do Java KeyStore (JKS)

Para usar os serviços da nota fiscal são necessários dois certificados:

  1. O certificado do cliente que será utilizado para assinar as notas e comunicar com o fisco (fornecido por uma entidade certificadora);
  2. A cadeia de certificados da SEFAZ que queremos acesso;

Os certificados são um ponto crítico já que estes tem validade de apenas um ano (certificado cliente). Além disso as SEFAZ vem trocando suas cadeias de certificado a cada atualização. Dessa forma se surgirem erros de SSL vale a pena verificar se existem novas atualizações de certificados. Para gerar a cadeia de certificados, disponibilizamos um pequeno helper que baixa os certificados das SEFAZ e gera o arquivo automaticamente:

java
public static void main(String args[]){
    try {
        FileUtils.writeByteArrayToFile(new File("/tmp/producao.cacerts"), DFCadeiaCertificados.geraCadeiaCertificados(DFAmbiente.PRODUCAO, "senha"));
        FileUtils.writeByteArrayToFile(new File("/tmp/homologacao.cacerts"), DFCadeiaCertificados.geraCadeiaCertificados(DFAmbiente.HOMOLOGACAO, "senha"));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Javactejavamdfenfe

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言