FORUMS PROFESSIONNELS
WINDEV
,
WEBDEV
et
WINDEV Mobile
Accueil
|
Messages récents
|
Connexion
|
Déconnexion
|
Français
Accueil
→
WINDEV 25
→
Assinar xml Sefaz com certificado A1 ou A3 em Windev
Assinar xml Sefaz com certificado A1 ou A3 em Windev
Débuté par amarildo, 04 aoû. 2021 12:48 - Aucune réponse
Connectez-vous…
amarildo
#1
Membre enregistré
535 messages
Popularité : +14 (14 votes)
Posté le 04 août 2021 - 12:48
https://windevdesenvolvimento.blogspot.com/2021/08/dicas-3377-windev-webdev-mobile_1.html
Procedure
assinar_xml
(
recebe_xml
,
recebe_refUri
,
recebe_id
,
receber_certificado_local_arquivo
,
receber_senha
)
//,recebe_dados_certificado
//Info(recebe_dados_certificado)
cl
X509certi
is
X509Certificate2
(
receber_certificado_local_arquivo
,
receber_senha
)
//clX509certi
is X509Certificate2(recebe_dados_certificado)
cl
Doc
is
System.Xml.XmlDocument
;
cl
Doc.LoadXml
(
recebe_xml
)
// Ler um arquivo Xml
n
QtdeRefUri
is int
=
cl
Doc.GetElementsByTagName
(
recebe_refUri
)
.
Count
//_refUri= (sRefUri IS STRING = "infNFe")
IF
(
n
QtdeRefUri
) =
0
THEN
RESULT
"erro assinar"
//nao existe // does not exists // ne pas exister
ELSE
VrSignedXml
is
SignedXml
(
cl
Doc
)
//cria um objeto assinado
VrSignedXml.SigningKey
=
cl
X509certi.PrivateKey
// adiciona a chave do certificado
Reference
is
Reference
//= new Reference(); // Cria a referencia para assinatura
Reference.URI
=
"#"
+
recebe_id
Env
is
XmlDsigEnvelopedSignatureTransform
// adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura
Reference.AddTransform
(
Env
)
c
14
is
XmlDsigC14NTransform
Reference.AddTransform
(
c
14
)
VrSignedXml.AddReference
(
Reference
)
// adiciona a referencia no xml assinado
VrkeyInfo
is
KeyInfo
// Cria a chave
VrkeyInfo.AddClause
(
new
KeyInfoX509Data
(
cl
X509certi
)
)
// carrega o certificado em um keyinfox509 e adiciona ao keyinfo
VrSignedXml.KeyInfo
=
VrkeyInfo
// adiciona o keyinfo ao xml assinado
VrSignedXml.ComputeSignature
(
)
xmlDigitalSignature
is
System.Xml.XmlElement dynamic
=
VrSignedXml.GetXml
(
)
// busca a representacao XML da assinatura e salva no XML
cl
Doc.DocumentElement.AppendChild
(
cl
Doc.ImportNode
(
xmlDigitalSignature
,
True
)
)
// adiciona a assinatura no documento
RESULT
cl
Doc.get_InnerXml
(
)
//salva o documento assinado
END
Procedure
assinar_xml_serial
(
recebe_xml
,
recebe_refUri
,
recebe_id
,
receber_serial_numero
)
cl
Certificado
is
X509Store
(
StoreName.My
,
StoreLocation.CurrentUser
)
//Carrega Store do windows, utilizando o Usuario Logado
cl
Certificado.open
(
OpenFlags.ReadOnly
)
cl
Certificado_carrega
is
X509Certificate2Collection
(
cl
Certificado.Certificates
)
// Carregar Certificados
cl
Certificado_colecao
is
X509Certificate2Collection
(
cl
Certificado_carrega.Find
(
X509FindType.FindBySerialNumber
,
receber_serial_numero
,
False
)
)
//Busca certificado que tem o SerialNumber
cl
X509certi
is
X509Certificate2
FOR
E
ACH
cl
X509certi OF
cl
Certificado_colecao
// fazer um loop para pegar o certificado desejado
cl
Doc
is
System.Xml.XmlDocument
;
cl
Doc.LoadXml
(
recebe_xml
)
// Ler um arquivo Xml
n
QtdeRefUri
is int
=
cl
Doc.GetElementsByTagName
(
recebe_refUri
)
.
Count
//_refUri= (sRefUri IS STRING = "infNFe")
IF
(
n
QtdeRefUri
) =
0
THEN
RESULT
"erro assinar"
//nao existe // does not exists // ne pas exister
ELSE
VrSignedXml
is
SignedXml
(
cl
Doc
)
//cria um objeto assinado
VrSignedXml.SigningKey
=
cl
X509certi.PrivateKey
// adiciona a chave do certificado
Reference
is
Reference
//= new Reference(); // Cria a referencia para assinatura
Reference.URI
=
"#"
+
recebe_id
Env
is
XmlDsigEnvelopedSignatureTransform
// adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura
Reference.AddTransform
(
Env
)
c
14
is
XmlDsigC14NTransform
Reference.AddTransform
(
c
14
)
VrSignedXml.AddReference
(
Reference
)
// adiciona a referencia no xml assinado
VrkeyInfo
is
KeyInfo
// Cria a chave
VrkeyInfo.AddClause
(
new
KeyInfoX509Data
(
cl
X509certi
)
)
// carrega o certificado em um keyinfox509 e adiciona ao keyinfo
VrSignedXml.KeyInfo
=
VrkeyInfo
// adiciona o keyinfo ao xml assinado
VrSignedXml.ComputeSignature
(
)
xmlDigitalSignature
is
System.Xml.XmlElement dynamic
=
VrSignedXml.GetXml
(
)
// busca a representacao XML da assinatura e salva no XML
cl
Doc.DocumentElement.AppendChild
(
cl
Doc.ImportNode
(
xmlDigitalSignature
,
True
)
)
// adiciona a assinatura no documento
RESULT
cl
Doc.get_InnerXml
(
)
//salva o documento assinado
END
END
Signaler
0
0
→ Revenir à WINDEV 25
WINDEV 25
Français
English
Español
Portuguesa
Fermer cette fenêtre
Type de recherche
Uniquement les sujets
Tous les messages
Période de recherche
Date indifférente
Moins d'une heure
Moins de 24 heures
Moins d'une semaine
Moins d'un mois
Moins d'un an
Annuler
Aperçu de votre message
Ajouter une image
Importer une image depuis une URL
Envoyer une image depuis un fichier de votre disque
Déposez ici un fichier ou cliquez sur "Parcourir..."
ou
Annuler
0%
WLangage
SQL
XML, HTML
JAVA, Javascript
Texte