a windev me he trabado en las siguientes lineas en las que me marca error windev los cuales están marcados de color amarillo, agradezco su colaboración. Lo marcado windev no lo reconoce como método o propiedad de la clase .net, otra cosa no se si estoy usando correctamente el comando for each, ya que por el error todavía no llego hasta esa línea de código.
scertificado ="C:\My projects\My_FElectronica\Exe\64-bit Windows executable\Certificados\mycertificado.pfx"
sClave ="MPS20160603328599"
sRutaArchivo="C:\My projects\My_FElectronica\Exe\64-bit Windows executable\"+sarchivo
sRpta is string
sLocal_typodocumento is string =Middle(sarchivo,13,2)
sPath is string = ""
sCertificat is string= scertificado
sPwd is string = sClave
sXmlfile is string = sRutaArchivo
clMoncertificat is X509Certificate2(sCertificat,sPwd)
xmldoc is System.Xml.XmlDocument()
xmldoc.PreserveWhitespace=True
xmldoc.Load(sXmlfile)
vrSignedXml is SignedXml(xmldoc)
vrSignedXml.SigningKey=clMoncertificat.PrivateKey
clVkeyinfo is KeyInfo()
clReferencia is Reference
clReferencia.uri=""
clEnv is XmlDsigEnvelopedSignatureTransform
vrSignedXml.AddReference(clReferencia)
clVx509chain is X509Chain()
clVx509chain.Build(clMoncertificat)
clLocal_element is X509ChainElement = X509Chain.chainelements(0)
x509data is KeyInfoX509Data(clLocal_element.Certificate)
subjectname is string = clLocal_element.Certificate.Subject
x509data.AddSubjectName(subjectname)
clVkeyinfo.AddClause(x509data)
vrSignedXml.KeyInfo=KeyInfo
vrSignedXml.ComputeSignature()
vrsignature is XmlElement<- vrSignedXml.GetXml()
vrsignature.Prefix="ds"
vrSignedXml.ComputeSignature()
mainnode is XmlNode
IF mainnode.localname()="Signature" THEN
newattribute is XmlAttribute <- new xmldoc.CreateAttribute("id")
newattribute.value="SignatureSP"
mainnode.attributes.append(newattribute)
END
END
clNsmgr is XmlNamespaceManager<- new XmlNamespaceManager(xmldoc.NameTable)
clNsmgr.AddNamespace("sac", "urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1")
SWITCH sLocal_typodocumento
CASE "01", "03" //factura y boleta
clNsmgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2")
sPath = "/tns:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
CASE "07" //n ota de credito
clNsmgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2")
sPath = "/tns:CreditNote/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
CASE "08" //nota de debito
clNsmgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2")
sPath = "/tns:DebitNote/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
CASE "RA" // COMUNICACION DE BAJA
clNsmgr.AddNamespace("tns", "urn:sunat:names:specification:ubl:peru:schema:xsd:VoidedDocuments-1")
sPath = "/tns:VoidedDocuments/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent"
CASE "RC" // RESUMEN DIARIO
clNsmgr.AddNamespace("tns", "urn:sunat:names:specification:ubl:peru:schema:xsd:SummaryDocuments-1")
sPath = "/tns:SummaryDocuments/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent"
OTHER CASE
END
clNsmgr.AddNamespace("udt", "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2")
clNsmgr.AddNamespace("qdt", "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2")
xmldoc.SelectSingleNode(sPath, clNsmgr).AppendChild(xmldoc.ImportNode(Signature, True))
xmldoc.Save(sXmlfile)
clNodelist is XmlNodeList<-xmldoc.GetElementsByTagName("ds:Signature")
IF clNodelist.Count<>1 THEN
sRpta="Se produjo error en la firma"
END
//vrSignedXml.LoadXml(clNodelist(0) is XmlElement)
//if vrSignedXml.CheckSignature()=False THEN
// sRpta="Se produjo un error en la firma de documento"
//else
// sRpta="Ok"
//END
RESULT sRpta
Imports System.IO
Imports System.IO.Compression
Imports System
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Security.Cryptography.X509Certificates
Imports System.Xml
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text
Imports System.Runtime.InteropServices
Namespace firmadoCE
<ClassInterface(ClassInterfaceType.AutoDual)> _
<ProgId("firmadoCE.firmado")> _
Public Class firmado
Public Function firmar(ByVal cRutaArchivo As String, ByVal cArchivo As String, ByVal cCertificado As String, ByVal cClave As String) As String
Dim cRpta As String
Dim local_typoDocumento As String = cArchivo.Substring(12, 2) ' retorna 01 o 03 0 ...
Dim l_xpath As String = ""
Dim f_certificat As String = cCertificado
Dim f_pwd As String = cClave
Dim xmlFile As String = cRutaArchivo & cArchivo
Dim MonCertificat As X509Certificate2 = New X509Certificate2(f_certificat, f_pwd)
Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.PreserveWhitespace = True
xmlDoc.Load(xmlFile)
Dim signedXml As SignedXml = New SignedXml(xmlDoc)
signedXml.SigningKey = MonCertificat.PrivateKey
Dim KeyInfo As KeyInfo = New KeyInfo()
Dim Reference As Reference = New Reference()
Reference.Uri = ""
Reference.AddTransform(New XmlDsigEnvelopedSignatureTransform())
signedXml.AddReference(Reference)
Dim X509Chain As X509Chain = New X509Chain()
X509Chain.Build(MonCertificat)
Dim local_element As X509ChainElement = X509Chain.ChainElements(0)
Dim x509Data As KeyInfoX509Data = New KeyInfoX509Data(local_element.Certificate)
Dim subjectName As String = local_element.Certificate.Subject
x509Data.AddSubjectName(subjectName)
KeyInfo.AddClause(x509Data)
signedXml.KeyInfo = KeyInfo
signedXml.ComputeSignature()
Dim signature As XmlElement = signedXml.GetXml()
signature.Prefix = "ds"
signedXml.ComputeSignature()
' node.Prefix = "ds"
If node.LocalName = "Signature" Then
Dim newAttribute As XmlAttribute = xmlDoc.CreateAttribute("Id")
newAttribute.Value = "SignatureSP"
node.Attributes.Append(newAttribute)
End If
Next node
Dim nsMgr As XmlNamespaceManager
nsMgr = New XmlNamespaceManager(xmlDoc.NameTable)
nsMgr.AddNamespace("sac", "urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1")
nsMgr.AddNamespace("ccts", "urn:un:unece:uncefact:documentation:2")
Select Case local_typoDocumento
Case "01", "03" 'factura y boleta
nsMgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2")
l_xpath = "/tns:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
Case "07" 'n ota de credito
nsMgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2")
l_xpath = "/tns:CreditNote/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
Case "08" 'nota de debito
nsMgr.AddNamespace("tns", "urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2")
l_xpath = "/tns:DebitNote/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent"
Case "RA" ' COMUNICACION DE BAJA
nsMgr.AddNamespace("tns", "urn:sunat:names:specification:ubl:peru:schema:xsd:VoidedDocuments-1")
l_xpath = "/tns:VoidedDocuments/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent"
Case "RC" ' RESUMEN DIARIO
nsMgr.AddNamespace("tns", "urn:sunat:names:specification:ubl:peru:schema:xsd:SummaryDocuments-1")
l_xpath = "/tns:SummaryDocuments/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent"
End Select
nsMgr.AddNamespace("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")
nsMgr.AddNamespace("udt", "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2")
nsMgr.AddNamespace("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2")
nsMgr.AddNamespace("qdt", "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2")
nsMgr.AddNamespace("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2")
xmlDoc.SelectSingleNode(l_xpath, nsMgr).AppendChild(xmlDoc.ImportNode(signature, True))
xmlDoc.Save(xmlFile)
Dim nodeList As XmlNodeList = xmlDoc.GetElementsByTagName("ds:Signature")
If (nodeList.Count <> 1) Then
cRpta = "SE PRODUJO ERROR EN LA FIRMA"
End If
signedXml.LoadXml(CType(nodeList(0), XmlElement))
If (signedXml.CheckSignature()) = False Then ' verificacion de la firma generada
cRpta = "SE PRODUJO UN ERROR EN LA FIRMA DE DOCUMENTO"
Else
cRpta = "OK"
End If
Return cRpta
End Function
End Class
End Namespace
Ya hace días le estoy dando vuelta al tema y no logro encontrar la solución.
Saludos