├── NFeJava.java ├── README.md └── WebmaniaBR ├── ExemploJSON ├── cancelarNotaFiscal.json ├── cartaCorrecao.json ├── consultarNotaFiscal.json ├── emitirNotaFiscal.json ├── emitirNotaFiscalAjuste.json ├── emitirNotaFiscalComplementar.json ├── emitirNotaFiscalComplementar_Impostos.json ├── emitirNotaFiscalComplementar_PrecoQuantidade.json ├── emitirNotaFiscalDevolucao.json ├── emitirNotaFiscal_Armamentos.json ├── emitirNotaFiscal_Combustivel.json ├── emitirNotaFiscal_Medicamentos.json ├── emitirNotaFiscal_Rastreabilidade.json ├── emitirNotaFiscal_VeiculosNovos.json └── inutilizarNumeracao.json ├── NFe.java └── config └── Credenciais.java /NFeJava.java: -------------------------------------------------------------------------------- 1 | // Classe NFe 2 | import WebmaniaBR.NFe; 3 | 4 | public class NFeJava { 5 | 6 | public static void main(String[] args) throws Exception { 7 | 8 | // Emissão de Nota fiscal 9 | NFe nfe = new NFe(); 10 | System.out.println(nfe.emitirNotaFiscal()); 11 | 12 | // Consultar Status SEFAZ 13 | //NFe nfe = new NFe(); 14 | //System.out.println(nfe.statusSefaz()); 15 | 16 | // Consultar Validade Certificado A1 17 | //NFe nfe = new NFe(); 18 | //System.out.println(nfe.validadeCertificadoA1()); 19 | 20 | // Consultar Nota Fiscal 21 | //NFe nfe = new NFe(); 22 | //System.out.println(nfe.consultarNotaFiscal()); 23 | 24 | } 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # NFe-Java 6 | 7 | Através do emissor de Nota Fiscal da Webmania®, você conta com a emissão e arquivamento das suas notas fiscais, cálculo automático de impostos, geração do Danfe para impressão e envio automático de e-mails para os clientes. Realize a integração com o seu sistema utilizando a nossa REST API. 8 | 9 | - Emissor de Nota Fiscal Webmania®: [Saiba mais](https://webmaniabr.com/nota-fiscal-eletronica/) 10 | - Documentação REST API: [Visualizar](https://webmaniabr.com/docs/rest-api-nfe/) 11 | 12 | ## Requisitos 13 | 14 | - Contrate um dos planos de Nota Fiscal Eletrônica da Webmania®: [Assine agora mesmo](https://webmaniabr.com/nota-fiscal-eletronica/#plans-section). 15 | - Instalar as bibliotecas [org.JSON](https://github.com/stleary/JSON-java) e [org.json.simple.parser.JSONParser](https://jar-download.com/maven-repository-class-search.php?search_box=%20org.json.simple.parser.JSONParser). 16 | - Realize a integração com o seu sistema. 17 | 18 | ## Estrutura 19 | 20 | - **NFeJava.java**: Classe principal para execução do programa. 21 | - **WebmaniaBR/NFe.java**: Classe com todos os métodos, como Emissão de Nota Fiscal, Consultar Status SEFAZ, Validar Certificado A1, entre outros. 22 | - **WebmaniaBR/config/Credenciais.java**: Classe para configuração de credenciais de acesso e também para o tratamento de conexão com a API. 23 | - **WebmaniaBR/ExemploJSON/**: Diretório com exemplos de JSON para ser enviado a API. 24 | 25 | ## Exemplos 26 | 27 | Desenvolvimento baseado na classe [HttpURLConnection](https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html). 28 | 29 | Os exemplos abaixo são os métodos da classe NFe. 30 | 31 | - **cancelarNotaFiscal**: Cancelar Nota Fiscal enviada ao SEFAZ. 32 | - **cartaCorrecao**: Corrigir uma Nota Fiscal junto ao SEFAZ. 33 | - **consultarNotaFiscal**: Consulta a Nota Fiscal enviada para o SEFAZ. 34 | - **emitirNotaFiscal_Armamentos**: Emissão da Nota Fiscal com detalhamento específico de Armamentos. 35 | - **emitirNotaFiscal_Combustivel**: Emissão da Nota Fiscal com detalhamento específico de Combustivel. 36 | - **emitirNotaFiscal_Medicamentos**: Emissão da Nota Fiscal com detalhamento específico de Medicamentos. 37 | - **emitirNotaFiscal_Rastreabilidade**: Emissão da Nota Fiscal com detalhamento específico de Rastreabilidade. 38 | - **emitirNotaFiscal_VeiculosNovos**: Emissão da Nota Fiscal com detalhamento específico de Veiculos Novos. 39 | - **emitirNotaFiscal**: Emissão da Nota Fiscal junto ao SEFAZ. 40 | - **emitirNotaFiscalAjuste**: Emite uma nota fiscal de ajuste. 41 | - **emitirNotaFiscalComplementar_Imposto**: Emite uma Nota Fiscal complementar. 42 | - **emitirNotaFiscalComplementar_PrecoQuantidade**: Emite uma Nota Fiscal complementar. 43 | - **emitirNotaFiscalDevolucao**: Emissão de Nota Fiscal de devolução junto ao SEFAZ. 44 | - **inutilizarNumeracao**: Inutilizar sequência de numeração junto ao SEFAZ. 45 | - **statusSefaz**: Verifica se o Sefaz está Online ou Offline. 46 | - **validadeCertificadoA1**: Verifica se o Certificado A1 é válido e quantos dias faltam para expirar. 47 | 48 | ## Suporte 49 | 50 | Qualquer dúvida entre em contato na nossa [Central de Ajuda](https://ajuda.webmaniabr.com) ou acesse o [Painel de Controle](https://webmaniabr.com/painel/) para conversar em tempo real no Chat ou Abrir um chamado. 51 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/cancelarNotaFiscal.json: -------------------------------------------------------------------------------- 1 | { 2 | "chave": "00000000000000000000000000000000000000000000", 3 | "motivo": "Cancelamento por motivos administrativos." 4 | } 5 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/cartaCorrecao.json: -------------------------------------------------------------------------------- 1 | { 2 | "chave": "00000000000000000000000000000000000000000000", 3 | "correcao": "O CFOP correto é 5.102 referente a revenda tributada no mesmo estado." 4 | } 5 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/consultarNotaFiscal.json: -------------------------------------------------------------------------------- 1 | { 2 | "chave": "00000000000000000000000000000000000000000000" 3 | } 4 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF1000" 35 | }, 36 | { 37 | "nome": "Nome do produto", 38 | "codigo": "nome-do-produto", 39 | "ncm": "6109.10.00", 40 | "cest": "28.038.00", 41 | "quantidade": "1", 42 | "unidade": "UN", 43 | "peso": "0.200", 44 | "origem": 0, 45 | "subtotal": "29.90", 46 | "total": "29.90", 47 | "impostos": { 48 | "icms": { 49 | "codigo_cfop": "6.102", 50 | "situacao_tributaria": "102" 51 | }, 52 | "ipi": { 53 | "situacao_tributaria": "99", 54 | "codigo_enquadramento": "999", 55 | "aliquota": "0.00" 56 | }, 57 | "pis": { 58 | "situacao_tributaria": "99", 59 | "aliquota": "0.00" 60 | }, 61 | "cofins": { 62 | "situacao_tributaria": "99", 63 | "aliquota": "0.00" 64 | } 65 | } 66 | } 67 | ], 68 | "pedido": { 69 | "pagamento": 0, 70 | "presenca": 2, 71 | "modalidade_frete": 0, 72 | "frete": "12.56", 73 | "desconto": "10.00", 74 | "total": "174.60", 75 | "pagamento": 0, 76 | "forma_pagamento": 15 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscalAjuste.json: -------------------------------------------------------------------------------- 1 | { 2 | "operacao": 1, 3 | "natureza_operacao": "CREDITO ICMS ESTOQUE", 4 | "codigo_cfop": 2.949, 5 | "valor_icms": 1000, 6 | "ambiente": 2, 7 | "cliente": { 8 | "cpf": "000.000.000-00", 9 | "nome_completo": "Nome completo", 10 | "endereco": "Av. Brg. Faria Lima", 11 | "complemento": "Escritório", 12 | "numero": 1000, 13 | "bairro": "Itaim Bibi", 14 | "cidade": "São Paulo", 15 | "uf": "SP", 16 | "cep": "00000-000", 17 | "telefone": "(00) 0000-0000", 18 | "email": "nome@email.com" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscalComplementar.json: -------------------------------------------------------------------------------- 1 | { 2 | "nfe_referenciada": "00000000000000000000000000000000000000000000", 3 | "operacao": 1, 4 | "natureza_operacao": "Natureza da operação", 5 | "ambiente": 2, 6 | "cliente": { 7 | "cpf": "000.000.000-00", 8 | "nome_completo": "Nome completo", 9 | "endereco": "Av. Brg. Faria Lima", 10 | "complemento": "Escritorio", 11 | "numero": 1000, 12 | "bairro": "Itaim Bibi", 13 | "cidade": "São Paulo", 14 | "uf": "SP", 15 | "cep": "00000-000", 16 | "telefone": "(00) 0000-0000", 17 | "email": "nome@email.com" 18 | }, 19 | "impostos": { 20 | "icms": { 21 | "codigo_cfop": "6.102", 22 | "situacao_tributaria": "900", 23 | "bc_icms": "100.00", 24 | "valor_icms": "18.00" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscalComplementar_Impostos.json: -------------------------------------------------------------------------------- 1 | { 2 | "nfe_referenciada": "00000000000000000000000000000000000000000000", 3 | "operacao": 1, 4 | "natureza_operacao": "Natureza da operação", 5 | "ambiente": 2, 6 | "cliente": { 7 | "cpf": "000.000.000-00", 8 | "nome_completo": "Nome completo", 9 | "endereco": "Av. Brg. Faria Lima", 10 | "complemento": "Escritorio", 11 | "numero": 1000, 12 | "bairro": "Itaim Bibi", 13 | "cidade": "São Paulo", 14 | "uf": "SP", 15 | "cep": "00000-000", 16 | "telefone": "(00) 0000-0000", 17 | "email": "nome@email.com" 18 | }, 19 | "impostos": { 20 | "icms": { 21 | "codigo_cfop": "6.102", 22 | "situacao_tributaria": "900", 23 | "bc_icms": "100.00", 24 | "valor_icms": "18.00" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscalComplementar_PrecoQuantidade.json: -------------------------------------------------------------------------------- 1 | { 2 | "nfe_referenciada": "00000000000000000000000000000000000000000000", 3 | "operacao": 1, 4 | "natureza_operacao": "Natureza da operação", 5 | "ambiente": 2, 6 | "cliente": { 7 | "cpf": "000.000.000-00", 8 | "nome_completo": "Nome completo", 9 | "endereco": "Av. Brg. Faria Lima", 10 | "complemento": "Escritorio", 11 | "numero": 1000, 12 | "bairro": "Itaim Bibi", 13 | "cidade": "São Paulo", 14 | "uf": "SP", 15 | "cep": "00000-000", 16 | "telefone": "(00) 0000-0000", 17 | "email": "nome@email.com" 18 | }, 19 | "produtos": [{ 20 | "nome": "Nome do produto", 21 | "codigo": "nome-do-produto", 22 | "ncm": "6109.10.00", 23 | "cest": "28.038.00", 24 | "quantidade": 1, 25 | "unidade": "UN", 26 | "origem": 0, 27 | "subtotal": "29.90", 28 | "total": "29.90", 29 | "impostos": { 30 | "icms": { 31 | "codigo_cfop": "6.102", 32 | "situacao_tributaria": "102" 33 | } 34 | } 35 | }] 36 | } 37 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscalDevolucao.json: -------------------------------------------------------------------------------- 1 | { 2 | "chave": "00000000000000000000000000000000000000000000", 3 | "natureza_operacao": "Devolução de venda de produção do estabelecimento", 4 | "codigo_cfop": "1.202", 5 | "produtos": [ 2, 3 ], 6 | "quantidade": [ 5, 1 ], 7 | "ambiente": "2", 8 | "volume": "1" 9 | } 10 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal_Armamentos.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF2892", 35 | "armamentos": { 36 | "tipo": 0, 37 | "serie_arma": "000000", 38 | "serie_cano": "000000", 39 | "descricao": "..." 40 | } 41 | } 42 | ], 43 | "pedido": { 44 | "pagamento": 0, 45 | "presenca": 2, 46 | "modalidade_frete": 0, 47 | "frete": "12.56", 48 | "desconto": "10.00", 49 | "total": "174.60" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal_Combustivel.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF2892", 35 | "combustiveis": { 36 | "codigo_anp": "000001", 37 | "descricao_anp": "Descrição do produto conforme ANP", 38 | "uf_consumo": "SP" 39 | } 40 | } 41 | ], 42 | "pedido": { 43 | "pagamento": 0, 44 | "presenca": 2, 45 | "modalidade_frete": 0, 46 | "frete": "12.56", 47 | "desconto": "10.00", 48 | "total": "174.60" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal_Medicamentos.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF2892", 35 | "medicamento": { 36 | "codigo_anvisa": "1234567891234", 37 | "pmc": "10.00" 38 | }, 39 | "rastro": { 40 | "lote": "000001", 41 | "quantidade": "100", 42 | "data_fabricacao": "2018-01-01", 43 | "data_validade": "2020-01-01" 44 | } 45 | } 46 | ], 47 | "pedido": { 48 | "pagamento": 0, 49 | "presenca": 2, 50 | "modalidade_frete": 0, 51 | "frete": "12.56", 52 | "desconto": "10.00", 53 | "total": "174.60" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal_Rastreabilidade.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF2892", 35 | "rastro": { 36 | "lote": "000001", 37 | "quantidade": "100", 38 | "data_fabricacao": "2018-01-01", 39 | "data_validade": "2020-01-01" 40 | } 41 | } 42 | ], 43 | "pedido": { 44 | "pagamento": 0, 45 | "presenca": 2, 46 | "modalidade_frete": 0, 47 | "frete": "12.56", 48 | "desconto": "10.00", 49 | "total": "174.60" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/emitirNotaFiscal_VeiculosNovos.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": 1137, 3 | "url_notificacao": "http://meudominio.com/retorno.php", 4 | "operacao": 1, 5 | "natureza_operacao": "Venda de produção do estabelecimento", 6 | "modelo": 1, 7 | "finalidade": 1, 8 | "ambiente": 2, 9 | "cliente": { 10 | "cpf": "000.000.000-00", 11 | "nome_completo": "Nome do Cliente", 12 | "endereco": "Av. Brg. Faria Lima", 13 | "complemento": "Escritório", 14 | "numero": 1000, 15 | "bairro": "Itaim Bibi", 16 | "cidade": "São Paulo", 17 | "uf": "SP", 18 | "cep": "00000-000", 19 | "telefone": "(00) 0000-0000", 20 | "email": "nome@email.com" 21 | }, 22 | "produtos": [ 23 | { 24 | "nome": "Nome do produto", 25 | "codigo": "nome-do-produto", 26 | "ncm": "6109.10.00", 27 | "cest": "28.038.00", 28 | "quantidade": 3, 29 | "unidade": "UN", 30 | "peso": "0.800", 31 | "origem": 0, 32 | "subtotal": "44.90", 33 | "total": "134.70", 34 | "classe_imposto": "REF2892", 35 | "veiculos_novos": { 36 | "tipo_operacao": "1", 37 | "chassi": "00000000000000000", 38 | "cor": "A1", 39 | "cor_descricao": "Descrição da Cor", 40 | "cv": "100", 41 | "cilindrada": "1000", 42 | "peso_liquido": "2.5000", 43 | "peso_bruto": "2.5000", 44 | "serie": "00001", 45 | "tipo_combustivel": "16", 46 | "numero_motor": "00001", 47 | "cmt": "2.000", 48 | "dist": "150", 49 | "ano_modelo": "2019", 50 | "ano_fabricacao": "2018", 51 | "tipo_pintura": "Tipo de Pintura", 52 | "tipo_veiculo": "06", 53 | "especie_veiculo": "1", 54 | "vin": "N", 55 | "condicao_veiculo": "1", 56 | "marca_modelo": "00001", 57 | "cor_denatran": "04", 58 | "lotacao": "5", 59 | "restricao": "0" 60 | } 61 | } 62 | ], 63 | "pedido": { 64 | "pagamento": 0, 65 | "presenca": 2, 66 | "modalidade_frete": 0, 67 | "frete": "12.56", 68 | "desconto": "10.00", 69 | "total": "174.60" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /WebmaniaBR/ExemploJSON/inutilizarNumeracao.json: -------------------------------------------------------------------------------- 1 | { 2 | "sequencia": "101-109", 3 | "motivo": "Inutilização por problemas técnicos.", 4 | "ambiente": "2", 5 | "serie": "99", 6 | "modelo": "1" 7 | } -------------------------------------------------------------------------------- /WebmaniaBR/NFe.java: -------------------------------------------------------------------------------- 1 | package WebmaniaBR; 2 | 3 | // Classe para configuração de credenciais de acesso 4 | import WebmaniaBR.config.Credenciais; 5 | 6 | // Demais importações 7 | import java.io.BufferedReader; 8 | import java.io.DataOutputStream; 9 | import java.io.FileReader; 10 | import java.io.IOException; 11 | import java.io.InputStreamReader; 12 | import java.net.HttpURLConnection; 13 | import java.net.URL; 14 | import org.json.JSONObject; 15 | import org.json.simple.parser.JSONParser; 16 | import org.json.simple.parser.ParseException; 17 | 18 | public class NFe extends Credenciais{ 19 | 20 | // Tramamento da resposta retornado pela API 21 | public Object trataRespostaApi(InputStreamReader input) throws IOException{ 22 | 23 | try { 24 | 25 | // Recebe a resposta da API, trata e converte para ObjetoJson 26 | BufferedReader in = new BufferedReader(input); 27 | String inputLine; 28 | StringBuilder response = new StringBuilder(); 29 | 30 | while ((inputLine = in.readLine()) != null) { 31 | response.append(inputLine); 32 | } 33 | 34 | // Finaliza buffer 35 | input.close(); 36 | 37 | // Objeto JSON para facilitar o tratamento dos dados. 38 | JSONObject json_input = new JSONObject(response.toString()); 39 | 40 | return json_input; 41 | 42 | }catch(IOException e) { 43 | System.out.println("Erro: "+e); 44 | } 45 | 46 | return null; 47 | 48 | } 49 | 50 | /** 51 | * Cancelar Nota Fiscal 52 | * 53 | * Atenção: Somente poderá ser cancelada uma NF-e cujo uso tenha sido previamente 54 | * autorizado pelo Fisco e desde que não tenha ainda ocorrido o fato gerador, ou seja, 55 | * ainda não tenha ocorrido a saída da mercadoria do estabelecimento. Atualmente o prazo 56 | * máximo para cancelamento de uma NF-e é de 24 horas (1 dia), contado a partir da autorização 57 | * de uso. Caso já tenha passado o prazo de 24 horas ou já tenha ocorrido a circulação da 58 | * mercadoria, emita uma NF-e de devolução para anular a NF-e anterior. 59 | */ 60 | public String cancelarNotaFiscal() throws IOException, ParseException { 61 | 62 | /* 63 | * FileReader lê o arquivo cancelarNotaFiscal.json, caso os dados venha de um 64 | * formulário ou banco de dados passar o objeto com os dados diretamente 65 | * no .parse(object) e ignorar essa linha de código. 66 | */ 67 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/cancelarNotaFiscal.json"); 68 | 69 | // Objeto com os dados para ser enviados a API. 70 | Object json_output = new JSONParser().parse(file_json); 71 | 72 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 73 | JSONObject json_input = null; 74 | 75 | // Define a URL da API 76 | URL url = new URL("https://webmaniabr.com/api/1/nfe/cancelar/"); 77 | 78 | // Prepara a conexão 79 | HttpURLConnection con = this.preparaConexao(url, "PUT"); 80 | 81 | // Permite a conexão atual a enviar e receber dados 82 | con.setDoOutput(true); 83 | con.setDoInput(true); 84 | 85 | try{ 86 | 87 | // Envia os dados para API e fecha a conexão de saida 88 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 89 | output.write(json_output.toString().getBytes()); 90 | output.flush(); 91 | output.close(); 92 | 93 | // Trata a resposta da API e retorna para um JSONObject 94 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 95 | 96 | //Finaliza a conexão 97 | con.disconnect(); 98 | 99 | try{ 100 | 101 | // Exibi um atributo especifico do retorno da API 102 | System.out.println(json_input.getString("status")); 103 | 104 | return json_input.toString(); 105 | 106 | } catch(Exception e){ 107 | System.out.println("Erro: "+ json_input.getString("error")); 108 | } 109 | 110 | }catch(IOException e){ 111 | System.out.println("Erro: "+e); 112 | System.out.println("Erro: "+ con.getResponseMessage()); 113 | } 114 | return null; 115 | } 116 | 117 | /** 118 | * Informações da Carta de Correção 119 | * 120 | * A Carta de Correção Eletrônica (CC-e) é um evento legal e tem por objetivo 121 | * corrigir algumas informações da NF-e que já foi emitida. 122 | */ 123 | public String cartaCorrecao() throws IOException, ParseException { 124 | /* 125 | * FileReader lê o arquivo cartaCorrecao.json, caso os dados venha de um 126 | * formulário ou banco de dados, passar o objeto com os dados diretamente 127 | * no .parse(object) e ignorar essa linha de código. 128 | */ 129 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/cartaCorrecao.json"); 130 | 131 | // Objeto com os dados para ser enviados a API. 132 | Object json_output = new JSONParser().parse(file_json); 133 | 134 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 135 | JSONObject json_input = null; 136 | 137 | // Define a URL da API 138 | URL url = new URL("https://webmaniabr.com/api/1/nfe/cartacorrecao/"); 139 | 140 | // Prepara a conexão 141 | HttpURLConnection con = this.preparaConexao(url, "POST"); 142 | 143 | // Permite a conexão atual a enviar e receber dados 144 | con.setDoOutput(true); 145 | con.setDoInput(true); 146 | 147 | try{ 148 | 149 | // Envia os dados para API e fecha a conexão de saida 150 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 151 | output.write(json_output.toString().getBytes()); 152 | output.flush(); 153 | output.close(); 154 | 155 | // Trata a resposta da API e retorna para um JSONObject 156 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 157 | 158 | //Finaliza a conexão 159 | con.disconnect(); 160 | 161 | try{ 162 | // Exibi um atributo especifico do retorno da API 163 | System.out.println(json_input.getString("status")); 164 | 165 | return json_input.toString(); 166 | 167 | } catch(Exception e){ 168 | System.out.println("Erro: "+ json_input.getString("error")); 169 | } 170 | 171 | }catch(IOException e){ 172 | System.out.println("Erro: "+e); 173 | System.out.println("Erro: "+ con.getResponseMessage()); 174 | } 175 | 176 | return null; 177 | } 178 | 179 | /** 180 | * Consulta de Nota fiscal 181 | * 182 | * Atenção: Somente é permitido consultar a chave da nota fiscal emitida pelo 183 | * emissor da WebmaniaBR, não sendo possível consultar nota fiscal de terceiro 184 | * ou emitida em outro sistema. 185 | */ 186 | public String consultarNotaFiscal() throws IOException, ParseException { 187 | 188 | // Atributos para consulta método GET 189 | String chave = "00000000000000000000000000000000000000000000"; 190 | int ambiente = 2; 191 | 192 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 193 | JSONObject json_input = null; 194 | 195 | // Define a URL da API 196 | URL url = new URL("https://webmaniabr.com/api/1/nfe/consulta/?chave="+chave+"&ambiente="+ambiente); 197 | 198 | // Prepara a conexão 199 | HttpURLConnection con = this.preparaConexao(url, "GET"); 200 | 201 | // Permite a conexão atual a enviar e receber dados 202 | con.setDoOutput(true); 203 | con.setDoInput(true); 204 | 205 | try{ 206 | 207 | // Trata a resposta da API e retorna para um JSONObject 208 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 209 | 210 | //Finaliza a conexão 211 | con.disconnect(); 212 | 213 | try{ 214 | 215 | // Exibi um atributo especifico do retorno da API 216 | System.out.println(json_input.get("status")); 217 | 218 | return json_input.toString(); 219 | 220 | } catch(Exception e){ 221 | System.out.println("Erro: "+ json_input.getString("error")); 222 | } 223 | 224 | }catch(IOException e){ 225 | System.out.println("Erro: "+e); 226 | System.out.println("Erro: "+ con.getResponseMessage()); 227 | } 228 | 229 | return null; 230 | } 231 | 232 | // Emissão de Nota Fiscal Eletrônica com detalhamento específico de armamentos 233 | public String emitirNotaFiscal_Armamentos() throws IOException, ParseException { 234 | /* 235 | * FileReader lê o arquivo emitirNotaFiscal_Armamentos.json, caso os dados venha de um 236 | * formulário ou banco de dados passar o objeto com os dados diretamente 237 | * no .parse(object) e ignorar essa linha de código. 238 | */ 239 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal_Armamentos.json"); 240 | 241 | // Objeto com os dados para ser enviados a API. 242 | Object json_output = new JSONParser().parse(file_json); 243 | 244 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 245 | JSONObject json_input = null; 246 | 247 | // Define a URL da API 248 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 249 | 250 | // Prepara a conexão 251 | HttpURLConnection con = this.preparaConexao(url, "POST"); 252 | 253 | // Permite a conexão atual a enviar e receber dados 254 | con.setDoOutput(true); 255 | con.setDoInput(true); 256 | 257 | try{ 258 | 259 | // Envia os dados para API e fecha a conexão de saida 260 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 261 | output.write(json_output.toString().getBytes()); 262 | output.flush(); 263 | output.close(); 264 | 265 | // Trata a resposta da API e retorna para um JSONObject 266 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 267 | 268 | // Finaliza conexão 269 | con.disconnect(); 270 | 271 | try{ 272 | 273 | // Exibi um atributo especifico do retorno da API 274 | System.out.println(json_input.get("chave")); 275 | 276 | return json_input.toString(); 277 | 278 | } catch(Exception e){ 279 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 280 | } 281 | 282 | }catch(IOException e){ 283 | System.out.println("Erro: "+e.getMessage()); 284 | System.out.println("Erro: "+con.getResponseMessage()); 285 | } 286 | 287 | return null; 288 | } 289 | 290 | // Emissão de Nota Fiscal Eletrônica com detalhamento específico de combustível 291 | public String emitirNotaFiscal_Combustivel() throws IOException, ParseException { 292 | /* 293 | * FileReader lê o arquivo emitirNotaFiscal_Combustivel.json, caso os dados venha de um 294 | * formulário ou banco de dados passar o objeto com os dados diretamente 295 | * no .parse(object) e ignorar essa linha de código. 296 | */ 297 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal_Combustivel.json"); 298 | 299 | // Objeto com os dados para ser enviados a API. 300 | Object json_output = new JSONParser().parse(file_json); 301 | 302 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 303 | JSONObject json_input = null; 304 | 305 | // Define a URL da API 306 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 307 | 308 | // Prepara a conexão 309 | HttpURLConnection con = this.preparaConexao(url, "POST"); 310 | 311 | // Permite a conexão atual a enviar e receber dados 312 | con.setDoOutput(true); 313 | con.setDoInput(true); 314 | 315 | try{ 316 | 317 | // Envia os dados para API e fecha a conexão de saida 318 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 319 | output.write(json_output.toString().getBytes()); 320 | output.flush(); 321 | output.close(); 322 | 323 | // Trata a resposta da API e retorna para um JSONObject 324 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 325 | 326 | // Finaliza conexão 327 | con.disconnect(); 328 | 329 | try{ 330 | 331 | // Exibi um atributo especifico do retorno da API 332 | System.out.println(json_input.get("chave")); 333 | 334 | return json_input.toString(); 335 | 336 | } catch(Exception e){ 337 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 338 | } 339 | 340 | }catch(IOException e){ 341 | System.out.println("Erro: "+e.getMessage()); 342 | System.out.println("Erro: "+con.getResponseMessage()); 343 | } 344 | 345 | return null; 346 | } 347 | 348 | // Emissão de Nota Fiscal Eletrônica com detalhamento específico de medicamentos 349 | public String emitirNotaFiscal_Medicamentos() throws IOException, ParseException { 350 | /* 351 | * FileReader lê o arquivo emitirNotaFiscal_Medicamentos.json, caso os dados venha de um 352 | * formulário ou banco de dados passar o objeto com os dados diretamente 353 | * no .parse(object) e ignorar essa linha de código. 354 | */ 355 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal_Medicamentos.json"); 356 | 357 | // Objeto com os dados para ser enviados a API. 358 | Object json_output = new JSONParser().parse(file_json); 359 | 360 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 361 | JSONObject json_input = null; 362 | 363 | // Define a URL da API 364 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 365 | 366 | // Prepara a conexão 367 | HttpURLConnection con = this.preparaConexao(url, "POST"); 368 | 369 | // Permite a conexão atual a enviar e receber dados 370 | con.setDoOutput(true); 371 | con.setDoInput(true); 372 | 373 | try{ 374 | 375 | // Envia os dados para API e fecha a conexão de saida 376 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 377 | output.write(json_output.toString().getBytes()); 378 | output.flush(); 379 | output.close(); 380 | 381 | // Trata a resposta da API e retorna para um JSONObject 382 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 383 | 384 | // Finaliza conexão 385 | con.disconnect(); 386 | 387 | try{ 388 | 389 | // Exibi um atributo especifico do retorno da API 390 | System.out.println(json_input.get("chave")); 391 | 392 | return json_input.toString(); 393 | 394 | } catch(Exception e){ 395 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 396 | } 397 | 398 | }catch(IOException e){ 399 | System.out.println("Erro: "+e.getMessage()); 400 | System.out.println("Erro: "+con.getResponseMessage()); 401 | } 402 | 403 | return null; 404 | } 405 | 406 | // Emissão de Nota Fiscal Eletrônica com detalhamento específico de rastreabilidade 407 | public String emitirNotaFiscal_Rastreabilidade() throws IOException, ParseException { 408 | /* 409 | * FileReader lê o arquivo emitirNotaFiscal_Rastreabilidade.json, caso os dados venha de um 410 | * formulário ou banco de dados passar o objeto com os dados diretamente 411 | * no .parse(object) e ignorar essa linha de código. 412 | */ 413 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal_Rastreabilidade.json"); 414 | 415 | // Objeto com os dados para ser enviados a API. 416 | Object json_output = new JSONParser().parse(file_json); 417 | 418 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 419 | JSONObject json_input = null; 420 | 421 | // Define a URL da API 422 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 423 | 424 | // Prepara a conexão 425 | HttpURLConnection con = this.preparaConexao(url, "POST"); 426 | 427 | // Permite a conexão atual a enviar e receber dados 428 | con.setDoOutput(true); 429 | con.setDoInput(true); 430 | 431 | try{ 432 | 433 | // Envia os dados para API e fecha a conexão de saida 434 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 435 | output.write(json_output.toString().getBytes()); 436 | output.flush(); 437 | output.close(); 438 | 439 | // Trata a resposta da API e retorna para um JSONObject 440 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 441 | 442 | // Finaliza conexão 443 | con.disconnect(); 444 | 445 | try{ 446 | 447 | // Exibi um atributo especifico do retorno da API 448 | System.out.println(json_input.get("chave")); 449 | 450 | return json_input.toString(); 451 | 452 | } catch(Exception e){ 453 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 454 | } 455 | 456 | }catch(IOException e){ 457 | System.out.println("Erro: "+e.getMessage()); 458 | System.out.println("Erro: "+con.getResponseMessage()); 459 | } 460 | 461 | return null; 462 | } 463 | 464 | // Emissão de Nota Fiscal Eletrônica com detalhamento específico de rastreabilidade 465 | public String emitirNotaFiscal_VeiculosNovos() throws IOException, ParseException { 466 | /* 467 | * FileReader lê o arquivo emitirNotaFiscal_VeiculosNovos.json, caso os dados venha de um 468 | * formulário ou banco de dados passar o objeto com os dados diretamente 469 | * no .parse(object) e ignorar essa linha de código. 470 | */ 471 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal_VeiculosNovos.json"); 472 | 473 | // Objeto com os dados para ser enviados a API. 474 | Object json_output = new JSONParser().parse(file_json); 475 | 476 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 477 | JSONObject json_input = null; 478 | 479 | // Define a URL da API 480 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 481 | 482 | // Prepara a conexão 483 | HttpURLConnection con = this.preparaConexao(url, "POST"); 484 | 485 | // Permite a conexão atual a enviar e receber dados 486 | con.setDoOutput(true); 487 | con.setDoInput(true); 488 | 489 | try{ 490 | 491 | // Envia os dados para API e fecha a conexão de saida 492 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 493 | output.write(json_output.toString().getBytes()); 494 | output.flush(); 495 | output.close(); 496 | 497 | // Trata a resposta da API e retorna para um JSONObject 498 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 499 | 500 | // Finaliza conexão 501 | con.disconnect(); 502 | 503 | try{ 504 | 505 | // Exibi um atributo especifico do retorno da API 506 | System.out.println(json_input.get("chave")); 507 | 508 | return json_input.toString(); 509 | 510 | } catch(Exception e){ 511 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 512 | } 513 | 514 | }catch(IOException e){ 515 | System.out.println("Erro: "+e.getMessage()); 516 | System.out.println("Erro: "+con.getResponseMessage()); 517 | } 518 | 519 | return null; 520 | } 521 | 522 | // Emissão de Nota Fiscal Eletrônica 523 | public String emitirNotaFiscal() throws IOException, ParseException { 524 | /* 525 | * FileReader lê o arquivo emitirNotaFiscal.json, caso os dados venha de um 526 | * formulário ou banco de dados passar o objeto com os dados diretamente 527 | * no .parse(object) e ignorar essa linha de código. 528 | */ 529 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscal.json"); 530 | 531 | // Objeto com os dados para ser enviados a API. 532 | Object json_output = new JSONParser().parse(file_json); 533 | 534 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 535 | JSONObject json_input = null; 536 | 537 | // Define a URL da API 538 | URL url = new URL("https://webmaniabr.com/api/1/nfe/emissao/"); 539 | 540 | // Prepara a conexão 541 | HttpURLConnection con = this.preparaConexao(url, "POST"); 542 | 543 | // Permite a conexão atual a enviar e receber dados 544 | con.setDoOutput(true); 545 | con.setDoInput(true); 546 | 547 | try{ 548 | 549 | // Envia os dados para API e fecha a conexão de saida 550 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 551 | output.write(json_output.toString().getBytes()); 552 | output.flush(); 553 | output.close(); 554 | 555 | // Trata a resposta da API e retorna para um JSONObject 556 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 557 | 558 | // Finaliza conexão 559 | con.disconnect(); 560 | 561 | try{ 562 | 563 | // Exibi um atributo especifico do retorno da API 564 | System.out.println(json_input.get("chave")); 565 | 566 | return json_input.toString(); 567 | 568 | } catch(Exception e){ 569 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 570 | } 571 | 572 | }catch(IOException e){ 573 | System.out.println("Erro: "+e.getMessage()); 574 | System.out.println("Erro: "+con.getResponseMessage()); 575 | } 576 | 577 | return null; 578 | } 579 | 580 | /** 581 | * Informações da Nota Fiscal Eletrônica 582 | * 583 | * A Nota Fiscal de Ajuste é destinada somente para fins específicos de escrituração 584 | * contábil para empresas de Lucro Normal ou Presumido, não representando saída ou entrada 585 | * de produtos. Utilizado para nota de crédito de ICMS como transferência, ressarcimento 586 | * ou restituição do ICMS. 587 | */ 588 | public String emitirNotaFiscalAjuste() throws IOException, ParseException { 589 | /* FileReader lê o arquivo emitirNotaFiscalAjuste.json, caso os dados venha de um 590 | * formulário ou banco de dados passar o objeto com os dados diretamente 591 | * no .parse(object) e ignorar essa linha de código. 592 | */ 593 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscalAjuste.json"); 594 | 595 | // Objeto com os dados para ser enviados a API. 596 | Object json_output = new JSONParser().parse(file_json); 597 | 598 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 599 | JSONObject json_input = null; 600 | 601 | // Define a URL da API 602 | URL url = new URL("https://webmaniabr.com/api/1/nfe/ajuste/"); 603 | 604 | // Prepara a conexão 605 | HttpURLConnection con = this.preparaConexao(url, "POST"); 606 | 607 | // Permite a conexão atual a enviar e receber dados 608 | con.setDoOutput(true); 609 | con.setDoInput(true); 610 | 611 | try{ 612 | 613 | // Envia os dados para API e fecha a conexão de saida 614 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 615 | output.write(json_output.toString().getBytes()); 616 | output.flush(); 617 | output.close(); 618 | 619 | // Trata a resposta da API e retorna para um JSONObject 620 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 621 | 622 | //Finaliza a conexão 623 | con.disconnect(); 624 | 625 | try{ 626 | 627 | // Exibi um atributo especifico do retorno da API 628 | System.out.println(json_input.get("status")); 629 | 630 | return json_input.toString(); 631 | 632 | } catch(Exception e){ 633 | System.out.println("Erro: "+ json_input.getString("error")); 634 | } 635 | 636 | }catch(IOException e){ 637 | System.out.println("Erro: "+e); 638 | System.out.println("Erro: "+ con.getResponseMessage()); 639 | } 640 | 641 | return null; 642 | } 643 | 644 | /** 645 | * Informações da Nota Fiscal Complementar 646 | * 647 | * A Nota Fiscal Complementar é destinada para acrescentar dados e valores 648 | * não informados no documento fiscal original. Utilizado para acréscimo no preço 649 | * e quantidade da mercadoria ou somar valores faltantes dos impostos ICMS, ICMS-ST e IPI. 650 | * 651 | * OBS: Deve ser complementado o Preço/Quantidade OU Impostos. 652 | * OB2: Caso deseje complementar as duas opções devem ser emitidas NF-e separadas. 653 | */ 654 | public String emitirNotaFiscalComplementar_Imposto() throws IOException, ParseException { 655 | /* 656 | * FileReader lê o arquivo emitirNotaFiscalComplementar_Imposto.json, caso os dados venha de um 657 | * formulário ou banco de dados passar o objeto com os dados diretamente 658 | * no .parse(object) e ignorar essa linha de código. 659 | */ 660 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscalComplementar_Imposto.json"); 661 | 662 | // Objeto com os dados para ser enviados a API. 663 | Object json_output = new JSONParser().parse(file_json); 664 | 665 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 666 | JSONObject json_input = null; 667 | 668 | // Define a URL da API 669 | URL url = new URL("https://webmaniabr.com/api/1/nfe/complementar/"); 670 | 671 | // Prepara a conexão 672 | HttpURLConnection con = this.preparaConexao(url, "POST"); 673 | 674 | // Permite a conexão atual a enviar e receber dados 675 | con.setDoOutput(true); 676 | con.setDoInput(true); 677 | 678 | try{ 679 | 680 | // Envia os dados para API e fecha a conexão de saida 681 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 682 | output.write(json_output.toString().getBytes()); 683 | output.flush(); 684 | output.close(); 685 | 686 | // Trata a resposta da API e retorna para um JSONObject 687 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 688 | 689 | //Finaliza a conexão 690 | con.disconnect(); 691 | 692 | try{ 693 | 694 | // Exibi um atributo especifico do retorno da API 695 | System.out.println(json_input.get("status")); 696 | 697 | return json_input.toString(); 698 | 699 | } catch(Exception e){ 700 | System.out.println("Erro: "+ json_input.getString("error")); 701 | } 702 | 703 | }catch(IOException e){ 704 | System.out.println("Erro: "+e); 705 | System.out.println("Erro: "+ con.getResponseMessage()); 706 | } 707 | 708 | return null; 709 | } 710 | 711 | /** 712 | * Informações da Nota Fiscal Complementar 713 | * 714 | * A Nota Fiscal Complementar é destinada para acrescentar dados e valores 715 | * não informados no documento fiscal original. Utilizado para acréscimo no preço 716 | * e quantidade da mercadoria ou somar valores faltantes dos impostos ICMS, ICMS-ST e IPI. 717 | * 718 | * OBS: Deve ser complementado o Preço/Quantidade OU Impostos. 719 | * OB2: Caso deseje complementar as duas opções devem ser emitidas NF-e separadas. 720 | */ 721 | public String emitirNotaFiscalComplementar_PrecoQuantidade() throws IOException, ParseException { 722 | /* 723 | * FileReader lê o arquivo emitirNotaFiscalComplementar_PrecoQuantidade.json, caso os dados venha de um 724 | * formulário ou banco de dados passar o objeto com os dados diretamente 725 | * no .parse(object) e ignorar essa linha de código. 726 | */ 727 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscalComplementar_PrecoQuantidade.json"); 728 | 729 | // Objeto com os dados para ser enviados a API. 730 | Object json_output = new JSONParser().parse(file_json); 731 | 732 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 733 | JSONObject json_input = null; 734 | 735 | // Define a URL da API 736 | URL url = new URL("https://webmaniabr.com/api/1/nfe/complementar/"); 737 | 738 | // Prepara a conexão 739 | HttpURLConnection con = this.preparaConexao(url, "POST"); 740 | 741 | // Permite a conexão atual a enviar e receber dados 742 | con.setDoOutput(true); 743 | con.setDoInput(true); 744 | 745 | try{ 746 | 747 | // Envia os dados para API e fecha a conexão de saida 748 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 749 | output.write(json_output.toString().getBytes()); 750 | output.flush(); 751 | output.close(); 752 | 753 | // Trata a resposta da API e retorna para um JSONObject 754 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 755 | 756 | //Finaliza a conexão 757 | con.disconnect(); 758 | 759 | try{ 760 | 761 | // Exibi um atributo especifico do retorno da API 762 | System.out.println(json_input.get("status")); 763 | 764 | return json_input.toString(); 765 | 766 | } catch(Exception e){ 767 | System.out.println("Erro: "+ json_input.getString("error")); 768 | } 769 | 770 | }catch(IOException e){ 771 | System.out.println("Erro: "+e); 772 | System.out.println("Erro: "+ con.getResponseMessage()); 773 | } 774 | 775 | return null; 776 | } 777 | 778 | // Emissão de Nota Fiscal de Devolução 779 | public String emitirNotaFiscalDevolucao() throws IOException, ParseException { 780 | /* 781 | * FileReader lê o arquivo EmissaoNotaFiscalDevolucao.json, caso os dados venha de um 782 | * formulário ou banco de dados passar o objeto com os dados diretamente 783 | * no .parse(object) e ignorar essa linha de código. 784 | */ 785 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/emitirNotaFiscalDevolucao.json"); 786 | 787 | // Objeto com os dados para ser enviados a API. 788 | Object json_output = new JSONParser().parse(file_json); 789 | 790 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 791 | JSONObject json_input = null; 792 | 793 | // Define a URL da API 794 | URL url = new URL("https://webmaniabr.com/api/1/nfe/devolucao/"); 795 | 796 | // Prepara a conexão 797 | HttpURLConnection con = this.preparaConexao(url, "POST"); 798 | 799 | // Permite a conexão atual a enviar e receber dados 800 | con.setDoOutput(true); 801 | con.setDoInput(true); 802 | 803 | try{ 804 | 805 | // Envia os dados para API e fecha a conexão de saida 806 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 807 | output.write(json_output.toString().getBytes()); 808 | output.flush(); 809 | output.close(); 810 | 811 | // Trata a resposta da API e retorna para um JSONObject 812 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 813 | 814 | //Finaliza a conexão 815 | con.disconnect(); 816 | 817 | try{ 818 | 819 | // Exibi um atributo especifico do retorno da API 820 | System.out.println(json_input.get("log")); 821 | 822 | return json_input.toString(); 823 | 824 | } catch(Exception e){ 825 | System.out.println("Erro: "+ json_input.getString("error")); 826 | } 827 | 828 | }catch(IOException e){ 829 | System.out.println("Erro: "+e); 830 | System.out.println("Erro: "+ con.getResponseMessage()); 831 | } 832 | 833 | return null; 834 | } 835 | 836 | // Inutilizar numeração 837 | public String inutilizarNumeracao() throws IOException, ParseException { 838 | /* 839 | * FileReader lê o arquivo inutilizarNumeracao.json, caso os dados venha de um 840 | * formulário ou banco de dados passar o objeto com os dados diretamente 841 | * no .parse(object) e ignorar essa linha de código. 842 | */ 843 | FileReader file_json = new FileReader("src/WebmaniaBR/ExemploJSON/inutilizarNumeracao.json"); 844 | 845 | // Objeto com os dados para ser enviados a API. 846 | Object json_output = new JSONParser().parse(file_json); 847 | 848 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 849 | JSONObject json_input = null; 850 | 851 | // Define a URL da API 852 | URL url = new URL("https://webmaniabr.com/api/1/nfe/inutilizar/"); 853 | 854 | // Prepara a conexão 855 | HttpURLConnection con = this.preparaConexao(url, "PUT"); 856 | 857 | // Permite a conexão atual a enviar e receber dados 858 | con.setDoOutput(true); 859 | con.setDoInput(true); 860 | 861 | try{ 862 | 863 | // Envia os dados para API e fecha a conexão de saida 864 | DataOutputStream output = new DataOutputStream(con.getOutputStream()); 865 | output.write(json_output.toString().getBytes()); 866 | output.flush(); 867 | output.close(); 868 | 869 | // Trata a resposta da API e retorna para um JSONObject 870 | json_input = (JSONObject) this.trataRespostaApi(new InputStreamReader(con.getInputStream())); 871 | 872 | //Finaliza a conexão 873 | con.disconnect(); 874 | 875 | try{ 876 | // Exibi um atributo especifico do retorno da API 877 | System.out.println(json_input.get("log")); 878 | 879 | return json_input.toString(); 880 | } catch(Exception e){ 881 | System.out.println("Erro: "+ json_input.getString("error")); 882 | } 883 | 884 | }catch(IOException e){ 885 | System.out.println("Erro: "+e); 886 | System.out.println("Erro: "+ con.getResponseMessage()); 887 | } 888 | 889 | return null; 890 | } 891 | 892 | /** 893 | * Status do Sefaz 894 | * 895 | * OBS: A utilização do endpoint deve ser realizada como demonstrativo do Status do 896 | * Sefaz em sua plataforma, sendo necessário trabalhar com cache de ao menos 10 minutos. 897 | * Não é necessário realizar a requisição antes da emissão de cada Nota Fiscal, 898 | * porque este procedimento é realizado de forma automática em todos os endpoints. 899 | */ 900 | public String statusSefaz() throws IOException{ 901 | 902 | // Define a URL da API 903 | URL url = new URL("https://webmaniabr.com/api/1/nfe/sefaz/"); 904 | 905 | // Prepara a conexão 906 | HttpURLConnection con = this.preparaConexao(url, "GET"); 907 | 908 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 909 | JSONObject json_input = null; 910 | 911 | try { 912 | 913 | // Trata a resposta da API e retorna para um JSONObject 914 | json_input = (JSONObject) trataRespostaApi(new InputStreamReader(con.getInputStream())); 915 | 916 | // Finaliza a conexão 917 | con.disconnect(); 918 | 919 | try{ 920 | // Exibi um atributo especifico do retorno da API 921 | //System.out.println(json_input.get("status")); 922 | 923 | return json_input.toString(); 924 | } catch(Exception e){ 925 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 926 | } 927 | 928 | } catch (IOException e) { 929 | System.out.println("Erro: "+e); 930 | System.out.println("Erro: "+ con.getResponseMessage()); 931 | } 932 | 933 | return null; 934 | } 935 | 936 | // Validar dias restantes do Certificado A1 937 | public int validadeCertificadoA1() throws IOException { 938 | // Define a URL da API 939 | URL url = new URL("https://webmaniabr.com/api/1/nfe/certificado/"); 940 | 941 | // Prepara a conexão 942 | HttpURLConnection con = this.preparaConexao(url, "GET"); 943 | 944 | // Cria um objeto JSON para facilitar o tratamento dos dados de retorno da API 945 | JSONObject json_input = null; 946 | 947 | try { 948 | 949 | // Trata a resposta da API e retorna para um JSONObject 950 | json_input = (JSONObject) trataRespostaApi(new InputStreamReader(con.getInputStream())); 951 | 952 | // Finaliza a conexão 953 | con.disconnect(); 954 | 955 | try{ 956 | 957 | return Integer.parseInt(json_input.get("expiration").toString()); 958 | 959 | } catch(Exception e){ 960 | System.out.println("Erro retornado da API: "+ json_input.getString("error")); 961 | } 962 | 963 | } catch (IOException e) { 964 | System.out.println("Erro: "+e); 965 | System.out.println("Erro: "+ con.getResponseMessage()); 966 | } 967 | 968 | return 0; 969 | } 970 | 971 | } 972 | -------------------------------------------------------------------------------- /WebmaniaBR/config/Credenciais.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package WebmaniaBR.config; 7 | 8 | import java.io.IOException; 9 | import java.net.HttpURLConnection; 10 | import java.net.URL; 11 | 12 | /** 13 | * 14 | * @author equipe 15 | */ 16 | public class Credenciais { 17 | private String X_CONSUMER_KEY; 18 | private String X_CONSUMER_SECRET; 19 | private String X_ACCESS_TOKEN; 20 | private String X_ACCESS_TOKEN_SECRET; 21 | 22 | public Credenciais() { 23 | this.X_CONSUMER_KEY = "SEU_CONSUMER_KEY"; 24 | this.X_CONSUMER_SECRET = "SEU_CONSUMER_SECRET"; 25 | this.X_ACCESS_TOKEN = "SEU_ACCESS_TOKEN"; 26 | this.X_ACCESS_TOKEN_SECRET = "SEU_ACCESS_TOKEN_SECRET"; 27 | } 28 | 29 | public String getX_CONSUMER_KEY() { 30 | return X_CONSUMER_KEY; 31 | } 32 | 33 | public void setX_CONSUMER_KEY(String X_CONSUMER_KEY) { 34 | this.X_CONSUMER_KEY = X_CONSUMER_KEY; 35 | } 36 | 37 | public String getX_CONSUMER_SECRET() { 38 | return X_CONSUMER_SECRET; 39 | } 40 | 41 | public void setX_CONSUMER_SECRET(String X_CONSUMER_SECRET) { 42 | this.X_CONSUMER_SECRET = X_CONSUMER_SECRET; 43 | } 44 | 45 | public String getX_ACCESS_TOKEN() { 46 | return X_ACCESS_TOKEN; 47 | } 48 | 49 | public void setX_ACCESS_TOKEN(String X_ACCESS_TOKEN) { 50 | this.X_ACCESS_TOKEN = X_ACCESS_TOKEN; 51 | } 52 | 53 | public String getX_ACCESS_TOKEN_SECRET() { 54 | return X_ACCESS_TOKEN_SECRET; 55 | } 56 | 57 | public void setX_ACCESS_TOKEN_SECRET(String X_ACCESS_TOKEN_SECRET) { 58 | this.X_ACCESS_TOKEN_SECRET = X_ACCESS_TOKEN_SECRET; 59 | } 60 | 61 | // Método responsável por preparar a conexão com a API 62 | public HttpURLConnection preparaConexao(URL url, String method) throws IOException { 63 | 64 | try{ 65 | 66 | // Abre a conexão 67 | HttpURLConnection con = (HttpURLConnection) url.openConnection(); 68 | 69 | //Declara método de envio 70 | con.setRequestMethod(method); 71 | 72 | //Adiciona os Headers 73 | con.setRequestProperty("Cache-Control", "no-cache"); 74 | con.setRequestProperty("Content-Type", "application/json"); 75 | con.setRequestProperty("X-Consumer-Key", this.getX_CONSUMER_KEY()); 76 | con.setRequestProperty("X-Consumer-Secret", this.getX_CONSUMER_SECRET()); 77 | con.setRequestProperty("X-Access-Token", this.getX_ACCESS_TOKEN()); 78 | con.setRequestProperty("X-Access-Token-Secret", this.getX_ACCESS_TOKEN_SECRET()); 79 | 80 | // Retorna a conexão pronta 81 | return con; 82 | 83 | } catch ( IOException e ) { 84 | System.out.println("Erro: "+e.getMessage()); 85 | } 86 | 87 | return null; 88 | } 89 | 90 | 91 | } 92 | --------------------------------------------------------------------------------