Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Falha assinatura #306

Open
breduribeiro opened this issue Jan 29, 2022 · 0 comments
Open

Falha assinatura #306

breduribeiro opened this issue Jan 29, 2022 · 0 comments

Comments

@breduribeiro
Copy link

Estou tentando criar um pedido de NFSe para o webservice da Prefeitura de BH, para o seguinte xml:
_BODY = (""
"<GerarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd\">"
"<LoteRps Id='lote0001' versao='1.00' xmlns="http://www.abrasf.org.br/nfse.xsd\">"
"0001"
f"{_CNPJ}"
f"{_INSM}"
"1"
""
"<Rps xmlns="http://www.abrasf.org.br/nfse.xsd\">"
"<InfRps Id='rps0001' xmlns="http://www.abrasf.org.br/nfse.xsd\">"
< Informações da RPS
""
""
""
""
"")

Primeiro assino o RPS com o seguinte método:
xmlBODY = etree.fromstring(_BODY)
xmlBODY = signer.assina_xml(xmlBODY,"rps0001")
Essa primeira assinatura sai perfeita. Em seguida tento assinar o Lote, com o seguinte método:
print(etree.dump(xmlBODY))
xmlBODY = etree.fromstring(xmlBODY)
_BODY = signer.assina_xml(xmlBODY, "lote0001")
Porém nesta segunda assinatura, a assinatura do lote é introduzida ANTES da assinatura do RPS, gerando erro de assinatura.

Tentei um segundo método:
Primeiro assino o RPS, extraindo o RPS para um arquivo xmlRPS.
xmlRPS = signer.assina_xml(xmlBODY.xpath('//d:Rps', namespaces={'d': 'http://www.abrasf.org.br/nfse.xsd'})[0], "rps0001")
Em seguida assino o lote SEM a assinatura do RPS, usando o mesmo método de assinatura do lote descrito acima.
Em seguida insiro o RPS assinado no documento, substituindo a parte sem assinatura do documento completo:
container = xmlBODY.xpath('//d:Rps', namespaces={'d': 'http://www.abrasf.org.br/nfse.xsd'})[0]
parent = container.getparent()
parent.replace(container, xmlRPS)

Dessa forma o documento fica perfeitamente assinado, porém recebo a mensagem E174 Arquivo enviado com erro na assinatura.

Um detalhe é que para poder inserir o arquivo dentro do SOUP, eu preciso primeiro converter o arquivo xml para string (o que na verdade converte para Byte, e depois eu converto para string).

Será que alguém consegue entender o que pode estar acontecendo de errado, tanto no erro do primeiro método quanto no erro do segundo método?

Obrigado!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant