From 6bac2e30e0490acb4cd832d90fd8161d20b90494 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Mon, 3 Aug 2015 21:01:18 -0300 Subject: [PATCH] Metodo que gera qr code para NFC-e --- pynfe/processamento/__init__.py | 2 +- pynfe/processamento/assinatura.py | 4 -- pynfe/processamento/danfe.py | 38 +++++++++++++++++- pynfe/utils/flags.py | 2 + pynfe/utils/webservices.py | 81 ++++++++++++++++++++++++++------------- 5 files changed, 93 insertions(+), 34 deletions(-) diff --git a/pynfe/processamento/__init__.py b/pynfe/processamento/__init__.py index edde458..a28647d 100644 --- a/pynfe/processamento/__init__.py +++ b/pynfe/processamento/__init__.py @@ -2,4 +2,4 @@ from .serializacao import SerializacaoXML from .validacao import Validacao from .assinatura import AssinaturaA1 from .comunicacao import ComunicacaoSefaz -from .danfe import DANFE +from .danfe import DanfeNfce diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index a975c0d..b000bb4 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -1,10 +1,6 @@ # -*- coding: utf-8 -*- -import signxml -from OpenSSL import crypto from pynfe.utils import etree -from pynfe.entidades.certificado import CertificadoA1 -from pynfe.utils.flags import NAMESPACE_NFE, NAMESPACE_SIG import subprocess diff --git a/pynfe/processamento/danfe.py b/pynfe/processamento/danfe.py index e3a2f80..a03b337 100644 --- a/pynfe/processamento/danfe.py +++ b/pynfe/processamento/danfe.py @@ -1,3 +1,37 @@ -class DANFE(object): - pass +# -*- coding: utf-8 -*- +import base64 +import hashlib +from pynfe.utils.flags import VERSAO_QRCODE +from pynfe.utils.webservices import NFCE + +class Danfe(object): + """ Classe abstrata para a geração do Danfe. """ + pass + +class DanfeNfce(Danfe): + """ Classe para geração de Danfe para Nota Fiscal de Consumidor Eletrônica (NFC-e). """ + + def gerar_qrcode(self, token, csc, xml, uf): + # Procura atributos no xml + nfe = xml[1][0][0][2] + chave = nfe[0].attrib['Id'].replace('NFe','') + data = nfe[0][0][7].text.encode() + tpamb = nfe[0][0][14].text + cpf = nfe[0][2][0].text + total = nfe[0][4][0][14].text + icms = nfe[0][4][0][1].text + digest = nfe[1][0][2][2].text.encode() + + data = base64.b16encode(data).decode() + digest = base64.b16encode(digest).decode() + + 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() + + return NFCE[uf.upper()]['QR'] + url \ No newline at end of file diff --git a/pynfe/utils/flags.py b/pynfe/utils/flags.py index 0a2a65c..4ca34db 100644 --- a/pynfe/utils/flags.py +++ b/pynfe/utils/flags.py @@ -9,6 +9,8 @@ NAMESPACE_METODO = 'http://www.portalfiscal.inf.br/nfe/wsdl/' VERSAO_PADRAO = '3.10' +VERSAO_QRCODE = '100' + TIPOS_DOCUMENTO = ( 'CNPJ', 'CPF', diff --git a/pynfe/utils/webservices.py b/pynfe/utils/webservices.py index c7c6fbf..de448eb 100644 --- a/pynfe/utils/webservices.py +++ b/pynfe/utils/webservices.py @@ -11,7 +11,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'AC': { 'STATUS': '', @@ -19,7 +20,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://www.sefaznet.ac.gov.br/nfe/NFe.jsp?opc=3' }, 'AM': { 'STATUS': '', @@ -27,7 +29,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp?' }, 'RR': { 'STATUS': '', @@ -35,7 +38,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'PA': { 'STATUS': '', @@ -43,7 +47,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'AP': { 'STATUS': '', @@ -51,7 +56,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'TO': { 'STATUS': '', @@ -59,7 +65,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'MA': { 'STATUS': '', @@ -67,7 +74,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp' }, 'PI': { 'STATUS': '', @@ -75,7 +83,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'CE': { 'STATUS': '', @@ -83,7 +92,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'RN': { 'STATUS': '', @@ -91,7 +101,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://www.nfe.rn.gov.br/portal/consultarNFCe.jsp?' }, 'PB': { 'STATUS': '', @@ -99,7 +110,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'PE': { 'STATUS': '', @@ -107,7 +119,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'AL': { 'STATUS': '', @@ -115,7 +128,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'SE': { 'STATUS': '', @@ -123,7 +137,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://www.nfe.se.gov.br/portal/consultarNFCe.jsp?' }, 'BA': { 'STATUS': '', @@ -131,7 +146,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'MG': { 'STATUS': '', @@ -139,7 +155,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'ES': { 'STATUS': '', @@ -147,7 +164,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'RJ': { 'STATUS': '', @@ -155,7 +173,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'SP': { 'STATUS': 'nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx', @@ -163,7 +182,8 @@ NFCE = { 'RECIBO': 'nfce.fazenda.sp.gov.br/ws/nferetautorizacao.asmx', 'CHAVE': 'nfce.fazenda.sp.gov.br/ws/nfeconsulta2.asmx', 'INUTILIZACAO': 'nfce.fazenda.sp.gov.br/ws/nfeinutilizacao2.asmx', - 'EVENTOS': 'nfce.fazenda.sp.gov.br/ws/recepcaoevento.asmx' + 'EVENTOS': 'nfce.fazenda.sp.gov.br/ws/recepcaoevento.asmx', + 'QR': 'nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaQRCode.aspx' }, 'PR': { 'STATUS': 'nfce.fazenda.pr.gov.br/nfce/NFeStatusServico3', @@ -171,7 +191,8 @@ NFCE = { 'RECIBO': 'nfce.fazenda.pr.gov.br/nfce/NFeRetAutorizacao3', 'CHAVE': 'nfce.fazenda.pr.gov.br/nfce/NFeConsulta3', 'INUTILIZACAO': 'nfce.fazenda.pr.gov.br/nfce/NFeInutilizacao3', - 'EVENTOS': 'nfce.fazenda.pr.gov.br/nfce/NFeRecepcaoEvento' + 'EVENTOS': 'nfce.fazenda.pr.gov.br/nfce/NFeRecepcaoEvento', + 'QR': ' http://www.dfeportal.fazenda.pr.gov.br/dfe-portal/rest/servico/consultaNFCe?' }, 'SC': { 'STATUS': '', @@ -179,7 +200,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'RS': { 'STATUS': 'sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx', @@ -187,7 +209,8 @@ NFCE = { 'RECIBO': 'sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', 'CHAVE': 'sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx', 'INUTILIZACAO': 'sefazrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.asmx', - 'EVENTOS': 'sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx' + 'EVENTOS': 'sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx', + 'QR': 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx' }, 'MS': { 'STATUS': '', @@ -195,7 +218,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'MT': { 'STATUS': '', @@ -203,7 +227,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': 'http://www.sefaz.mt.gov.br/nfe/portal/consultanfce' }, 'GO': { 'STATUS': '', @@ -211,7 +236,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, 'DF': { 'STATUS': '', @@ -219,7 +245,8 @@ NFCE = { 'RECIBO': '', 'CHAVE': '', 'INUTILIZACAO': '', - 'EVENTOS': '' + 'EVENTOS': '', + 'QR': '' }, }