From e3b272e2f53418388a4720a34726d01ea0a85a42 Mon Sep 17 00:00:00 2001 From: Leonardo Tada Date: Tue, 24 Nov 2015 11:29:20 -0200 Subject: [PATCH] nfse assinatura --- pynfe/processamento/assinatura.py | 8 +++++--- pynfe/processamento/serializacao.py | 2 +- tests/valida.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index d292811..0fdddd7 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -75,7 +75,9 @@ class AssinaturaA1(Assinatura): etree.SubElement(siginfo, 'SignatureMethod', Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1') # Tenta achar a tag infNFe # TODO a proxima linha nao eh encontrada pq precisa colocar o namespace, GerarNfseEnvio. - ref = etree.SubElement(siginfo, 'Reference', URI='#'+xml.xpath('GerarNfseEnvio/Rps/InfDeclaracaoPrestacaoServico')[0].attrib['Id']) + ref = etree.SubElement(siginfo, 'Reference', URI='#' + + xml.xpath('/GerarNfseEnvio/ns1:Rps/ns1:InfDeclaracaoPrestacaoServico', + namespaces={'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'})[0].attrib['Id']) trans = etree.SubElement(ref, 'Transforms') etree.SubElement(trans, 'Transform', Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature') @@ -86,12 +88,12 @@ class AssinaturaA1(Assinatura): keyinfo = etree.SubElement(raiz, 'KeyInfo') etree.SubElement(keyinfo, 'X509Data') - rps = xml.xpath('Rps')[0] + rps = xml.xpath('ns1:Rps', namespaces={'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'})[0] rps.append(raiz) # Escreve no arquivo depois de remover caracteres especiais e parse string with open('nfse.xml', 'w') as arquivo: - arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False))) + arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False).replace('ns1:', '').replace(':ns1', ''))) subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'nfse.xml']) xml = etree.parse('funfa.xml').getroot() diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 9268831..22d386d 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -653,7 +653,7 @@ class SerializacaoNfse(Serializacao): gnfse = nfse_schema.GerarNfseEnvio() gnfse.Rps = declaracao_servico - return gnfse.toxml(element_name='GerarNfseEnvio').replace('ns1:', '').replace(':ns1', '') + return gnfse.toxml(element_name='GerarNfseEnvio') def _serializar_emitente(self, emitente, tag_raiz='Prestador', retorna_string=False): raiz = etree.Element(tag_raiz) diff --git a/tests/valida.py b/tests/valida.py index fdf06cc..074daa6 100644 --- a/tests/valida.py +++ b/tests/valida.py @@ -3,6 +3,6 @@ from lxml import etree xmlschema_doc = etree.parse('nfse_v202.xsd') xmlschema = etree.XMLSchema(xmlschema_doc) -xml = etree.parse('testef.xml') +xml = etree.parse('funfa.xml') print(xmlschema.validate(xml)) xmlschema.assertValid(xml)