Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Validar firma de factura electrónica (formato Facturae) (https://www.clubdelphi.com/foros/showthread.php?t=56079)

iMia 12-02-2015 11:31:41

Cita:

Empezado por Casimiro Notevi (Mensaje 488717)
Tienes razón, porque algunos no quieren aprender, sino que le den el trabajo hecho.
Disculpa si he sido un poco bruto, es que es difícil entender "el tono" de lo que ha escrito otra persona cuando no puedes verle la cara, su expresión, sus gestos, etc.

No hay problema... :o yo también intentaré suavizar aún más las respuestas, y contar hasta 100 antes de responder... :D

newtron 12-02-2015 11:40:19

Cita:

Empezado por iMia (Mensaje 488718)
No hay problema... :o yo también intentaré suavizar aún más las respuestas, y contar hasta 100 antes de responder... :D

No te apures, si sabes de JAVA y nos haces el programita para firmar los ficheros XML te perdonamos. :D

iMia 12-02-2015 12:11:04

jajajaja
no sé, pero habrá que aprender un poco...
miro de hacer algo y a ver que sale... si sale, pongo por aqui algo...

aposi 12-02-2015 12:49:59

Cita:

Empezado por iMia (Mensaje 488709)
Hombre... ya he puesto lo básico, para tener un punto de patida... que ya es pero que mucho...;)
Para ponerme en el camino yo solito, sin orientación, tardé un par de semanas... y un par de semanas en tener la serialización fina y a mi gusto... por que la herramineta que he comentado que sí serializa no era de mi gusto lo que dejaba...
He dado pistas y codigo para tener más de la mitad de la faena hecha... y utilizando el serializador, sería toda la faena hecha... pero para hacerla hay que leer mucho y comprender bien que hay que hacer...
Si te pongo todo el código y te doy hecho todo mi trabajo... ¿me pagas lo mismo que mi empresa por ese mes de trabajo? :rolleyes:

Solo por alusiones:
iMia siento que te sientas ofendido por mi petición.
Desde que me registre en este foro siempre he intentado responder a todos los usuarios que he podido ayudar.
En algunos casos he llegado a enviar codigos en privado de lo cual estoy muy orgullos de ello, ja que bajo mi punto de vista a parte de ayudar tambien me he visto recompensado ja que en algunos casos al que le he enviado el codigo ha detectado algun fallo o ha mejorado el funcionamento y esto ha echo que todos salimos ganando (El mundo de la programacion es muy amplio y una personano puede abarcar todos los puntos).

Vuelvo a repetir mis disculpas si te has sentido ofendido, ja que no era mi objetivo y como te comente en el primer correo el tema xml no lo he trabajado nunca.

PD. Estoy inventigando soluciones para firmar los ficheros y si encuentro una solucion util para todos la expondre en este tema

iMia 12-02-2015 13:22:43

ale... ya está...
aquí lo tenéis todo para firmar desde java....

http://www.oracle.com/technetwork/ja...pi-140772.html

Kribbeling 12-02-2015 22:49:48

Cita:

Empezado por iMia (Mensaje 488689)
Lo he mirado, esta bién , pero no me sirve...
No firma xml en formato Xades enveloped, que es el que se necesita para la efactura.
Como he comentado en el mensaje de encima, la única forma gratuita es con las clases de la AEAT, pero son clases java. hay que crear un programa en java (.jar) que use esas clases para firmar con 3 parametros, el xml, el certificado y el ficherode salida (".xml" firmado ... ".xsig") y llamarlo con un shell execute....


Suerte con la firma , yo he resuelto la creacion de la factura y de momento con eso me quedo.
Gracias x todo.

iMia 13-02-2015 08:36:56

Fantástico! Enhorabuena!
Si lo que hemos puesto te ha servido, ni que sea, para poner media línea de código, ya estamos contentos nosotros también... (o almenos yo...)

iMia 13-02-2015 08:48:42

Cita:

Empezado por iMia (Mensaje 488727)
ale... ya está...
aquí lo tenéis todo para firmar desde java....

http://www.oracle.com/technetwork/ja...pi-140772.html

