Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Temas legales
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 76
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Aplicación de Windows Forms, un formulario con un botón (está en VB. NET)

Código:
Imports java.security
Imports java.io
Imports java.util
Imports java.security.cert
Imports javax.xml.parsers
Imports es.mityc.javasign.pkstore
Imports es.mityc.javasign.pkstore.keystore
Imports es.mityc.javasign.trust
Imports es.mityc.javasign.xml.xades.policy
Imports es.mityc.firmaJava.libreria.xades
Imports es.mityc.javasign.xml.refs
Imports es.mityc.firmaJava.libreria.utilidades
Imports org.w3c.dom
Imports sviudes.blogspot.com
Imports System.Xml


Public Class Form1

    Private Sub btnFirmarXML_Click(sender As Object, e As EventArgs) Handles btnFirmarXML.Click

        Dim ArchivoXML As String = "C:\Prueba\Factura.xml"
        Dim ArchivoXMLFirmado As String = "C:\Prueba\Factura.xsig"
        Dim ArchivoCertificado As String = "C:\Prueba\Certificado.pfx"
        Dim PasswordCertificado As String = "PasswordCertificado"

        Dim ClavePrivada As PrivateKey = Nothing
        Dim Proveedor As Provider = Nothing
        Dim Certificado As java.security.cert.X509Certificate = CargaCertificado(ArchivoCertificado, PasswordCertificado, ClavePrivada, Proveedor)

        ' Si hay certificado
        If Certificado IsNot Nothing Then

            ' Política de firma
            TrustFactory.instance = es.mityc.javasign.trust.TrustExtendFactory.newInstance()
            TrustFactory.truster = es.mityc.javasign.trust.MyPropsTruster.getInstance()
            PoliciesManager.POLICY_SIGN = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()
            PoliciesManager.POLICY_VALIDATION = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()

            ' Crear datos a firmar
            Dim dataToSign As DataToSign = New DataToSign()
            dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES) ' XadES-PES
            dataToSign.setEsquema(XAdESSchemas.XAdES_132)
            dataToSign.setPolicyKey("facturae31")
            dataToSign.setAddPolicy(True)
            dataToSign.setXMLEncoding("UTF-8")
            dataToSign.setEnveloped(True)
            dataToSign.addObject(New ObjectToSign(New AllXMLToSign(), "facturae31", Nothing, "text/xml", Nothing))
            dataToSign.setDocument(CargaXML(ArchivoXML))

            ' Firmar
            Dim res() As Object = New FirmaXML().signFile(Certificado, dataToSign, ClavePrivada, Proveedor)

            ' Guardamos la firma en un fichero
            UtilidadTratarNodo.saveDocumentToOutputStream(res(0), New FileOutputStream(ArchivoXMLFirmado), True)

            MsgBox("Fichero " & ArchivoXMLFirmado & " generado correctamente", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        Else
            MsgBox("No es posible acceder al certificado", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        End If

    End Sub

    Public Shared Function CargaXML(ByVal Ruta As String) As Document

        Dim dbf As DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
        dbf.setNamespaceAware(True)

        Return dbf.newDocumentBuilder().parse(New BufferedInputStream(New FileInputStream(Ruta)))
    End Function

    Public Shared Function CargaCertificado(ByVal Ruta As String, ByVal Clave As String, ByRef ClavePrivada As PrivateKey, ByRef Proveedor As Provider) As X509Certificate
        Dim Certificado As X509Certificate = Nothing

        Proveedor = Nothing
        ClavePrivada = Nothing

        ' Carga certificado de fichero PFX
        Dim ks As KeyStore = KeyStore.getInstance("PKCS12")
        ks.load(New BufferedInputStream(New FileInputStream(Ruta)), Clave.ToCharArray())
        Dim storeManager As IPKStoreManager = New KSStore(ks, New PassStoreKS(Clave))
        Dim certificates As List = storeManager.getSignCertificates()

        ' Si encontramos el certificado
        If certificates.size() = 1 Then
            Certificado = certificates.get(0)

            ' Obtención de la clave privada asociada al certificado
            ClavePrivada = storeManager.getPrivateKey(Certificado)

            ' Obtención del proveedor encargado de las labores criptográficas
            Proveedor = storeManager.getProvider(Certificado)
        End If

        Return Certificado
    End Function

End Class
Se necesitan las siguientes librerías al lado del ejecutable:


commons-logging-1.1.dll
facturaE_additional.dll
IKVM.OpenJDK.Core.dll
IKVM.OpenJDK.Security.dll
IKVM.OpenJDK.Text.dll
IKVM.OpenJDK.Util.dll
IKVM.OpenJDK.XML.API.dll
IKVM.OpenJDK.XML.Parse.dll
IKVM.Runtime.dll
MITyCLibAPI-1.0.4.dll
MITyCLibCert-1.0.4.dll
MITyCLibPolicy-1.0.4.dll
MITyCLibTrust-1.0.4.dll
MITyCLibTSA-1.0.4.dll
MITyCLibXADES-1.0.4.dll
xmlsec-1.4.2-ADSI-1.0.dll


No me preguntéis de donde se sacan porque las busqué hace unos 10 años y no tengo ni pajolera donde las conseguí

No sé si tengo posibilidad de subir un rar con esta aplicación de ejemplo, así ya tendríais también las librerías
Ostias @Jarogo08 ese código me suena ...
Lo encontré hace un par de semanas, tengo todas las librerías de las que hablas, pero no fui capaz de hacerlo funcionar ...
A ver si ahora con lo que tú me dices lo consigo ...

Muuuuuuuchas gracias!!!
Responder Con Cita
  #2  
Antiguo 13-03-2026
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Cita:
Empezado por FacilIng Ver Mensaje
Ostias @Jarogo08 ese código me suena ...
Lo encontré hace un par de semanas, tengo todas las librerías de las que hablas, pero no fui capaz de hacerlo funcionar ...
A ver si ahora con lo que tú me dices lo consigo ...

Muuuuuuuchas gracias!!!

Pues copiando y pegando debería funcionarte, acabo de montar la aplicación para ponérosla y me va sin problema!

Sólo tienes que cambiar las 4 variables del principio del botón, obviamente
Responder Con Cita
  #3  
Antiguo 18-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 76
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Pues copiando y pegando debería funcionarte, acabo de montar la aplicación para ponérosla y me va sin problema!
Sólo tienes que cambiar las 4 variables del principio del botón, obviamente
¡Integrado en nuestro código y funcionando!

¡¡¡Muchísimas gracias @Jarogo08!!!
Responder Con Cita
  #4  
Antiguo 18-03-2026
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Cita:
Empezado por FacilIng Ver Mensaje
¡Integrado en nuestro código y funcionando!

¡¡¡Muchísimas gracias @Jarogo08!!!

Me debes una!
Responder Con Cita
  #5  
Antiguo 18-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 76
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Me debes una!
¡HECHO!
Responder Con Cita
  #6  
Antiguo 24-03-2026
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.764
Poder: 7
ermendalenda Va por buen camino
Nuevo cambio, acaban de aprobar el borrador del real decreto de factura electronica.
Otra vez volvemos a Facturae, mejor , sí, pero para volverse loco.
Lo peor no es el desarrollo, son los tiempos que dan para los cambios de estado de las factura que tendrán que matizar a que se refieren con 4 días habiles: no es lo mismo recibida, que aceptada, que anulada, que pagada...
Y 4 días habiles puede estar acorde para los envios de facturas emitidas y recibidas/contabilizadas(SII), pero para cambiar estados a facturas recibidas 4 días es un desastre monumental, y creo que poco alineado con la normatiba de facturacion en cuanto a tiempos de contabilización, para los departamentos de contabilidad/administración si se pretende que sea verificada ( la aceptación o no) las recibidas, seriamos esclavos.
espero qie maticen y no sea una locura. Espero que el cambio de eatado de 4 días se refieran a "recibida".
Aún no he leido completamente el borrador, pero ya me ha subido la tensión.

Última edición por ermendalenda fecha: 24-03-2026 a las 19:58:37.
Responder Con Cita
  #7  
Antiguo 24-03-2026
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Poder: 3
bmfranky Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Nuevo cambio, acaban de aprobar el borrador del real decreto de factura electronica.
Otra vez volvemos a Facturae, mejor , sí, pero para volverse loco.
Lo peor no es el desarrollo, son los tiempos que dan para los cambios de estado de las factura que tendrán que matizar a que se refieren con 4 días habiles: no es lo mismo recibida, que aceptada, que anulada, que pagada...
Y 4 días habiles puede estar acorde para los envios de facturas emitidas y recibidas/contabilizadas(SII), pero para cambiar estados a facturas recibidas 4 días es un desastre monumental, y creo que poco alineado con la normatiba de facturacion en cuanto a tiempos de contabilización, para los departamentos de contabilidad/administración si se pretende que sea verificada ( la aceptación o no) las recibidas, seriamos esclavos.
espero qie maticen y no sea una locura. Espero que el cambio de eatado de 4 días se refieran a "recibida".
Aún no he leido completamente el borrador, pero ya me ha subido la tensión.
Puedes pasar enlace a donde lo han colgado, porfa.
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Que pasa con FacturaE y la factura electrónica a raiz de Verifactu richidemola General/Noticias 3 20-09-2025 19:01:39
Firma en factura electrónica facturaE Galahad Varios 8 19-06-2016 00:45:14
libreria Delphi para factura electronica Facturae argobot ¿Quieres trabajar? (es el lugar para publicar una oferta de trabajo) 0 11-04-2016 11:06:14
Validar firma de factura electrónica (formato Facturae) maro Varios 79 22-09-2015 09:45:17
Factura electrónica "Facturae" newtron Varios 3 16-01-2015 18:43:45


La franja horaria es GMT +2. Ahora son las 15:42:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi