Browse Source

Metodo que gera qr code para NFC-e

pull/1/head
Junior Tada 11 years ago
parent
commit
6bac2e30e0
  1. 2
      pynfe/processamento/__init__.py
  2. 4
      pynfe/processamento/assinatura.py
  3. 38
      pynfe/processamento/danfe.py
  4. 2
      pynfe/utils/flags.py
  5. 81
      pynfe/utils/webservices.py

2
pynfe/processamento/__init__.py

@ -2,4 +2,4 @@ from .serializacao import SerializacaoXML
from .validacao import Validacao from .validacao import Validacao
from .assinatura import AssinaturaA1 from .assinatura import AssinaturaA1
from .comunicacao import ComunicacaoSefaz from .comunicacao import ComunicacaoSefaz
from .danfe import DANFE
from .danfe import DanfeNfce

4
pynfe/processamento/assinatura.py

@ -1,10 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import signxml
from OpenSSL import crypto
from pynfe.utils import etree from pynfe.utils import etree
from pynfe.entidades.certificado import CertificadoA1
from pynfe.utils.flags import NAMESPACE_NFE, NAMESPACE_SIG
import subprocess import subprocess

38
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

2
pynfe/utils/flags.py

@ -9,6 +9,8 @@ NAMESPACE_METODO = 'http://www.portalfiscal.inf.br/nfe/wsdl/'
VERSAO_PADRAO = '3.10' VERSAO_PADRAO = '3.10'
VERSAO_QRCODE = '100'
TIPOS_DOCUMENTO = ( TIPOS_DOCUMENTO = (
'CNPJ', 'CNPJ',
'CPF', 'CPF',

81
pynfe/utils/webservices.py

@ -11,7 +11,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'AC': { 'AC': {
'STATUS': '', 'STATUS': '',
@ -19,7 +20,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://www.sefaznet.ac.gov.br/nfe/NFe.jsp?opc=3'
}, },
'AM': { 'AM': {
'STATUS': '', 'STATUS': '',
@ -27,7 +29,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp?'
}, },
'RR': { 'RR': {
'STATUS': '', 'STATUS': '',
@ -35,7 +38,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'PA': { 'PA': {
'STATUS': '', 'STATUS': '',
@ -43,7 +47,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'AP': { 'AP': {
'STATUS': '', 'STATUS': '',
@ -51,7 +56,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'TO': { 'TO': {
'STATUS': '', 'STATUS': '',
@ -59,7 +65,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'MA': { 'MA': {
'STATUS': '', 'STATUS': '',
@ -67,7 +74,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp'
}, },
'PI': { 'PI': {
'STATUS': '', 'STATUS': '',
@ -75,7 +83,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'CE': { 'CE': {
'STATUS': '', 'STATUS': '',
@ -83,7 +92,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'RN': { 'RN': {
'STATUS': '', 'STATUS': '',
@ -91,7 +101,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://www.nfe.rn.gov.br/portal/consultarNFCe.jsp?'
}, },
'PB': { 'PB': {
'STATUS': '', 'STATUS': '',
@ -99,7 +110,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'PE': { 'PE': {
'STATUS': '', 'STATUS': '',
@ -107,7 +119,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'AL': { 'AL': {
'STATUS': '', 'STATUS': '',
@ -115,7 +128,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'SE': { 'SE': {
'STATUS': '', 'STATUS': '',
@ -123,7 +137,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://www.nfe.se.gov.br/portal/consultarNFCe.jsp?'
}, },
'BA': { 'BA': {
'STATUS': '', 'STATUS': '',
@ -131,7 +146,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'MG': { 'MG': {
'STATUS': '', 'STATUS': '',
@ -139,7 +155,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'ES': { 'ES': {
'STATUS': '', 'STATUS': '',
@ -147,7 +164,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'RJ': { 'RJ': {
'STATUS': '', 'STATUS': '',
@ -155,7 +173,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'SP': { 'SP': {
'STATUS': 'nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx', 'STATUS': 'nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx',
@ -163,7 +182,8 @@ NFCE = {
'RECIBO': 'nfce.fazenda.sp.gov.br/ws/nferetautorizacao.asmx', 'RECIBO': 'nfce.fazenda.sp.gov.br/ws/nferetautorizacao.asmx',
'CHAVE': 'nfce.fazenda.sp.gov.br/ws/nfeconsulta2.asmx', 'CHAVE': 'nfce.fazenda.sp.gov.br/ws/nfeconsulta2.asmx',
'INUTILIZACAO': 'nfce.fazenda.sp.gov.br/ws/nfeinutilizacao2.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': { 'PR': {
'STATUS': 'nfce.fazenda.pr.gov.br/nfce/NFeStatusServico3', 'STATUS': 'nfce.fazenda.pr.gov.br/nfce/NFeStatusServico3',
@ -171,7 +191,8 @@ NFCE = {
'RECIBO': 'nfce.fazenda.pr.gov.br/nfce/NFeRetAutorizacao3', 'RECIBO': 'nfce.fazenda.pr.gov.br/nfce/NFeRetAutorizacao3',
'CHAVE': 'nfce.fazenda.pr.gov.br/nfce/NFeConsulta3', 'CHAVE': 'nfce.fazenda.pr.gov.br/nfce/NFeConsulta3',
'INUTILIZACAO': 'nfce.fazenda.pr.gov.br/nfce/NFeInutilizacao3', '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': { 'SC': {
'STATUS': '', 'STATUS': '',
@ -179,7 +200,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'RS': { 'RS': {
'STATUS': 'sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx', 'STATUS': 'sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx',
@ -187,7 +209,8 @@ NFCE = {
'RECIBO': 'sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', 'RECIBO': 'sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx',
'CHAVE': 'sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx', 'CHAVE': 'sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx',
'INUTILIZACAO': 'sefazrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.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': { 'MS': {
'STATUS': '', 'STATUS': '',
@ -195,7 +218,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'MT': { 'MT': {
'STATUS': '', 'STATUS': '',
@ -203,7 +227,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': 'http://www.sefaz.mt.gov.br/nfe/portal/consultanfce'
}, },
'GO': { 'GO': {
'STATUS': '', 'STATUS': '',
@ -211,7 +236,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
'DF': { 'DF': {
'STATUS': '', 'STATUS': '',
@ -219,7 +245,8 @@ NFCE = {
'RECIBO': '', 'RECIBO': '',
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': ''
'EVENTOS': '',
'QR': ''
}, },
} }

Loading…
Cancel
Save