más....

http://www.adictosaltrabajo.com/tuto...a=xmlSignature
http://sviudes.blogspot.com.es/2010/...n-net-y-c.html

newtron 13-02-2015 10:20:35

Cita:

Empezado por iMia (Mensaje 488727)
ale... ya está...
aquí lo tenéis todo para firmar desde java....

http://www.oracle.com/technetwork/ja...pi-140772.html

Uh..... ¿lo tenemos?... :confused: ... Lo digo porque veo que hay que hacer un programita en java y yo de eso (como de tantas cosas) no tengo ni papa de idea.

iMia 17-02-2015 12:02:05

Aqui lo tenéis en .NET y C#

http://sviudes.blogspot.com.es/2010/...n-net-y-c.html

newtron 17-02-2015 19:54:11

Cita:

Empezado por iMia (Mensaje 488891)

Vale, y ¿has hecho algo con ello?.

iMia 18-02-2015 17:57:12

No, con .NET o con C# no...
Lo he hecho en JAVA.

No os puedo poner el código exacto por temas de confidencialidad del curro.... pero os puedo orientar como lo he hecho...

0º - Imports de la AEAT

Código:

  import es.mityc.facturae.utils.SignatureUtil;
  import es.mityc.facturae.utils.ValidatorUtil;
  import es.mityc.firmaJava.libreria.xades.ResultadoValidacion;
  import es.mityc.firmaJava.libreria.xades.ValidarFirmaXML;
  import es.mityc.firmaJava.libreria.xades.errores.FirmaXMLError;

luego
1º - Abrir el xml

Apertura del xml
En la página de Oracle que os he puesto... Sample 3.
Código:

  // Instanciando el documento a firmar
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  dbf.setNamespaceAware(true);
  Document doc = dbf.newDocumentBuilder().parse(new FileInputStream("..\miFacturae.xml"));

2º - Validar el xml con la Efactura

pendiente...

3º - Abrir certificado
Yo lo he hecho diferente a lo que ponía en la página de Oracle - Sample 2
Abro directamente un certificado exportado que debe estar instalado en el equipo desde el que se firma.

Código:

  FileInputStream cer = new FileInputStream("..\micertificado.cer");
  CertificateFactory cf = CertificateFactory.getInstance("X.509");
  X509Certificate certificat = (X509Certificate) cf.generateCertificate(cer);
  cer.close();

4º - Firmar
Código:

  doc = SignatureUtil.sign(doc, certificat);
WTF ... PERO QUE ... CAJONES! ¿Como? ¿¿Así de facil??.... Pues sí, es una función que está en la librería es.mityc.facturae.utils.SignatureUtil

5º - Validar firma (opcional)

pendiente...

6º - Generar salida... Sample 4 de la página de oracle que os he puesto más arriba... que no leeis!!!!
Código:

  // Crear el Stream de salida.
  OutputStream os = new FileOutputStream("..\miFacturae.xsig");
  // Instanciamos el transformador
  TransformerFactory tf = TransformerFactory.newInstance();
  // Creamos el transformador
  Transformer trans = tf.newTransformer();
  // Transformamos el documento firmado a la salida.
  trans.transform(new DOMSource(doc), new StreamResult(os));

Naturalmente, en un .java, compilado a .jar y con los .jar que se necesitan (imports)

Vaaaamos que podéis... más claro y os pongo el main y todos los imports que te pone solo el eclipse...

newtron 18-02-2015 18:54:04

Ok.

Gracias por la información. Yo particularmente voy a intentar que un amiguete me haga una dll en .net para no tener que depender del java y si no tiraré por esta vía.

Saludos

MasDelphi 19-02-2015 17:17:59

Hola a tod@s.
Finalmente he logrado generar la firma electrónica con el formato XAdES_EPES que es el utilizado para la FACTURAe, inicialmente comencé con Java, pero a medio camino probé las librerías de SecureBlackBox VCL de la empresa eldos.com/sbb/. Son fantásticas y muy completas, abandoné el Java y opté por desarrollarlo en Delphi XE5, en el enlace se puede descargar (incluye ejemplos muy interesantes), son librerías de pago, si deseas tener los fuentes, pero en mi caso fue suficiente con los archivos .dcu y los manuales (además de estudiar la información que ofrece el Ministerio de Industria), puede crear un pequeño programa que firmara el archivo .xml incrustando la firma electrónica, lo valido en la sede electrónica del Ministerio de Industria y todo OK.
Comparto la opinión de iMia, lo importante es entender el problema y los requerimientos, pensar la solución y no simplemente copiar el código.
Saludos.

iMia 19-02-2015 17:35:59

Has optado por una opción muuuuuy interesante... que ya pensé en su momento pero descarté por el coste del SBB... ya que no sabía que no hacía falta comprar los componentes si no quieres los fuentes, y que con los dcu's habia suficiente...

Aunque sea en 2 programas diferentes, así lo tienes todo en Delphi...

Cuando tenga más tiempo miraré esa opción...

EDITO: Acabo de mirar la web, y la licencia de pruebas tiene limitación de tiempo... creo que tendrás que pasar por caja...

MasDelphi 20-02-2015 11:25:13

Pasar por caja...
 
