From e077e6d412c90c0cac96e1f249b9c56a8e075283 Mon Sep 17 00:00:00 2001 From: erikseyti Date: Thu, 20 Sep 2018 10:03:34 -0300 Subject: [PATCH 1/3] [NEW] Qrcode 2 funcionando de forma online --- pynfe/processamento/serializacao.py | 90 +++++++++++++++++++++++++++---------- pynfe/utils/flags.py | 10 ++--- qrCode2Teste.py | 33 ++++++++++++++ 3 files changed, 104 insertions(+), 29 deletions(-) create mode 100644 qrCode2Teste.py diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index a65596e..0e520bf 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -8,6 +8,7 @@ from pynfe.utils.webservices import NFCE import base64 import hashlib from datetime import datetime +import re class Serializacao(object): @@ -291,17 +292,17 @@ class SerializacaoXML(Serializacao): etree.SubElement(icms_item, 'modBC').text = str(produto_servico.icms_modalidade_determinacao_bc) # 00=Tributada integralmente. if produto_servico.icms_modalidade == '00': - etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) # Valor da BC do ICMS + etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) # Valor da BC do ICMS etree.SubElement(icms_item, 'pICMS').text = str(produto_servico.icms_aliquota) # Alíquota do imposto - etree.SubElement(icms_item, 'vICMS').text = '{:.2f}'.format(produto_servico.icms_valor or 0) # Valor do ICMS + etree.SubElement(icms_item, 'vICMS').text = '{:.2f}'.format(produto_servico.icms_valor or 0) # Valor do ICMS # 10=Tributada e com cobrança do ICMS por substituição tributária elif produto_servico.icms_modalidade == '10': - etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) # Valor da BC do ICMS + etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) # Valor da BC do ICMS etree.SubElement(icms_item, 'pICMS').text = str(produto_servico.icms_aliquota) # Alíquota do imposto - etree.SubElement(icms_item, 'vICMS').text = '{:.2f}'.format(produto_servico.icms_valor or 0) # Valor do ICMS + etree.SubElement(icms_item, 'vICMS').text = '{:.2f}'.format(produto_servico.icms_valor or 0) # Valor do ICMS # Modalidade de determinação da BC do ICMS ST # 0=Preço tabelado ou máximo sugerido; 1=Lista Negativa (valor);2=Lista Positiva (valor);3=Lista Neutra (valor);4=Margem Valor Agregado (%);5=Pauta (valor); - etree.SubElement(icms_item, 'modBCST').text = str(produto_servico.icms_st_modalidade_determinacao_bc) + etree.SubElement(icms_item, 'modBCST').text = str(produto_servico.icms_st_modalidade_determinacao_bc) etree.SubElement(icms_item, 'pMVAST').text = str(produto_servico.icms_st_percentual_adicional) # Percentual da margem de valor Adicionado do ICMS ST etree.SubElement(icms_item, 'pRedBCST').text = str(produto_servico.icms_st_percentual_reducao_bc) # APercentual da Redução de BC do ICMS ST etree.SubElement(icms_item, 'vBCST ').text = str(produto_servico.icms_st_valor_base_calculo) @@ -310,16 +311,16 @@ class SerializacaoXML(Serializacao): # 20=Com redução de base de cálculo elif produto_servico.icms_modalidade == '20': etree.SubElement(icms_item, 'pRedBC').text = '{:.2f}'.format(produto_servico.icms_percentual_reducao_bc or 0) # Percentual da Redução de BC - etree.SubElement(icms_item, 'vBC').text = '{:.2f}'.format(produto_servico.icms_valor_base_calculo or 0) # Valor da BC do ICMS + etree.SubElement(icms_item, 'vBC').text = '{:.2f}'.format(produto_servico.icms_valor_base_calculo or 0) # Valor da BC do ICMS etree.SubElement(icms_item, 'pICMS').text = '{:.2f}'.format(produto_servico.icms_aliquota or 0) # Alíquota do imposto etree.SubElement(icms_item, 'vICMS').text = '{:.2f}'.format(produto_servico.icms_valor or 0) # Valor do ICMS # NT_2016_002 - # Inclusão das regras de validação N17b-20, N23b-20 e N27b-20 que impedem que seja informado zero como percentual de FCP ou FCP ST. + # Inclusão das regras de validação N17b-20, N23b-20 e N27b-20 que impedem que seja informado zero como percentual de FCP ou FCP ST. # Os campos relativos ao Fundo de Combate à Pobreza só devem ser informados se o produto estiver sujeito a incidência do mesmo. - if produto_servico.fcp_valor: + if produto_servico.fcp_valor: etree.SubElement(icms_item, 'vBCFCP').text = '{:.2f}'.format(produto_servico.fcp_base_calculo or 0) # Base de calculo FCP - etree.SubElement(icms_item, 'pFCP').text = '{:.2f}'.format(produto_servico.fcp_percentual or 0) # Percentual FCP - etree.SubElement(icms_item, 'vFCP').text = '{:.2f}'.format(produto_servico.fcp_valor or 0) # Valor Fundo Combate a Pobreza + etree.SubElement(icms_item, 'pFCP').text = '{:.2f}'.format(produto_servico.fcp_percentual or 0) # Percentual FCP + etree.SubElement(icms_item, 'vFCP').text = '{:.2f}'.format(produto_servico.fcp_valor or 0) # Valor Fundo Combate a Pobreza # Impostos não implementados else: raise NotImplementedError @@ -604,14 +605,14 @@ class SerializacaoXML(Serializacao): etree.SubElement(lacres, 'nLacre').text = lacre.numero_lacre # Pagamento - """ Obrigatório o preenchimento do Grupo Informações de Pagamento para NF-e e NFC-e. + """ Obrigatório o preenchimento do Grupo Informações de Pagamento para NF-e e NFC-e. Para as notas com finalidade de Ajuste ou Devolução o campo Forma de Pagamento deve ser preenchido com 90=Sem Pagamento. """ pag = etree.SubElement(raiz, 'pag') detpag = etree.SubElement(pag, 'detPag') if nota_fiscal.finalidade_emissao == '3' or nota_fiscal.finalidade_emissao == '4': etree.SubElement(detpag, 'tPag').text = '90' etree.SubElement(detpag, 'vPag').text = '{:.2f}'.format(0) - else: + else: etree.SubElement(detpag, 'tPag').text = str(nota_fiscal.tipo_pagamento).zfill(2) etree.SubElement(detpag, 'vPag').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_nota) if nota_fiscal.tipo_pagamento == 3 or nota_fiscal.tipo_pagamento == 4: @@ -673,7 +674,7 @@ class SerializacaoXML(Serializacao): class SerializacaoQrcode(object): """ Classe que gera e serializa o qrcode de NFC-e no xml """ - def gerar_qrcode(self, token, csc, xml, return_qr=False): + def gerar_qrcode(self, token, csc, xml, return_qr=False,qrcode_emissao="1"): """ Classe para gerar url do qrcode da NFC-e """ # Procura atributos no xml ns = {'ns':NAMESPACE_NFE} @@ -699,22 +700,60 @@ class SerializacaoQrcode(object): icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0] digest = nfe.xpath('sig:Signature/sig:SignedInfo/sig:Reference/sig:DigestValue/text()', namespaces=sig)[0].encode() - data = base64.b16encode(data).decode() - digest = base64.b16encode(digest).decode() - if cpf is None: - url = 'chNFe={}&nVersao={}&tpAmb={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( - chave, VERSAO_QRCODE, tpamb, data.lower(), total, icms, digest.lower(), token) + lista_dia = re.findall("-\d{2}", str(data)) + dia = str(lista_dia[1]) + dia = dia[1:] + + + + replacements = {'0': ''} + token = re.sub('([0])', lambda m: replacements[m.group()], token) + + + + #VERSAO_QRCODE =2 + + if qrcode_emissao == "1": + #versão online + + url = '{}|{}|{}|{}'.format( + chave,VERSAO_QRCODE,tpamb,token + ) + else: - url = 'chNFe={}&nVersao={}&tpAmb={}&cDest={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( - chave, VERSAO_QRCODE, tpamb, cpf, data.lower(), total, icms, digest.lower(), token) + #versão offline + digest = digest.lower() + digest = digest.hex() - url_hash = hashlib.sha1(url.encode()+csc.encode()).digest() + url = '{}|{}|{}|{}|{}|{}|{}'.format( + chave,VERSAO_QRCODE,tpamb,dia,total,digest,token + ) + + url_complementar = url + csc + url_hash = hashlib.sha1(url_complementar.encode()).digest() url_hash = base64.b16encode(url_hash).decode() - url = url + '&cHashQRCode=' + url_hash.upper() + url_formatacao = "p=" + url = url_formatacao + url + "|" + url_hash + + + + + #if cpf is None: + # url = 'chNFe={}&nVersao={}&tpAmb={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( + # chave, VERSAO_QRCODE, tpamb, data.lower(), total, icms, digest.lower(), token) + #else: + # url = 'chNFe={}&nVersao={}&tpAmb={}&cDest={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( + # chave, VERSAO_QRCODE, tpamb, cpf, data.lower(), total, icms, digest.lower(), token) + + #url_hash = hashlib.sha1(url.encode()+csc.encode()).digest() + #url_hash = base64.b16encode(url_hash).decode() + + #url = url + '&cHashQRCode=' + url_hash.upper() + # url_chave - Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e. - # Informar a URL da “Consulta por chave de acesso da NFC-e”. + # Informar a URL da “Consulta por chave de acesso da NFC-e”. # A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso lista_uf_padrao = ['PR', 'CE', 'RS', 'RJ', 'RO'] if uf.upper() in lista_uf_padrao: @@ -734,7 +773,7 @@ class SerializacaoQrcode(object): else: qrcode = NFCE[uf.upper()]['HOMOLOGACAO'] + NFCE[uf.upper()]['QR'] + url url_chave = url_chave = NFCE[uf.upper()]['URL'] - # AC, AM, RR, PA, + # AC, AM, RR, PA, else: if tpamb == '1': qrcode = NFCE[uf.upper()]['HTTPS'] + NFCE[uf.upper()]['QR'] + url @@ -753,6 +792,9 @@ class SerializacaoQrcode(object): .replace('\n','').replace('<','<').replace('>','>').replace('amp;','') nfe = etree.fromstring(tnfe) # retorna nfe com o qrcode incluido NT2015/002 e qrcode + + + if return_qr: return nfe, qrcode.strip() # retorna apenas nfe com o qrcode incluido NT2015/002 diff --git a/pynfe/utils/flags.py b/pynfe/utils/flags.py index 7c1db9e..084389d 100644 --- a/pynfe/utils/flags.py +++ b/pynfe/utils/flags.py @@ -12,7 +12,7 @@ NAMESPACE_BETHA = 'http://www.betha.com.br/e-nota-contribuinte-ws' VERSAO_PADRAO = '4.00' -VERSAO_QRCODE = '100' +VERSAO_QRCODE = '2' TIPOS_DOCUMENTO = ( 'CNPJ', @@ -40,7 +40,7 @@ ICMS_TIPOS_TRIBUTACAO = ( ('ST', 'ICMS ST - Grupo de informação do ICMS ST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.') ) -ICMS_ORIGENS = ( +ICMS_ORIGENS = ( (0, 'Nacional, exceto as indicadas nos códigos 3, 4, 5 e 8. '), (1, 'Estrangeira - Importação direta, exceto a indicada no código 6.'), (2, 'Estrangeira - Adquirida no mercado interno, exceto a indicada no código 7.'), @@ -49,7 +49,7 @@ ICMS_ORIGENS = ( (5, 'Nacional, mercadoria ou bem com Conteúdo de Importação inferior ou igual a 40%. '), (6, 'Estrangeira - Importação direta, sem similar nacional, constante em lista da CAMEX e gás natural. '), (7, 'Estrangeira - Adquirida no mercado interno, sem similar nacional, constante em lista da CAMEX e gás natural.'), - (8, 'Nacional, mercadoria ou bem com Conteúdo de Importação superior a 70%.') + (8, 'Nacional, mercadoria ou bem com Conteúdo de Importação superior a 70%.') ) ICMS_MODALIDADES = ( @@ -147,7 +147,7 @@ IPI_TIPOS_CALCULO = ( PIS_TIPOS_TRIBUTACAO = ( ('01', 'PIS 01 - Operação Tributável - Base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)'), - ('02', 'PIS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), + ('02', 'PIS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), ('03', 'PIS 03 - Operacao Tributavel - Base de cálculo = quantidade vendida x alíquota por unidade de produto)'), ('04', 'PIS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), ('06', 'PIS 06 - Operacao Tributavel - Aliquota Zero'), @@ -184,7 +184,7 @@ PIS_TIPOS_CALCULO = IPI_TIPOS_CALCULO COFINS_TIPOS_TRIBUTACAO = ( ('01', 'COFINS 01 - Operação Tributável - Base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)'), - ('02', 'COFINS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), + ('02', 'COFINS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), ('03', 'COFINS 03 - Operacao Tributavel - Base de cálculo = quantidade vendida x alíquota por unidade de produto)'), ('04', 'COFINS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), ('06', 'COFINS 06 - Operacao Tributavel - Aliquota Zero'), diff --git a/qrCode2Teste.py b/qrCode2Teste.py new file mode 100644 index 0000000..b69597b --- /dev/null +++ b/qrCode2Teste.py @@ -0,0 +1,33 @@ +from pynfe.processamento.serializacao import SerializacaoQrcode +from pynfe.processamento.assinatura import AssinaturaA1 +uf = 'pr' +homologacao = 'True' +certificado = "certificado/lam.pfx" +senha = '1234' + + +from lxml import etree +nfe = '2900000151VENDA652532018-09-03T14:06:20-03:0011291840741321110KYAN VERSAO 3.021011279000260DONDON COM. VAREJISTA DE CALC. LTDA MEMUNDI SHOES SHOPPINGRODOVIA LOMANTO JUNIORS NSHOPP.JUA GARDEN 1-BJOAO XXIII2918407JUAZEIROBA489003651058BRASIL74361485671469617421001 0205 622-23SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL6404190028038005102PAR1.000078.9078.90SEM GTINPAR1.000078.9010102990.00000.00000.00990.00000.00000.000.000.000.000.000.000.000.000.000.000.000.0078.900.000.000.000.000.000.000.000.000.0078.900.0090178.90' + + +nfe = etree.fromstring(nfe) + +# # assinatura +a1 = AssinaturaA1(certificado, senha) +xml = a1.assinar(nfe) + + + +# # token de homologacao +token = '000001' + +# # # csc de homologação +csc = '5AB5F679-EA09-42CA-803B-6625B6107E2E' + + + + +# # # gera e adiciona o qrcode no xml NT2015/003 +xml_com_qrcode = SerializacaoQrcode().gerar_qrcode(token, csc, xml,qrcode_emissao="1") + +print(etree.tostring(xml_com_qrcode, encoding='unicode').replace('\n','').replace('<','<').replace('>','>').replace('amp;','')) From 16f73b8255e4ecc9cc082f09ad329f9283c911c4 Mon Sep 17 00:00:00 2001 From: erikseyti <31254342+erikseyti@users.noreply.github.com> Date: Mon, 24 Sep 2018 14:10:54 -0300 Subject: [PATCH 2/3] Arquivo de Teste do QrCode 2 Removido --- qrCode2Teste.py | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 qrCode2Teste.py diff --git a/qrCode2Teste.py b/qrCode2Teste.py deleted file mode 100644 index b69597b..0000000 --- a/qrCode2Teste.py +++ /dev/null @@ -1,33 +0,0 @@ -from pynfe.processamento.serializacao import SerializacaoQrcode -from pynfe.processamento.assinatura import AssinaturaA1 -uf = 'pr' -homologacao = 'True' -certificado = "certificado/lam.pfx" -senha = '1234' - - -from lxml import etree -nfe = '2900000151VENDA652532018-09-03T14:06:20-03:0011291840741321110KYAN VERSAO 3.021011279000260DONDON COM. VAREJISTA DE CALC. LTDA MEMUNDI SHOES SHOPPINGRODOVIA LOMANTO JUNIORS NSHOPP.JUA GARDEN 1-BJOAO XXIII2918407JUAZEIROBA489003651058BRASIL74361485671469617421001 0205 622-23SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL6404190028038005102PAR1.000078.9078.90SEM GTINPAR1.000078.9010102990.00000.00000.00990.00000.00000.000.000.000.000.000.000.000.000.000.000.000.0078.900.000.000.000.000.000.000.000.000.0078.900.0090178.90' - - -nfe = etree.fromstring(nfe) - -# # assinatura -a1 = AssinaturaA1(certificado, senha) -xml = a1.assinar(nfe) - - - -# # token de homologacao -token = '000001' - -# # # csc de homologação -csc = '5AB5F679-EA09-42CA-803B-6625B6107E2E' - - - - -# # # gera e adiciona o qrcode no xml NT2015/003 -xml_com_qrcode = SerializacaoQrcode().gerar_qrcode(token, csc, xml,qrcode_emissao="1") - -print(etree.tostring(xml_com_qrcode, encoding='unicode').replace('\n','').replace('<','<').replace('>','>').replace('amp;','')) From c6e620104d2ff42481f4c42f054c10f6e3e8a939 Mon Sep 17 00:00:00 2001 From: juniortada Date: Mon, 24 Sep 2018 14:51:41 -0300 Subject: [PATCH 3/3] =?UTF-8?q?[fix]=20corre=C3=A7=C3=B5es=20e=20ajustes?= =?UTF-8?q?=20no=20merge=20qrcode=202.00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/serializacao.py | 42 ++++++------------------------------- pynfe/utils/webservices.py | 4 ++-- 2 files changed, 8 insertions(+), 38 deletions(-) diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 0e520bf..19d9570 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -256,7 +256,7 @@ class SerializacaoXML(Serializacao): # Lei da transparencia # Tributos aprox por item if produto_servico.valor_tributos_aprox: - etree.SubElement(imposto, 'vTotTrib').text = produto_servico.valor_tributos_aprox + etree.SubElement(imposto, 'vTotTrib').text = str(produto_servico.valor_tributos_aprox) ### ICMS icms = etree.SubElement(imposto, 'ICMS') @@ -674,7 +674,7 @@ class SerializacaoXML(Serializacao): class SerializacaoQrcode(object): """ Classe que gera e serializa o qrcode de NFC-e no xml """ - def gerar_qrcode(self, token, csc, xml, return_qr=False,qrcode_emissao="1"): + def gerar_qrcode(self, token, csc, xml, return_qr=False, online=True): """ Classe para gerar url do qrcode da NFC-e """ # Procura atributos no xml ns = {'ns':NAMESPACE_NFE} @@ -697,30 +697,19 @@ class SerializacaoQrcode(object): except IndexError: cpf = None total = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vNF/text()', namespaces=ns)[0] - icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0] + # icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0] digest = nfe.xpath('sig:Signature/sig:SignedInfo/sig:Reference/sig:DigestValue/text()', namespaces=sig)[0].encode() - lista_dia = re.findall("-\d{2}", str(data)) dia = str(lista_dia[1]) dia = dia[1:] - - - replacements = {'0': ''} token = re.sub('([0])', lambda m: replacements[m.group()], token) - - #VERSAO_QRCODE =2 - - if qrcode_emissao == "1": + if online: #versão online - - url = '{}|{}|{}|{}'.format( - chave,VERSAO_QRCODE,tpamb,token - ) - + url = '{}|{}|{}|{}'.format(chave,VERSAO_QRCODE, tpamb, token) else: #versão offline digest = digest.lower() @@ -734,23 +723,7 @@ class SerializacaoQrcode(object): url_hash = hashlib.sha1(url_complementar.encode()).digest() url_hash = base64.b16encode(url_hash).decode() - url_formatacao = "p=" - url = url_formatacao + url + "|" + url_hash - - - - - #if cpf is None: - # url = 'chNFe={}&nVersao={}&tpAmb={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( - # chave, VERSAO_QRCODE, tpamb, data.lower(), total, icms, digest.lower(), token) - #else: - # url = 'chNFe={}&nVersao={}&tpAmb={}&cDest={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( - # chave, VERSAO_QRCODE, tpamb, cpf, data.lower(), total, icms, digest.lower(), token) - - #url_hash = hashlib.sha1(url.encode()+csc.encode()).digest() - #url_hash = base64.b16encode(url_hash).decode() - - #url = url + '&cHashQRCode=' + url_hash.upper() + url = 'p={}|{}'.format(url, url_hash) # url_chave - Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e. # Informar a URL da “Consulta por chave de acesso da NFC-e”. @@ -792,9 +765,6 @@ class SerializacaoQrcode(object): .replace('\n','').replace('<','<').replace('>','>').replace('amp;','') nfe = etree.fromstring(tnfe) # retorna nfe com o qrcode incluido NT2015/002 e qrcode - - - if return_qr: return nfe, qrcode.strip() # retorna apenas nfe com o qrcode incluido NT2015/002 diff --git a/pynfe/utils/webservices.py b/pynfe/utils/webservices.py index 270d40c..fd026bf 100644 --- a/pynfe/utils/webservices.py +++ b/pynfe/utils/webservices.py @@ -199,7 +199,7 @@ NFCE = { 'INUTILIZACAO': 'nfce.fazenda.sp.gov.br/ws/NFeInutilizacao4.asmx', 'EVENTOS': 'nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx', 'QR': 'nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaQRCode.aspx?', - 'URL': 'nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaPublica.aspx', + 'URL': 'nfce.fazenda.sp.gov.br/consulta', 'HTTPS': 'https://', 'HOMOLOGACAO': 'https://homologacao.' }, @@ -212,7 +212,7 @@ NFCE = { 'EVENTOS': 'nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4?wsdl', 'CADASTRO': 'nfce.sefa.pr.gov.br/nfce/CadConsultaCadastro4?wsdl', 'QR': 'http://www.fazenda.pr.gov.br/nfce/qrcode?', - 'URL': 'http://www.fazenda.pr.gov.br', + 'URL': 'www.fazenda.pr.gov.br/nfce/consulta', 'HTTPS': 'https://', 'HOMOLOGACAO': 'https://homologacao.' },