Browse Source

nfse assinatura

pull/7/head
Leonardo Tada 10 years ago
parent
commit
e3b272e2f5
  1. 8
      pynfe/processamento/assinatura.py
  2. 2
      pynfe/processamento/serializacao.py
  3. 2
      tests/valida.py

8
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()

2
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)

2
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)
Loading…
Cancel
Save