Página 5 de 5

NFS-e PMSP

Enviado: 31 Ago 2022 11:59
por JoséQuintas
URI é aonde tem ID.
NFE ID="xxxxxx".

Se contém ID no início, então a assinatura é com URI = .T.
Veja se tem isso no lote, ou se é só na nota fiscal mesmo.

A assinatura em duas partes, é porque cada nota isolada vai ter sua assinatura, então remove possível assinatura anterior antes de assinar, esse é o default.
Já no caso do lote, não pode remover nenhuma assinatura interna, deve só acrescentar a assinatura do lote no XML, por isso indicar pra não remover.
O lote nada mais é do que um XML onde o outro está dentro (ou outros)

Apenas pra clarear a idéia, não é o formato correto, e não usando o formato XML senão o fórum considera que é HTML e não XML, e não mostra direito:

Código: Selecionar todos

(blocolote)

(lote)
(blabla)

(notabloco)
(nota ID="xxxx")
(/nota)
(signature)
(/signature)
(/notabloco)

(/lote)
(signature)
(/signature)

(/blocolote)
primeiro é o notabloco separado e assinar, é uma nota.
depois acrescentar o resto do lote, e assinar de novo.
os nomes certos, e informações adicionais, estão no manual (eu acho).

Na nota nacional é a mesma coisa, mas na nacional o lote não tem assinatura.

Essa parte poderia ser acrescentada depois no METHOD AssinaXml(), pra assinar a nota, colocar no lote e assinar novamente.
Aproveita que está com o manual na mão e confirme se lá tem os detalhes do lote, ou se vai ter que pegar do webservice.

NFS-e PMSP

Enviado: 31 Ago 2022 17:48
por malcarli
Entendido, esta parte de assinatura da nota e do lote.

Boa tarde Mestre Quintas, estou tentando usar assinaturacapicom.prg para assinar nfse-sp

Usei os parametros abaixo:

cTexto := "37925504A 00000000085320220831TNN00000000001000000000000000000002919239732100000148"

*** assinando com rs-sha1 usando o numero de serie (4B8Db3B9D22A50B5) deveria dar:
*** U+JpZtil9BHOLcOSvnHbJa+FyO3wdtxfUUFvNwRiR5/45tYSzj+7bejzDwNYY+7j+dOMIMzT8vchfei+Hwi3s9SYc98ipkP3RDAkQSKqMYxBgTDgYdZYI0ehVL9RhpvPC+SczWUQfSweD5e+bzbmciMEE928dhK1UuzWGqUhJzgjDs18ajdAeo/3UeNViNM10Da1P1o90dR3cUusSLs4mXcPRS3A/cSIixfKlqpVjKVztYQX49yB12b068rgAKvc7rfzVVMYAcpd5xB5e7Rc0vbZF/WZvvq7JflQ30GeGBVoLia4W/JXVJmTGU3G3XSsk7TTLhSKYHJVakm7FQugKg==

Mas dá outra assinatura.

No caso da nfse-sp é utilizado o serial do certificado, esta rotina usa qual parametro para assinar?

Abaixo é como está descrito no manual da nfse-sp
2º - Converta a cadeia de caracteres ASCII para bytes.
3º - Gere o HASH (array de bytes) utilizando SHA1.
4º - Assine o HASH (array de bytes) utilizando RSA-SHA1.
ATENÇÃO! Na maioria das linguagens de programação, os passos 3 e 4 são feitos através de uma única função. Verifique a documentação de sua linguagem para evitar assinar um hash de um hash.

NFS-e PMSP

Enviado: 01 Set 2022 11:14
por JoséQuintas

Código: Selecionar todos

STATIC FUNCTION AssinaBlocoAssinatura( cURI, lComURI )

   LOCAL cSignatureNode := ""

   IF lComURI
      cURI := "#" + cURI
   ENDIF
   cSignatureNode += [<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">]
   cSignatureNode +=    [<SignedInfo>]
   cSignatureNode +=       [<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>]
   cSignatureNode +=       [<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />]
   cSignatureNode +=       [<Reference URI="] + cURI + [">]
   cSignatureNode +=       [<Transforms>]
   cSignatureNode +=          [<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />]
   cSignatureNode +=          [<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />]
   cSignatureNode +=       [</Transforms>]
   cSignatureNode +=       [<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />]
   cSignatureNode +=       [<DigestValue>]
   cSignatureNode +=       [</DigestValue>]
   cSignatureNode +=       [</Reference>]
   cSignatureNode +=    [</SignedInfo>]
   cSignatureNode +=    [<SignatureValue>]
   cSignatureNode +=    [</SignatureValue>]
   cSignatureNode +=    [<KeyInfo>]
   cSignatureNode +=    [</KeyInfo>]
   cSignatureNode += [</Signature>]

   RETURN cSignatureNode
Ao que parece, já usa SHA1.
Mas a assinatura é do XML e não de um texto qualquer.