Hoje o Java é a linguagem de programação mais popular no mundo, sendo utilizada por empresas de todos os portes para desenvolvimento de todo tipo de sistemas.
A emissão de NFe, NFSe ou NFCe utilizando Java pode ser feita de forma direta através da comunicação sem intermediários com as receitas estaduais ou prefeituras, porém existem inúmeras vantagens em utilizar uma API de terceiros para esta emissão.
A Focus NFe possui uma API simples e completa para emissão destes documentos fiscais, abaixo você irá encontrar exemplos funcionais de código-fonte em Java utilizando a nossa API.
importjava.util.HashMap;importorg.codehaus.jettison.json.JSONException;importorg.codehaus.jettison.json.JSONObject;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importcom.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;importcom.sun.jersey.api.client.config.DefaultClientConfig;importcom.sun.jersey.api.client.filter.HTTPBasicAuthFilter;publicclassNFeAutorizar{publicstaticvoidmain(String[]args)throwsJSONException{Stringlogin="Token_obtido_no_cadastro_da_empresa";/* Substituir pela sua identificação interna da nota. */Stringref="12345";/* Para ambiente de produção use a variável abaixo:
String server = "https://api.focusnfe.com.br/"; */Stringserver="https://homologacao.focusnfe.com.br/";Stringurl=server.concat("v2/nfe?ref="+ref);/* Configuração para realizar o HTTP BasicAuth. */Objectconfig=newDefaultClientConfig();Clientclient=Client.create((ClientConfig)config);client.addFilter(newHTTPBasicAuthFilter(login,""));/* Aqui são criados as hash's que receberão os dados da nota. */HashMap<String,String>nfe=newHashMap<String,String>();HashMap<String,String>itens=newHashMap<String,String>();nfe.put("data_emissao","2018-01-16T09:38:00");nfe.put("natureza_operacao","Remessa de Produtos");nfe.put("forma_pagamento","0");nfe.put("tipo_documento","1");nfe.put("finalidade_emissao","1");nfe.put("cnpj_emitente","51916585000125");nfe.put("nome_emitente","ACME LTDA");nfe.put("nome_fantasia_emitente","ACME TESTES");nfe.put("logradouro_emitente","Rua Interventor Manoel Ribas");nfe.put("numero_emitente","1355 ");nfe.put("bairro_emitente","Santa Felicidade");nfe.put("municipio_emitente","Curitiba");nfe.put("uf_emitente","PR");nfe.put("cep_emitente","82320030");nfe.put("telefone_emitente","44912345678");nfe.put("inscricao_estadual_emitente","1234567");nfe.put("nome_destinatario","NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");nfe.put("cpf_destinatario","51966818092");nfe.put("inscricao_estadual_destinatario","ISENTO");nfe.put("telefone_destinatario","19912345678");nfe.put("logradouro_destinatario","Rua Leonor Campos");nfe.put("numero_destinatario","29");nfe.put("bairro_destinatario","Swiss Park");nfe.put("municipio_destinatario","Campinas");nfe.put("uf_destinatario","SP");nfe.put("pais_destinatario","Brasil");nfe.put("cep_destinatario","13049555");nfe.put("icms_base_calculo","0");nfe.put("icms_valor_total","0");nfe.put("icms_base_calculo_st","0");nfe.put("icms_valor_total_st","0");nfe.put("icms_modalidade_base_calculo","0");nfe.put("icms_valor","0");nfe.put("valor_frete","0");nfe.put("valor_seguro","0");nfe.put("valor_total","1");nfe.put("valor_produtos","1");nfe.put("valor_desconto","0.00");nfe.put("valor_ipi","0");nfe.put("modalidade_frete","1");itens.put("numero_item","128");itens.put("codigo_produto","1007");itens.put("descricao","Multi Mist 500g");itens.put("cfop","6102");itens.put("unidade_comercial","un");itens.put("quantidade_comercial","1");itens.put("valor_unitario_comercial","1");itens.put("valor_unitario_tributavel","1");itens.put("unidade_tributavel","un");itens.put("codigo_ncm","11041900");itens.put("valor_frete","0");itens.put("valor_desconto","0.00");itens.put("quantidade_tributavel","1");itens.put("valor_bruto","1");itens.put("icms_situacao_tributaria","103");itens.put("icms_origem","0");itens.put("pis_situacao_tributaria","07");itens.put("cofins_situacao_tributaria","07");itens.put("ipi_situacao_tributaria","53");itens.put("ipi_codigo_enquadramento_legal","999");/* Depois de fazer o input dos dados, são criados os objetos JSON já com os valores das hash's. */JSONObjectjson=newJSONObject(nfe);JSONObjectjsonItens=newJSONObject(itens);/* Aqui adicionamos os objetos JSON nos campos da API como array no JSON principal. */json.append("items",jsonItens);/* É recomendado verificar como os dados foram gerados em JSON e se ele está seguindo a estrutura especificada em nossa documentação.
System.out.print(json); */WebResourcerequest=client.resource(url);ClientResponseresposta=request.post(ClientResponse.class,json);inthttpCode=resposta.getStatus();Stringbody=resposta.getEntity(String.class);/* As três linhas a seguir exibem as informações retornadas pela nossa API.
* Aqui o seu sistema deverá interpretar e lidar com o retorno. */System.out.print("HTTP Code: ");System.out.print(httpCode);System.out.printf(body);}}
importjava.util.HashMap;importorg.codehaus.jettison.json.JSONException;importorg.codehaus.jettison.json.JSONObject;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importcom.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;importcom.sun.jersey.api.client.config.DefaultClientConfig;importcom.sun.jersey.api.client.filter.HTTPBasicAuthFilter;publicclassNFSeAutorizar{publicstaticvoidmain(String[]args)throwsJSONException{Stringlogin="Token_obtido_no_cadastro_da_empresa";/* Substituir pela sua identificação interna da nota. */Stringref="12345";/* Para ambiente de produção use a variável abaixo:
String server = "https://api.focusnfe.com.br/"; */Stringserver="https://homologacao.focusnfe.com.br/";Stringurl=server.concat("v2/nfse?ref="+ref);/* Configuração para realizar o HTTP BasicAuth. */Objectconfig=newDefaultClientConfig();Clientclient=Client.create((ClientConfig)config);client.addFilter(newHTTPBasicAuthFilter(login,""));/* Aqui são criados as hash's que receberão os dados da nota. */HashMap<String,String>nfse=newHashMap<String,String>();HashMap<String,String>prestador=newHashMap<String,String>();HashMap<String,String>tomador=newHashMap<String,String>();HashMap<String,String>tomadorEndereco=newHashMap<String,String>();HashMap<String,String>servico=newHashMap<String,String>();nfse.put("data_emissao","2018-01-15T17:40:00");nfse.put("natureza_operacao","1");prestador.put("cnpj","51916585000125");prestador.put("inscricao_municipal","123456");prestador.put("codigo_municipio","4128104");tomador.put("cpf","51966818092");tomador.put("razao_social","ACME LTDA");tomador.put("email","email-do-tomador@google.com.br");tomadorEndereco.put("bairro","Jardim America");tomadorEndereco.put("cep","82620150");tomadorEndereco.put("codigo_municipio","4106902");tomadorEndereco.put("logradouro","Rua Paulo Centrone");tomadorEndereco.put("numero","168");tomadorEndereco.put("uf","PR");servico.put("discriminacao","Teste de servico");servico.put("aliquota","3.00");servico.put("base_calculo","1.0");servico.put("valor_iss","0");servico.put("iss_retido","false");servico.put("codigo_tributario_municipio","080101");servico.put("item_lista_servico","0801");servico.put("valor_servicos","1.0");servico.put("valor_liquido","1.0");/* Depois de fazer o input dos dados, são criados os objetos JSON já com os valores das hash's. */JSONObjectjson=newJSONObject(nfse);JSONObjectjsonPrestador=newJSONObject(prestador);JSONObjectjsonTomador=newJSONObject(tomador);JSONObjectjsonTomadorEndereco=newJSONObject(tomadorEndereco);JSONObjectjsonServico=newJSONObject(servico);/* Aqui adicionamos os objetos JSON nos campos da API como array no JSON principal. */json.accumulate("prestador",jsonPrestador);json.accumulate("tomador",jsonTomador);jsonTomador.accumulate("endereco",jsonTomadorEndereco);json.accumulate("servico",jsonServico);/* É recomendado verificar como os dados foram gerados em JSON e se ele está seguindo a estrutura especificada em nossa documentação.
System.out.print(json); */WebResourcerequest=client.resource(url);ClientResponseresposta=request.post(ClientResponse.class,json);inthttpCode=resposta.getStatus();Stringbody=resposta.getEntity(String.class);/* As três linhas a seguir exibem as informações retornadas pela nossa API.
* Aqui o seu sistema deverá interpretar e lidar com o retorno. */System.out.print("HTTP Code: ");System.out.print(httpCode);System.out.printf(body);}}
importjava.util.HashMap;importorg.codehaus.jettison.json.JSONException;importorg.codehaus.jettison.json.JSONObject;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importcom.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;importcom.sun.jersey.api.client.config.DefaultClientConfig;importcom.sun.jersey.api.client.filter.HTTPBasicAuthFilter;publicclassNFCeAutorizar{publicstaticvoidmain(String[]args)throwsJSONException{Stringlogin="Token_obtido_no_cadastro_da_empresa";/* Substituir pela sua identificação interna da nota. */Stringref="12345";/* Para ambiente de produção use a variável abaixo:
String server = "https://api.focusnfe.com.br/"; */Stringserver="https://homologacao.focusnfe.com.br/";Stringurl=server.concat("v2/nfce?ref="+ref+"&completa=1");/* Configuração para realizar o HTTP BasicAuth. */Objectconfig=newDefaultClientConfig();Clientclient=Client.create((ClientConfig)config);client.addFilter(newHTTPBasicAuthFilter(login,""));/* Aqui são criados as hash's que receberão os dados da nota. */HashMap<String,String>nfce=newHashMap<String,String>();HashMap<String,String>itens=newHashMap<String,String>();HashMap<String,String>formasPagamento=newHashMap<String,String>();nfce.put("data_emissao","2018-01-15T16:25:00");nfce.put("consumidor_final","1");nfce.put("modalidade_frete","9");nfce.put("natureza_operacao","Venda ao Consumidor");nfce.put("tipo_documento","1");nfce.put("finalidade_emissao","1");nfce.put("presenca_comprador","1");nfce.put("indicador_inscricao_estadual_destinatario","9");nfce.put("cnpj_emitente","51916585000125");nfce.put("cpf_destinatario","");nfce.put("id_estrangeiro_destinatario","1234567");nfce.put("nome_destinatario","NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");nfce.put("informacoes_adicionais_contribuinte","Documento emitido por ME ou EPP optante pelo Simples Nacional nao gera direito a credito fiscal de ICMS lei 123/2006.");nfce.put("valor_produtos","1.0000");nfce.put("valor_desconto","0.0000");nfce.put("valor_total","1.0000");nfce.put("forma_pagamento","0");nfce.put("icms_base_calculo","0.0000");nfce.put("icms_valor_total","0.0000");nfce.put("icms_base_calculo_st","0.0000");nfce.put("icms_valor_total_st","0.0");nfce.put("icms_modalidade_base_calculo","3");nfce.put("valor_frete","0.0");itens.put("numero_item","1");itens.put("unidade_comercial","PC");itens.put("unidade_tributavel","PC");itens.put("codigo_ncm","94019090");itens.put("codigo_produto","Div.13350000");itens.put("descricao","NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");itens.put("cfop","5102");itens.put("valor_unitario_comercial","1.0000000000");itens.put("valor_unitario_tributavel","1.0000000000");itens.put("valor_bruto","1.0000");itens.put("quantidade_comercial","1.0000");itens.put("quantidade_tributavel","1.0000");itens.put("quantidade","1.0000");itens.put("icms_origem","0");itens.put("icms_base_calculo","1.00");itens.put("icms_modalidade_base_calculo","3");itens.put("valor_frete","0.0");itens.put("valor_outras_despesas","0.0");itens.put("icms_situacao_tributaria","102");formasPagamento.put("forma_pagamento","99");formasPagamento.put("valor_pagamento","1.0000");/* Depois de fazer o input dos dados, são criados os objetos JSON já com os valores das hash's. */JSONObjectjson=newJSONObject(nfce);JSONObjectjsonItens=newJSONObject(itens);JSONObjectjsonPagamento=newJSONObject(formasPagamento);/* Aqui adicionamos os objetos JSON nos campos da API como array no JSON principal. */json.append("items",jsonItens);json.append("formas_pagamento",jsonPagamento);/* É recomendado verificar como os dados foram gerados em JSON e se ele está seguindo a estrutura especificada em nossa documentação.
System.out.print(json); */WebResourcerequest=client.resource(url);ClientResponseresposta=request.post(ClientResponse.class,json);inthttpCode=resposta.getStatus();Stringbody=resposta.getEntity(String.class);/* As três linhas a seguir exibem as informações retornadas pela nossa API.
* Aqui o seu sistema deverá interpretar e lidar com o retorno. */System.out.print("HTTP Code: ");System.out.print(httpCode);System.out.printf(body);}}
importjava.util.HashMap;importorg.codehaus.jettison.json.JSONException;importorg.codehaus.jettison.json.JSONObject;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importcom.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;importcom.sun.jersey.api.client.config.DefaultClientConfig;importcom.sun.jersey.api.client.filter.HTTPBasicAuthFilter;publicclassAutorizar{publicstaticvoidmain(String[]args)throwsJSONException{Stringlogin="Token_obtido_no_cadastro_da_empresa";/* Substituir pela sua identificação interno do CTe. */Stringref="12345";/* Para ambiente de produção use a variável abaixo:
String server = "https://api.focusnfe.com.br/"; */Stringserver="https://homologacao.focusnfe.com.br/";Stringurl=server.concat("v2/cte_os?ref="+ref);/* Configuração para realizar o HTTP BasicAuth. */Objectconfig=newDefaultClientConfig();Clientclient=Client.create((ClientConfig)config);client.addFilter(newHTTPBasicAuthFilter(login,""));/* Aqui são criados as hash's que receberão os dados do CTe. */HashMap<String,String>cte=newHashMap<String,String>();HashMap<String,String>seguroCarga=newHashMap<String,String>();HashMap<String,String>documentosReferenciados=newHashMap<String,String>();cte.put("bairro_emitente","Sao Cristova");cte.put("bairro_tomador","Bacacheri");cte.put("cep_emitente","99880077");cte.put("cep_tomador","88991188");cte.put("cfop","5353");cte.put("cnpj_emitente","51916585000125");cte.put("cnpj_tomador","51966818092777");cte.put("codigo_municipio_emitente","2927408");cte.put("codigo_municipio_envio","5200050");cte.put("codigo_municipio_fim","3100104");cte.put("codigo_municipio_inicio","5200050");cte.put("codigo_municipio_tomador","4106902");cte.put("codigo_pais_tomador","1058");cte.put("complemento_emitente","Andar 19 - sala 23");cte.put("data_emissao","2018-06-18T09:17:00");cte.put("descricao_servico","Descricao do seu servico aqui");cte.put("funcionario_emissor","Nome do funcionario que fez a emissao");cte.put("icms_aliquota","17.00");cte.put("icms_base_calculo","1.00");cte.put("icms_situacao_tributaria","00");cte.put("icms_valor","0.17");cte.put("indicador_inscricao_estadual_tomador","9");cte.put("inscricao_estadual_emitente","12345678");cte.put("logradouro_emitente","Aeroporto Internacional de Salvador");cte.put("logradouro_tomador","Rua Joao Dalegrave");cte.put("modal","02");cte.put("municipio_emitente","Salvador");cte.put("municipio_envio","Abadia de Goias");cte.put("municipio_fim","Abadia dos Dourados");cte.put("municipio_inicio","Abadia de Goias");cte.put("municipio_tomador","Curitiba");cte.put("natureza_operacao","PREST. DE SERV. TRANSPORTE A ESTAB. COMERCIAL");cte.put("nome_emitente","ACME LTDA");cte.put("nome_fantasia_emitente","ACME");cte.put("nome_fantasia_tomador","Nome do tomador do servico aqui");cte.put("nome_tomador","NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");cte.put("numero_emitente","S/N");cte.put("numero_fatura","1");cte.put("numero_tomador","1");cte.put("pais_tomador","BRASIL");cte.put("quantidade","1.0000");cte.put("telefone_emitente","4133336666");cte.put("tipo_documento","0");cte.put("tipo_servico","6");cte.put("uf_emitente","BA");cte.put("uf_envio","GO");cte.put("uf_fim","MG");cte.put("uf_inicio","GO");cte.put("uf_tomador","PR");cte.put("valor_desconto_fatura","0.00");cte.put("valor_inss","0.10");cte.put("valor_liquido_fatura","1.00");cte.put("valor_original_fatura","1.00");cte.put("valor_receber","1.00");cte.put("valor_total","1.00");cte.put("valor_total_tributos","0.00");segurosCarga.put("nome_seguradora","Nome da seguradora aqui");segurosCarga.put("numero_apolice","12345");segurosCarga.put("responsavel_seguro","4");documentosReferenciados.put("data_emissao","2018-06-18");documentosReferenciados.put("numero","1");documentosReferenciados.put("serie","1");documentosReferenciados.put("subserie","1");documentosReferenciados.put("valor","1.00");/* Depois de fazer o input dos dados, são criados os objetos JSON já com os valores das hash's. */JSONObjectjson=newJSONObject(cte);JSONObjectjsonSegurosCarga=newJSONObject(segurosCarga);JSONObjectjsonDocumentosReferenciados=newJSONObject(documentosReferenciados);/* Aqui adicionamos os objetos JSON nos campos da API como array no JSON principal. */json.append("segurosCarga",jsonSegurosCarga);json.append("documentosReferenciados",jsonDocumentosReferenciados);/* É recomendado verificar como os dados foram gerados em JSON e se ele está seguindo a estrutura especificada em nossa documentação.*///System.out.print(json);WebResourcerequest=client.resource(url);ClientResponseresposta=request.post(ClientResponse.class,json);inthttpCode=resposta.getStatus();Stringbody=resposta.getEntity(String.class);/* As três linhas a seguir exibem as informações retornadas pela nossa API.
* Aqui o seu sistema deverá interpretar e lidar com o retorno. */System.out.print("HTTP Code: ");System.out.print(httpCode);System.out.printf(body);}}
Faça parte você também
Junte-se à comunidade de desenvolvedores que deu adeus à burocracia das notas fiscais.