Browse Source

Merge branch 'master' of https://github.com/leotada/PyNFe

pull/7/head
Junior Tada 10 years ago
parent
commit
9b5a3e93c3
  1. 24
      pynfe/processamento/assinatura.py

24
pynfe/processamento/assinatura.py

@ -11,9 +11,10 @@ class Assinatura(object):
certificado = None certificado = None
senha = None senha = None
def __init__(self, certificado, senha):
def __init__(self, certificado, senha, autorizador=None):
self.certificado = certificado self.certificado = certificado
self.senha = senha self.senha = senha
self.autorizador = autorizador
def assinar(self, xml): def assinar(self, xml):
"""Efetua a assinatura da nota""" """Efetua a assinatura da nota"""
@ -64,12 +65,22 @@ class AssinaturaA1(Assinatura):
except Exception as e: except Exception as e:
raise e raise e
def assinarNfse(self, xml, xpath='.//ns1:InfDeclaracaoPrestacaoServico',
tag='InfDeclaracaoPrestacaoServico', retorna_string=False,
namespaces=None):
def assinarNfse(self, xml, lote=False, retorna_string=True):
try: try:
# define variaveis de acordo com autorizador
if self.autorizador == 'ginfes' and not lote:
xpath = './/ns2:InfRps'
tag = 'InfRps'
elif self.autorizador == 'ginfes' and lote:
xpath = './/ns1:LoteRps'
tag = 'LoteRps'
elif self.autorizador == 'betha':
xpath = './/ns1:InfDeclaracaoPrestacaoServico'
tag = 'InfDeclaracaoPrestacaoServico'
xml = etree.fromstring(xml) xml = etree.fromstring(xml)
namespaces = xml.nsmap if namespaces is None else namespaces
# define namespaces, pega do proprio xml
namespaces = xml.nsmap
# No raiz do XML de saida # No raiz do XML de saida
raiz = etree.Element('Signature', xmlns='http://www.w3.org/2000/09/xmldsig#') raiz = etree.Element('Signature', xmlns='http://www.w3.org/2000/09/xmldsig#')
siginfo = etree.SubElement(raiz, 'SignedInfo') siginfo = etree.SubElement(raiz, 'SignedInfo')
@ -98,10 +109,9 @@ class AssinaturaA1(Assinatura):
texto = texto.replace('ns1:', '').replace(':ns1', '') texto = texto.replace('ns1:', '').replace(':ns1', '')
arquivo.write(texto) arquivo.write(texto)
subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado, subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado,
'--pwd', self.senha, '--crypto', 'openssl', '--output', '--pwd', self.senha, '--crypto', 'openssl', '--output',
'nfse.xml', '--id-attr:Id', tag, '--trusted-pem', 'cert.pem', 'nfse.xml'])
'nfse.xml', '--id-attr:Id', tag, 'nfse.xml'])
if retorna_string: if retorna_string:
return open('nfse.xml', 'r').read() return open('nfse.xml', 'r').read()

Loading…
Cancel
Save