Hola.
Sí, tiene una limitación de tiempo, aún estoy en plazo y no sabré si tendré problemas hasta llegar la fecha. Estas librerías tienen un control de licencia que no había visto en ningún otro código, se llama a una función a la cual se le pasa una cadena encriptada, con algún algoritmo del tipo HASH, es algo como: SetLicenseKey('660067560EFA9ACA818A0F134ED8D16D6D425561114AC7B9..... El nivel de control es alto y no es para menos si se tratan de librerías que encriptan y establecen marcas de seguridad con certificados digitales. :)
Probablemente sí tenga que pasar por caja, aunque tengo mis dudas porque sólo uso las librerías compiladas (dcu), no lo sé....
De todas formas, la urgencia que teníamos en el desarrollo me llevó a optar por este camino y hasta dentro de dos meses no se vence la licencia, creo que llegado el día pasaré por caja con gusto, librerías como esas (a mi juicio) tienen un precio mucho mayor.

SAGOAN 24-06-2015 19:19:06

Hola a todos!!

Llevo leyendo 2 días sobre el tema de la Facturae y aun que avanzo voy superlento. Os explico, utilizo Delphi 2010, he bajado de la web www . facturae.gob.es / FORMATO /Paginas /version-3-2.aspx el esquema XSD [XML]. Estoy intentando crear con el XML Data Binding los tipos, funciones, etc.

Aquí viene el problema, el archivo con el esquema XSD viene con extensión .XML, lo cambio a .XSD y cuando el wizard del XML Data Binding intenta crear la unit con los tipos, funciones, etc da un error que en mi caso es "Acceso denegado" (raro no rarisismo). He probado a convertir un archivo XML(un borrador de Facturae creado con el programa del ministerio de industria) a XSD mediante la web www . flame-ware.com /products /xml-2-xsd y el XML Data Binding funciona correctamente, el problema es que el esquema XSD que se crea no cubre todos los casos que aborda el formato Facturae 3.2.1.

¿Alguien sabe porque da error el XML Data Binding?

Muchísimas gracias, estoy de los nervios.

MasDelphi 25-06-2015 07:38:29

Cita:

Empezado por SAGOAN (Mensaje 493634)
Hola a todos!!

Llevo leyendo 2 días sobre el tema de la Facturae y aun que avanzo voy superlento. Os explico, utilizo Delphi 2010, he bajado de la web www . facturae.gob.es / FORMATO /Paginas /version-3-2.aspx el esquema XSD [XML]. Estoy intentando crear con el XML Data Binding los tipos, funciones, etc.

Aquí viene el problema, el archivo con el esquema XSD viene con extensión .XML, lo cambio a .XSD y cuando el wizard del XML Data Binding intenta crear la unit con los tipos, funciones, etc da un error que en mi caso es "Acceso denegado" (raro no rarisismo). He probado a convertir un archivo XML(un borrador de Facturae creado con el programa del ministerio de industria) a XSD mediante la web www . flame-ware.com /products /xml-2-xsd y el XML Data Binding funciona correctamente, el problema es que el esquema XSD que se crea no cubre todos los casos que aborda el formato Facturae 3.2.1.

¿Alguien sabe porque da error el XML Data Binding?

Muchísimas gracias, estoy de los nervios.

Hola SAGOAN.
Seguro que no te podré ayudar, pero te contaré mi experiencia.
En mi caso no usé el XML Data Binding, estudié el formato XAdES y creé una clase que generara la factura-e con dicho formato, simplemente componiendo un archivo texto con las etiquetas según el formato XAdES, luego cargaba dicho archivo a través de la página de Industria para verificar que no tuviera fallos, y finalmente con los componentes SecureBlackBox VCL creé un pequeño programa que incrustara la firma electrónica en dicho documento... Tres meses después de tener todo esto operativo encontré un programa que también permitía hacer la firma, por lo que al vencerse el período de prueba de los componentes SecureBlackBox VCL no los renové, y ahora uso dicho programa ... supongo que ahora habrán muchos más.

Recuerdo que el trabajo más complejo fue hacer el programa de la firma electrónica, y el del XML se me hizo sencillo dado que era volcar la información de la factura en el formato XML según XAdES, jamás cambié la extensión .XSD.

Bueno, estas son simples ideas, espero que avances en tu proyecto.

Saludos.

SAGOAN 25-06-2015 09:07:32

Cita:

Empezado por MasDelphi (Mensaje 493651)
Hola SAGOAN.
Seguro que no te podré ayudar, pero te contaré mi experiencia.
En mi caso no usé el XML Data Binding, estudié el formato XAdES y creé una clase que generara la factura-e con dicho formato, simplemente componiendo un archivo texto con las etiquetas según el formato XAdES, luego cargaba dicho archivo a través de la página de Industria para verificar que no tuviera fallos, y finalmente con los componentes SecureBlackBox VCL creé un pequeño programa que incrustara la firma electrónica en dicho documento... Tres meses después de tener todo esto operativo encontré un programa que también permitía hacer la firma, por lo que al vencerse el período de prueba de los componentes SecureBlackBox VCL no los renové, y ahora uso dicho programa ... supongo que ahora habrán muchos más.

Recuerdo que el trabajo más complejo fue hacer el programa de la firma electrónica, y el del XML se me hizo sencillo dado que era volcar la información de la factura en el formato XML según XAdES, jamás cambié la extensión .XSD.

Bueno, estas son simples ideas, espero que avances en tu proyecto.

Saludos.


Muchas Gracias MasDelphi. La primera idea que tuve fue la que tu hiciste, pero al ver de lo amplio que resulta el formato XAdES estoy intentando utilizar el esquema XSD que ofrece la web de Facturae. Quizás tenga cambiar de idea y hacerlo como tu dices, me daré unos días y si alguien me puede iluminar con el XML Data Binding sería fenómeno.

Muchas gracias...

newtron 25-06-2015 09:52:33

Cita:

Empezado por MasDelphi (Mensaje 493651)
... Tres meses después de tener todo esto operativo encontré un programa que también permitía hacer la firma...

¿Y se puede saber qué programa es ese?

Saludos

SAGOAN 25-06-2015 12:20:58

Cita:

Empezado por newtron (Mensaje 493655)
¿Y se puede saber qué programa es ese?

Saludos

Hola Newtron:

Supongo que te refieres al XML Data Binding. Es un complemento del Delphi que genera una clase a partir de un XSD.

Un saludo :)

newtron 25-06-2015 12:35:09

Cita:

Empezado por SAGOAN (Mensaje 493656)
Hola Newtron:

Supongo que te refieres al XML Data Binding. Es un complemento del Delphi que genera una clase a partir de un XSD.

Un saludo :)

No no... me refiero al programa que dices que encontraste para firmar el documento XML.

Saludos

pacopenin 25-06-2015 14:01:54

Eso mismo pregunto yo. ¿Que mágico programa es ese?

Delfino 25-06-2015 14:06:31

Habeis echado un vistazo a la libreria JEDI para estos temas?
Le estoy probando pero de momento no llego a ningun resultado..

Todo andara :D

SAGOAN 25-06-2015 18:44:43

Cita:

Empezado por newtron (Mensaje 493657)
No no... me refiero al programa que dices que encontraste para firmar el documento XML.

Saludos

En la web www . facturae.gob.es hay una aplicación que permite importar la factura en formato XML y después firmarla.

http://www.facturae.gob.es/formato/P...scritorio.aspx

Pero supongo que ya lo conoces, yo estoy más verde en este tema.


Un saludo

newtron 25-06-2015 19:09:31

Ok.

Pues igual te interesa este post en el que pongo un link de un programita hecho en java para poder llamarlo desde tu aplicación y firmar el fichero XML que generes, así lo puedes hacer todo desde tu programa.

Saludos.

SAGOAN 26-06-2015 11:19:39

Cita:

Empezado por newtron (Mensaje 493677)
Ok.

Pues igual te interesa este post en el que pongo un link de un programita hecho en java para poder llamarlo desde tu aplicación y firmar el fichero XML que generes, así lo puedes hacer todo desde tu programa.

Saludos.

Muchas Gracias newtron

Sigo con este mar de lagrimas que es para mi el XML :) , estoy pez total y este comienzo esta siendo duro.

iMia 06-07-2015 18:15:24

Cita:

Empezado por newtron (Mensaje 493677)
Ok.

Pues igual te interesa este post en el que pongo un link de un programita hecho en java para poder llamarlo desde tu aplicación y firmar el fichero XML que generes, así lo puedes hacer todo desde tu programa.

Saludos.

Hola newton,
Muy interesante el link que dejaste.... pero tiene un problema ese JAR.
Le ha pasado exactamente lo mismo que me paso a mí. Hice un programa en JAVA para firmar, basándome en unas API publicadas por el Minetur, que no lo hacían del todo correcto (estricto), pero que funcionaba correctamente, pero el pasado 01/06/2015, el Ministerio decidió cambiar la politica de firma (a la version 3.1 -nada que ver con el formato de efactura 3.1 y 3.2 y 3.2.1) y se ha vuelto estricto, por lo que en el apartado SignerRole, la API escribia "Emisor", y ahora el ministerio dice que esta mal, que tiene que ser "emisor" (en minisculas),, y por eso los programas basados en ese API (descontinuado) no funcionan, y las API están descontinuadas y no harán nuinguna otra versión, además no han publicado el codigo fuente... asi que estamos j*did*s por ese lado...

newtron 07-07-2015 09:02:50

Cita:

Empezado por iMia (Mensaje 494072)
Hola newton,
Muy interesante el link que dejaste.... pero tiene un problema ese JAR.
Le ha pasado exactamente lo mismo que me paso a mí. Hice un programa en JAVA para firmar, basándome en unas API publicadas por el Minetur, que no lo hacían del todo correcto (estricto), pero que funcionaba correctamente, pero el pasado 01/06/2015, el Ministerio decidió cambiar la politica de firma (a la version 3.1 -nada que ver con el formato de efactura 3.1 y 3.2 y 3.2.1) y se ha vuelto estricto, por lo que en el apartado SignerRole, la API escribia "Emisor", y ahora el ministerio dice que esta mal, que tiene que ser "emisor" (en minisculas),, y por eso los programas basados en ese API (descontinuado) no funcionan, y las API están descontinuadas y no harán nuinguna otra versión, además no han publicado el codigo fuente... asi que estamos j*did*s por ese lado...

:eek::eek::eek: Cáspita!!! pues yo la verdad es que no me he enterado de eso, tengo algunos clientes firmando facturas y no me han pasado ninguna incidencia. Igual es que no han emitido y firmado ninguna factura desde ese día.

iMia 07-07-2015 09:05:40

Cita:

Empezado por newtron (Mensaje 494111)
:eek::eek::eek: Cáspita!!! pues yo la verdad es que no me he enterado de eso, tengo algunos clientes firmando facturas y no me han pasado ninguna incidencia. Igual es que no han emitido y firmado ninguna factura desde ese día.

Pues pruébalo de nuevo con el validador del "Menesterio"... yo tengo unos cuantos y hasta que me cree un API completo les estoy haciendo firmar con el @firma o con Xolido.

newtron 07-07-2015 11:33:55

Cita:

Empezado por iMia (Mensaje 494113)
Pues pruébalo de nuevo con el validador del "Menesterio"... yo tengo unos cuantos y hasta que me cree un API completo les estoy haciendo firmar con el @firma o con Xolido.

Pues llevas razón, ahora no valida la firma.

Estoy probando con Xolido pero no consigo que me la valide tampoco, ¿hay que hacerle alguna configuración especial?

iMia 07-07-2015 11:37:12

Cita:

Empezado por newtron (Mensaje 494117)
Pues llevas razón, ahora no valida la firma.

Estoy probando con Xolido pero no consigo que me la valide tampoco, ¿hay que hacerle alguna configuración especial?

si, en configuracion, Firma electronica, preferencias de la firma, marca autodetectar XML - FacturaE y realizar la firma incrustada...

newtron 07-07-2015 11:50:38

Ok, ya va, gracias.

De todas formas esto es un parche. Si tú o alguien encuentra alguna API para resolver este tema le estaría profundamente agradecido. :D:D

Saludos

iMia 07-07-2015 11:56:17

Cita:

Empezado por newtron (Mensaje 494119)
Ok, ya va, gracias.

De todas formas esto es un parche. Si tú o alguien encuentra alguna API para resolver este tema le estaría profundamente agradecido. :D:D

Saludos

Sí, es un parche... pero es lo que hay para que funcione y los clientes no nos cuelguen...
Yo intentaré hacer algo... pero no se si podré colgar nada... confidencialidad de la empresa... pero daré pistas, como la vez anterior.

newtron 29-08-2015 11:01:18

Hola.

¿Algo nuevo sobre los últimos cambios en la firma digital?. Yo sigo sin poder firmar los XML desde mi programa. ¿Ha encontrado alguien algún programita para poder firmar en linea de comandos?.

Saludos

newtron 31-08-2015 12:50:07

¿Nada?

¿Manuc? en su día creí entender que compraste los componentes de SBB, ¿los han actualizado para el nuevo formato de la firma?.

SAGOAN 17-09-2015 19:17:18

Cita:

Empezado por newtron (Mensaje 496020)
Hola.

¿Algo nuevo sobre los últimos cambios en la firma digital?. Yo sigo sin poder firmar los XML desde mi programa. ¿Ha encontrado alguien algún programita para poder firmar en linea de comandos?.

Saludos

Hola a todos:

Con esta versión java se puede firmar el XADES EPES sin problemas, yo lo estoy utilizando y verificado con facturae.gob.es.

Utilidad creada por :

Carlos Blas Fernández Domínguez

www .colthop.es / FirEleFaV2 . zip


Espero que os sirva. Sigo intentando hacerlo directamente desde Delphi ....... algún día lo conseguiré ;)

Casimiro Notevi 17-09-2015 19:33:48

¿Tú ers Carlos Blas Fernández Domínguez?
¿Qué licencia tiene ese software?

SAGOAN 18-09-2015 18:12:49

Cita:

Empezado por Casimiro Notevi (Mensaje 496875)
¿Tú ers Carlos Blas Fernández Domínguez?
¿Qué licencia tiene ese software?

Hola Casimiro,

No, es el autor del programa. En principio la distribución es gratuita, lo encontré en un post de otra web donde compartía con el resto de usuarios el programa. En el archivo zip no viene tampoco el tipo de licencia.

newtron 22-09-2015 09:45:17

Hola.

He hecho una pequeña búsqueda y he encontrado el link original donde el autor pone a disposición la primera versión que estábamos usando, luego la que comentaba nuestro colega SAGOAN y hasta una tercera versión (que yo no he probado) que por lo visto, en caso de tener solo un certificado instalado, ni lo pide siquiera.

http://forums.fivetechsupport.com/vi...37f782812975a1

Saludos


La franja horaria es GMT +2. Ahora son las 19:50:50.

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