From b38ce52de7e470e71576bd6f5e637fa89fc21531 Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Tue, 15 Feb 2022 11:50:31 -0300 Subject: [PATCH 1/7] Adicionando link do discord --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 73ca31f..1ed9cc9 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Biblioteca para geração/integração de NF-e/NFC-e em aplicações node.js ## HELP WANTED!! OSS no Brasil é incrivelmente dificil, especialmente com o volume de trabalho e as cargas horarias que o mercado de trabalho brasileiro acaba impondo sob nossas vidas. Isso faz com que o tempo que tenhamos para investir em manutençao de projetos OS como esse acabe sendo bem reduzido (especialmente pela natureza "non profit" deste projeto). Portanto, se voce gostou da lib, ou se tem interesse em contribuir para algum projeto OS e ganhar alguma experiencia, sinta-se livre para enviar uma PR, ou apenas ajudar com as discussoes nos Issues abertos. +Entre no grupo do Discord https://discord.gg/P8WthxdtNy + ## Instalação A instalação pode ser feita diretamente via npm/yarn. Nao é requerido nenhum passo adicional. From 5a7938cd5815b090359341ae164c87d39e8f351e Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Thu, 17 Feb 2022 10:38:01 -0300 Subject: [PATCH 2/7] getContentType por UF --- lib/factory/webservices/functions.js | 39 +++++++++++++++++++++ lib/factory/webservices/sefazNfce.js | 3 ++ lib/factory/webservices/sefazNfe.js | 3 ++ lib/factory/webservices/webserviceHelper.js | 10 +++--- 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 lib/factory/webservices/functions.js diff --git a/lib/factory/webservices/functions.js b/lib/factory/webservices/functions.js new file mode 100644 index 0000000..de330e3 --- /dev/null +++ b/lib/factory/webservices/functions.js @@ -0,0 +1,39 @@ +function getContentType(uf) { + switch (uf) { + case 'GO': + return "application/soap+xml"; + case 'AC': + case 'AL': + case 'AP': + case 'DF': + case 'ES': + case 'MG': + case 'PB': + case 'RJ': + case 'RN': + case 'RO': + case 'RR': + case 'RS': + case 'SC': + case 'SE': + case 'SP': + case 'TO': + case 'AM': + case 'BA': + case 'CE': + case 'MA': + case 'MS': + case 'MT': + case 'PA': + case 'PE': + case 'PI': + case 'PR': + return "text/xml;charset=utf-8"; + default: + throw new Error('Content Type não encontrado!'); + } +} + +module.exports = { + getContentType +}; diff --git a/lib/factory/webservices/sefazNfce.js b/lib/factory/webservices/sefazNfce.js index dea1f70..c64a41d 100644 --- a/lib/factory/webservices/sefazNfce.js +++ b/lib/factory/webservices/sefazNfce.js @@ -2,6 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.SefazNFCe = void 0; const nfe_1 = require("../interface/nfe"); +const { getContentType } = require("./functions.js"); const Utils = require("../utils/utils"); const servicos = require('../../../servicos.json'); const autorizadores = require('../../../autorizadores.json'); @@ -48,6 +49,7 @@ class SefazNFCe { throw new Error('Autorizador não encontrado!'); } } + static getInfoQRCodeByUF(uf, amb) { if (amb == '1') { switch (uf) { @@ -178,6 +180,7 @@ class SefazNFCe { soap.urlQRCode = infoQRCode.urlQRCode; soap.urlChave = infoQRCode.urlChave; } + soap.contentType = getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; return soap; diff --git a/lib/factory/webservices/sefazNfe.js b/lib/factory/webservices/sefazNfe.js index c77cab1..0bb01e0 100644 --- a/lib/factory/webservices/sefazNfe.js +++ b/lib/factory/webservices/sefazNfe.js @@ -1,6 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SefazNFe = void 0; +const { getContentType } = require("./functions.js"); const Utils = require("../utils/utils"); const servicos = require('../../../servicos.json'); const autorizadores = require('../../../autorizadoresNFe.json'); @@ -86,6 +87,7 @@ class SefazNFe { throw new Error('Autorizador não encontrado!'); } } + static getSoapInfo(uf, amb, servico, isContingencia) { let soap = {}; let autorizador = isContingencia ? this.getAutorizadorContingenciaByUF(uf) : this.getAutorizadorByUF(uf); @@ -93,6 +95,7 @@ class SefazNFe { soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_producao); else soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_homologacao); + soap.contentType = getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; return soap; diff --git a/lib/factory/webservices/webserviceHelper.js b/lib/factory/webservices/webserviceHelper.js index 07cf4f9..63186be 100644 --- a/lib/factory/webservices/webserviceHelper.js +++ b/lib/factory/webservices/webserviceHelper.js @@ -30,9 +30,11 @@ class WebServiceHelper { } static buildSoapEnvelope(xml, soapMethod) { let soapEnvelopeObj = { - '$': { 'xmlns:soap': 'http://www.w3.org/2003/05/soap-envelope', + '$': { + 'xmlns:soap': 'http://www.w3.org/2003/05/soap-envelope', 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', - 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema' }, + 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema' + }, 'soap:Body': { 'nfeDadosMsg': { '$': { @@ -60,7 +62,7 @@ class WebServiceHelper { url: soapParams.url, agentOptions: this.buildCertAgentOpt(cert), headers: { - "Content-Type": "text/xml;charset=utf-8", + "Content-Type": soapParams.contentType, "SOAPAction": soapParams.action }, body: this.buildSoapEnvelope(xml, soapParams.method), @@ -109,7 +111,7 @@ class WebServiceHelper { let retorno = xmlHelper_1.XmlHelper.deserializeXml(result.xml_recebido, { explicitArray: false }); if (retorno) { //result.data = retorno; - result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg']; + Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; //console.log(result.data) } } From d82d072b891fab9571e3b104c2639905a015daad Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Fri, 18 Feb 2022 06:52:22 -0300 Subject: [PATCH 3/7] =?UTF-8?q?Corre=C3=A7=C3=A3o=20getContentType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Foi implementado a função da forma correta --- lib/factory/webservices/functions.d.ts | 1 + lib/factory/webservices/functions.js | 8 ++--- lib/factory/webservices/sefazNfce.js | 5 ++- lib/factory/webservices/sefazNfe.js | 5 ++- lib/factory/webservices/webserviceHelper.js | 8 ++--- src/factory/webservices/functions.ts | 36 +++++++++++++++++++++ src/factory/webservices/sefazNfce.ts | 2 ++ src/factory/webservices/sefazNfe.ts | 2 ++ src/factory/webservices/webserviceHelper.ts | 4 +-- 9 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 lib/factory/webservices/functions.d.ts create mode 100644 src/factory/webservices/functions.ts diff --git a/lib/factory/webservices/functions.d.ts b/lib/factory/webservices/functions.d.ts new file mode 100644 index 0000000..67032d0 --- /dev/null +++ b/lib/factory/webservices/functions.d.ts @@ -0,0 +1 @@ +export declare function getContentType(uf: string): string; diff --git a/lib/factory/webservices/functions.js b/lib/factory/webservices/functions.js index de330e3..a86fd54 100644 --- a/lib/factory/webservices/functions.js +++ b/lib/factory/webservices/functions.js @@ -1,3 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getContentType = void 0; function getContentType(uf) { switch (uf) { case 'GO': @@ -33,7 +36,4 @@ function getContentType(uf) { throw new Error('Content Type não encontrado!'); } } - -module.exports = { - getContentType -}; +exports.getContentType = getContentType; diff --git a/lib/factory/webservices/sefazNfce.js b/lib/factory/webservices/sefazNfce.js index c64a41d..369afdf 100644 --- a/lib/factory/webservices/sefazNfce.js +++ b/lib/factory/webservices/sefazNfce.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.SefazNFCe = void 0; const nfe_1 = require("../interface/nfe"); -const { getContentType } = require("./functions.js"); +const functions_1 = require("./functions"); const Utils = require("../utils/utils"); const servicos = require('../../../servicos.json'); const autorizadores = require('../../../autorizadores.json'); @@ -49,7 +49,6 @@ class SefazNFCe { throw new Error('Autorizador não encontrado!'); } } - static getInfoQRCodeByUF(uf, amb) { if (amb == '1') { switch (uf) { @@ -180,7 +179,7 @@ class SefazNFCe { soap.urlQRCode = infoQRCode.urlQRCode; soap.urlChave = infoQRCode.urlChave; } - soap.contentType = getContentType(uf); + soap.contentType = functions_1.getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; return soap; diff --git a/lib/factory/webservices/sefazNfe.js b/lib/factory/webservices/sefazNfe.js index 0bb01e0..8653609 100644 --- a/lib/factory/webservices/sefazNfe.js +++ b/lib/factory/webservices/sefazNfe.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SefazNFe = void 0; -const { getContentType } = require("./functions.js"); +const functions_1 = require("./functions"); const Utils = require("../utils/utils"); const servicos = require('../../../servicos.json'); const autorizadores = require('../../../autorizadoresNFe.json'); @@ -87,7 +87,6 @@ class SefazNFe { throw new Error('Autorizador não encontrado!'); } } - static getSoapInfo(uf, amb, servico, isContingencia) { let soap = {}; let autorizador = isContingencia ? this.getAutorizadorContingenciaByUF(uf) : this.getAutorizadorByUF(uf); @@ -95,7 +94,7 @@ class SefazNFe { soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_producao); else soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_homologacao); - soap.contentType = getContentType(uf); + soap.contentType = functions_1.getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; return soap; diff --git a/lib/factory/webservices/webserviceHelper.js b/lib/factory/webservices/webserviceHelper.js index 63186be..b8e9fa9 100644 --- a/lib/factory/webservices/webserviceHelper.js +++ b/lib/factory/webservices/webserviceHelper.js @@ -30,11 +30,9 @@ class WebServiceHelper { } static buildSoapEnvelope(xml, soapMethod) { let soapEnvelopeObj = { - '$': { - 'xmlns:soap': 'http://www.w3.org/2003/05/soap-envelope', + '$': { 'xmlns:soap': 'http://www.w3.org/2003/05/soap-envelope', 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', - 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema' - }, + 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema' }, 'soap:Body': { 'nfeDadosMsg': { '$': { @@ -111,7 +109,7 @@ class WebServiceHelper { let retorno = xmlHelper_1.XmlHelper.deserializeXml(result.xml_recebido, { explicitArray: false }); if (retorno) { //result.data = retorno; - Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; + result.data = Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; //console.log(result.data) } } diff --git a/src/factory/webservices/functions.ts b/src/factory/webservices/functions.ts new file mode 100644 index 0000000..9a9b7c0 --- /dev/null +++ b/src/factory/webservices/functions.ts @@ -0,0 +1,36 @@ +export function getContentType(uf: string) : string { + switch (uf) { + case 'GO': + return "application/soap+xml"; + case 'AC': + case 'AL': + case 'AP': + case 'DF': + case 'ES': + case 'MG': + case 'PB': + case 'RJ': + case 'RN': + case 'RO': + case 'RR': + case 'RS': + case 'SC': + case 'SE': + case 'SP': + case 'TO': + case 'AM': + case 'BA': + case 'CE': + case 'MA': + case 'MS': + case 'MT': + case 'PA': + case 'PE': + case 'PI': + case 'PR': + return "text/xml;charset=utf-8"; + default: + throw new Error('Content Type não encontrado!'); + } +} + diff --git a/src/factory/webservices/sefazNfce.ts b/src/factory/webservices/sefazNfce.ts index 849535b..2936a0a 100644 --- a/src/factory/webservices/sefazNfce.ts +++ b/src/factory/webservices/sefazNfce.ts @@ -1,4 +1,5 @@ import { ServicosSefaz } from '../interface/nfe'; +import { getContentType } from './functions'; import * as Utils from '../utils/utils'; const servicos = require('../../../servicos.json') const autorizadores = require('../../../autorizadores.json') @@ -182,6 +183,7 @@ export abstract class SefazNFCe { soap.urlChave = infoQRCode.urlChave; } + soap.contentType = getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; diff --git a/src/factory/webservices/sefazNfe.ts b/src/factory/webservices/sefazNfe.ts index 770d554..3f73371 100644 --- a/src/factory/webservices/sefazNfe.ts +++ b/src/factory/webservices/sefazNfe.ts @@ -1,4 +1,5 @@ import { ServicosSefaz } from '../interface/nfe'; +import { getContentType } from './functions'; import * as Utils from '../utils/utils'; const servicos = require('../../../servicos.json') const autorizadores = require('../../../autorizadoresNFe.json') @@ -97,6 +98,7 @@ export abstract class SefazNFe { else soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_homologacao); + soap.contentType = getContentType(uf); soap.method = servicos[servico].method; soap.action = servicos[servico].action; diff --git a/src/factory/webservices/webserviceHelper.ts b/src/factory/webservices/webserviceHelper.ts index 0173672..cc909f0 100644 --- a/src/factory/webservices/webserviceHelper.ts +++ b/src/factory/webservices/webserviceHelper.ts @@ -86,7 +86,7 @@ export abstract class WebServiceHelper { url: soapParams.url, agentOptions: this.buildCertAgentOpt(cert), headers: { - "Content-Type": "text/xml;charset=utf-8", + "Content-Type": soapParams.contentType, "SOAPAction": soapParams.action }, body: this.buildSoapEnvelope(xml, soapParams.method), @@ -138,7 +138,7 @@ export abstract class WebServiceHelper { let retorno = XmlHelper.deserializeXml(result.xml_recebido, {explicitArray: false}); if (retorno) { //result.data = retorno; - result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg']; + result.data = Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; //console.log(result.data) } } From eebd34995aa0a44c6ec225b34b9a594420332a90 Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Mon, 21 Feb 2022 10:59:17 -0300 Subject: [PATCH 4/7] =?UTF-8?q?corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/factory/webservices/functions.ts | 31 ++-------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/factory/webservices/functions.ts b/src/factory/webservices/functions.ts index 9a9b7c0..b23106c 100644 --- a/src/factory/webservices/functions.ts +++ b/src/factory/webservices/functions.ts @@ -1,36 +1,9 @@ -export function getContentType(uf: string) : string { +export function getContentType(uf: string): string { switch (uf) { case 'GO': return "application/soap+xml"; - case 'AC': - case 'AL': - case 'AP': - case 'DF': - case 'ES': - case 'MG': - case 'PB': - case 'RJ': - case 'RN': - case 'RO': - case 'RR': - case 'RS': - case 'SC': - case 'SE': - case 'SP': - case 'TO': - case 'AM': - case 'BA': - case 'CE': - case 'MA': - case 'MS': - case 'MT': - case 'PA': - case 'PE': - case 'PI': - case 'PR': - return "text/xml;charset=utf-8"; default: - throw new Error('Content Type não encontrado!'); + return "text/xml;charset=utf-8"; } } From ed3f6541b0a8eeb44cf6a3852efd9add62ec443b Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Thu, 24 Mar 2022 08:06:52 -0300 Subject: [PATCH 5/7] git pull --- LICENSE | 2 +- lib/factory/webservices/functions.js | 29 +--------------------------- package.json | 2 +- 3 files changed, 3 insertions(+), 30 deletions(-) diff --git a/LICENSE b/LICENSE index eed4dc4..55ef056 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Guilherme Leal +Copyright (c) 2022 Guilherme Leal Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/lib/factory/webservices/functions.js b/lib/factory/webservices/functions.js index a86fd54..f0c69d0 100644 --- a/lib/factory/webservices/functions.js +++ b/lib/factory/webservices/functions.js @@ -5,35 +5,8 @@ function getContentType(uf) { switch (uf) { case 'GO': return "application/soap+xml"; - case 'AC': - case 'AL': - case 'AP': - case 'DF': - case 'ES': - case 'MG': - case 'PB': - case 'RJ': - case 'RN': - case 'RO': - case 'RR': - case 'RS': - case 'SC': - case 'SE': - case 'SP': - case 'TO': - case 'AM': - case 'BA': - case 'CE': - case 'MA': - case 'MS': - case 'MT': - case 'PA': - case 'PE': - case 'PI': - case 'PR': - return "text/xml;charset=utf-8"; default: - throw new Error('Content Type não encontrado!'); + return "text/xml;charset=utf-8"; } } exports.getContentType = getContentType; diff --git a/package.json b/package.json index 04b5668..356f3bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-dfe", - "version": "0.0.24", + "version": "0.0.25", "description": "Geração e integração de NF-e/NFC-e para node.js", "main": "lib/index.js", "scripts": { From 83eaf9a65ec0b3623e5efae5bb2e281b803e3062 Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Sun, 2 Oct 2022 11:43:21 -0300 Subject: [PATCH 6/7] Adicinado pem em Interface --- src/factory/interface/nfe/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/factory/interface/nfe/index.ts b/src/factory/interface/nfe/index.ts index 30959c0..bd87bd4 100644 --- a/src/factory/interface/nfe/index.ts +++ b/src/factory/interface/nfe/index.ts @@ -429,6 +429,7 @@ export interface Endereco { export interface Certificado { key: any; + pem: any; pfx: any; password: string; opcoes?: OpcoesCertificado; From 1e06291a66f3dfa3fd676e205331f8828097242b Mon Sep 17 00:00:00 2001 From: Cristovam Martins Date: Mon, 3 Oct 2022 00:55:18 -0300 Subject: [PATCH 7/7] =?UTF-8?q?campos=20n=C3=A3o=20obrigat=C3=B3rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/factory/interface/nfe/index.ts | 4 ++-- src/factory/webservices/webserviceHelper.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/factory/interface/nfe/index.ts b/src/factory/interface/nfe/index.ts index bd87bd4..e7979ef 100644 --- a/src/factory/interface/nfe/index.ts +++ b/src/factory/interface/nfe/index.ts @@ -359,8 +359,8 @@ export interface DetalhePagamento { indicadorFormaPagamento: string; formaPagamento: string; valor: string; - dadosCartao: DetalhePgtoCartao; - descricaoFormaPagamento: string; + dadosCartao?: DetalhePgtoCartao; + descricaoFormaPagamento?: string; } export interface DetalhePgtoCartao { diff --git a/src/factory/webservices/webserviceHelper.ts b/src/factory/webservices/webserviceHelper.ts index 8bffcc0..5b1a118 100644 --- a/src/factory/webservices/webserviceHelper.ts +++ b/src/factory/webservices/webserviceHelper.ts @@ -56,7 +56,7 @@ export abstract class WebServiceHelper { }, agent: new https.Agent({ rejectUnauthorized: false, - // pfx: cert.pfx, + pfx: cert.pfx, cert: cert.pem, key: cert.key, passphrase: cert.password,