NFS-e PMSP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

NFS-e PMSP

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

NFS-e PMSP

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

NFS-e PMSP

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder