Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Nota Fiscal Eletrônica em Java. Compativel com Java 1.8

License

NotificationsYou must be signed in to change notification settings

dennnisk/nfe-jdk-1.8

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pom.xml Alterado para 4.0.38-JDK18 e removido o diretório padrão de publicação para um repositório interno.

Documentação do proeto original --

Nota Fiscal Eletrônica

Comunicador de nota fiscal e nota fiscal do consumidor dafazenda.
Java CICoverage StatusMaven CentralApache 2.0 License

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.

Antes de usar

Antes de começar a implementar, é altamente recomendável a leitura da documentação oficial que o governo disponibiliza emhttp://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

<dependency>  <groupId>com.github.wmixvideo</groupId>  <artifactId>nfe</artifactId>  <version>${latest.release}</version></dependency>

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

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

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

Como usar

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

// Exemplo de configuracao para acesso aos serviços da Sefaz.publicclassNFeConfigTesteextendsNFeConfig {privateKeyStorekeyStoreCertificado =null;privateKeyStorekeyStoreCadeia =null;@OverridepublicDFUnidadeFederativagetCUF() {returnDFUnidadeFederativa.SC;    }@OverridepublicStringgetCertificadoSenha() {return"senha_certificado";    }@OverridepublicStringgetCadeiaCertificadosSenha() {return"senha_cadeia";    }@OverridepublicKeyStoregetCertificadoKeyStore()throwsKeyStoreException {if (this.keyStoreCertificado ==null) {this.keyStoreCertificado =KeyStore.getInstance("PKCS12");try (InputStreamcertificadoStream =newFileInputStream("/tmp/certificado.pfx")) {this.keyStoreCertificado.load(certificadoStream,this.getCertificadoSenha().toCharArray());            }catch (CertificateException |NoSuchAlgorithmException |IOExceptione) {this.keyStoreCadeia =null;thrownewKeyStoreException("Nao foi possibel montar o KeyStore com a cadeia de certificados",e);            }        }returnthis.keyStoreCertificado;    }@OverridepublicKeyStoregetCadeiaCertificadosKeyStore()throwsKeyStoreException {if (this.keyStoreCadeia ==null) {this.keyStoreCadeia =KeyStore.getInstance("JKS");try (InputStreamcadeia =newFileInputStream("/tmp/cadeia.jks")) {this.keyStoreCadeia.load(cadeia,this.getCadeiaCertificadosSenha().toCharArray());            }catch (CertificateException |NoSuchAlgorithmException |IOExceptione) {this.keyStoreCadeia =null;thrownewKeyStoreException("Nao foi possibel montar o KeyStore com o certificado",e);            }        }returnthis.keyStoreCadeia;    }}

Configurar pelo repositório de certificados do Windows:

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

KeyStorekeyStoreCert =KeyStore.getInstance("Windows-MY","SunMSCAPI");keyStoreCert.load(null,null);Enumeration<String>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(<java7)ou de um ChoiceDialog(>=Java8), e então fazer o load com a respectivo alias escolhido e sua senha.

Alguns exemplos

Considere para os exemplos abaixo queconfig seja uma instância da implementação da interfaceNFeConfig.

Status dos webservices

NFStatusServicoConsultaRetornoretorno =newWSFacade(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):

107Servico em operacao

Envio do lote para o sefaz

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

NFLoteEnviolote =newNFLoteEnvio();// setando os dados do lote

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

finalNFLoteEnvioRetornoretorno =newWSFacade(config).enviaLote(lote);

Corrige nota

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

finalNFEnviaEventoRetornoretorno =newWSFacade(config).corrigeNota(chaveDeAcessoDaNota,textoCorrecao,sequencialEventoDaNota);

Cancela nota

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

finalNFCancelamentoRetornoDadosretorno =newWSFacade(config).cancelaNota(chaveDeAcessoDaNota,protocoloDaNota,motivoCancelaamento);

Consulta nota por chave de acesso ou NSU

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

finalNFDistribuicaoIntRetornoretorno =newWSFacade(config).consultarDistribuicaoDFe(cnpj,uf,chaveAcesso,nsu,ultNsu);

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étodotoString, por exemplo, para conseguir o XML do lote, invoque o toString

NFLoteEnviolote =newNFLoteEnvio();// setando os dados do lote...// Obtendo o xml do objetoStringxmlGerado =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:

finalNFNotanota =newDFPersister().read(NFNota.class,xmlNota);finalNFNotaProcessadanotaProcessada =newDFPersister().read(NFNotaProcessada.class,xmlNotaProcessada);

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

finalNFNotanota =newDFPersister(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:

finalList<NFNota>notas =lote.getNotas();// Armazena os xmls das notas...

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

// Carregue o xml da nota do local que foi armazenadofinalStringxmlNotaRecuperada;// Assine a notafinalStringxmlNotaRecuperadaAssinada =newAssinaturaDigital(config).assinarDocumento(xmlNotaRecuperada);// Converta para objeto javafinalNFNotanotaRecuperadaAssinada =newDFPersister().read(NFNota.class,xmlNotaRecuperadaAssinada);// Crie o objeto NFNotaProcessadafinalNFNotaProcessadanotaProcessada =newNFNotaProcessada();notaProcessada.setVersao(newBigDecimal(NFeConfig.VERSAO_NFE));notaProcessada.setProtocolo(protocolo);notaProcessada.setNota(notaRecuperadaAssinada);// Obtenha o xml da nota com protocoloStringxmlNotaProcessadaPeloSefaz =notaProcessada.toString();

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çoStatus
Envio loteEstável
Consulta loteEstável
Consulta statusEstável
Consulta notaEstável
Download notaEstável
Corrige notaEstável
Cancela notaEstável
Inutiliza notaEstável
Consulta cadastroEstável
Manifestação de destinatárioEstá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:

publicstaticvoidmain(Stringargs[]){try {FileUtils.writeByteArrayToFile(newFile("/tmp/producao.cacerts"),DFCadeiaCertificados.geraCadeiaCertificados(DFAmbiente.PRODUCAO,"senha"));FileUtils.writeByteArrayToFile(newFile("/tmp/homologacao.cacerts"),DFCadeiaCertificados.geraCadeiaCertificados(DFAmbiente.HOMOLOGACAO,"senha"));    }catch (Exceptione) {e.printStackTrace();    }}

About

Nota Fiscal Eletrônica em Java. Compativel com Java 1.8

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java100.0%

[8]ページ先頭

©2009-2025 Movatter.jp