PDA

Ver la Versión Completa : Validar firma de factura electrónica (formato Facturae)


maro
07-05-2008, 09:31:44
Hola a todos,


Estoy buscando información sobre el tratamiento del formato de facturas electrónicas de la AEAT: facturae.

En cuanto al formato del documento, todo bien. El problema me surge al localizar información de como validar la firma de uno de estos documentos.

Lo que estoy intentando hacer es que mi aplicación pueda validar la firma de estos documentos.

¿Sabeis algo sobre este tema?

Gracias.
Un Saludo.

Neftali [Germán.Estévez]
07-05-2008, 09:48:44
Para validar y firmar, puedes utilizar el componente que provee el ministerio de hacienda. Es un ActiveX (AEATFACT.DLL) gratuíto que puedes incluir en tus aplicaciones Delphi.
Hacienda también posee un Web service que te permite validar y firmar documentos de forma individual, pero si deseas integrarlo en tu aplicación prueba con el ActiveX

Este ActiveX se conecta a internet y vía la Agencia tributaria te permite firmar y validar documentos utilizando un certificado válido que tengas instalado.

Yo lo he probado y funciona perfectamente, lo que ya tengo dudas es si hay limitaciones de utilización (por si estás pensando utilizarlo en una aplicación comercial).

A parte de esta solución hay otras opciones "de pago" que también te permiten firmar documentos digitales. Puedes revisar:
* Aloha Signator
* Chilkat
* Neevia
* SecureBlackBox (los mejores, en mi opinión)
* ...

Como última opción queda "pelearse" con la CAPICOM o con OpenSSL para implementar una solución.

Puedes encontrar una explicación muy buena sobre la utilización del ActiveX de Hacienda y ejemplos en Delphi aquí (http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=184). Si tienes dudas sobre el proceso o el código delphi ya dirás, aunque está bastante claro.

maro
07-05-2008, 10:15:23
Gracias Neftali.

Ya conocía (y tambien había probado) la el activeX AEATFACT.DLL.

El problema es que esta librería valida documentos en "BASE 64 y firma PKKCS#7". Si embargo, el formato oficial de facturae utiliza una firma "XADES".

En la propia página de la AEAT, donde explican como funciona "Facturación Telemática en formato BASE64 y firma PKCS#7" y el uso de AEATFACT.DLL (aquí (http://www.aeat.es/wps/portal/Listado?channel=5edc675b31d0e010VgnVCM1000004ef01e0a____&ver=L&site=56d8237c0bc1ff00VgnVCM100000d7005a80____&idioma=es_ES&menu=4&img=5)),aconsejan utilizar el nuevo formato de Factura electrónica: Facturae, basado en XML con firma XADES, que es el que yo necesito interpretar.

Aeatfact.dll no está implementado para reconocer el formato facturae.

No obstante (por supueto) muchas gracias por tu ayuda.

Neftali [Germán.Estévez]
07-05-2008, 10:43:31
Entonces revisa SecureBlackBox (http://www.eldos.com/sbb/desc-xml.php). Soporta ese formato.

maro
07-05-2008, 10:51:39
Muchas gracias Neftali.

Le echo un vistazo.

Gracias.
Un Saludo.

abelmc
24-07-2011, 03:01:58
Yo les recomiendo OPESSL para generar el PKCS7.
Yo desarrolle una DLL para factura electronica de la AFIP de argentina y lo intente con secureblackbox pero la verdad era muy lenta la firma del mensaje. Con OpenSSL la DLL anduvo 10 puntos y la factura electronica vuela, se puede decir.
Si quieren probar tienen un ejemplo aca:

bitingenieria y descarguen FEAFIP.

Espero que les sea util la informacion

manuc
08-01-2014, 14:22:16
Hola Maro,

Me gustaría consultarte qué solución aplicaste a este tema.

Estoy implementando el proceso de firma de XML con Xadex y te estaría muy agradecido si me comentaras un poco qué solución diste a este tema.

El problema de SecureBlackBox es que mi proyecto no soporta un gasto de 800€ en estos componentes, ya que necesitaría por un lado la firma Xadex para XML y Pades para PDF.

Te agradecería tu comentarios.

Un saludo.

Manuel.

egostar
08-01-2014, 16:06:39
Hola Maro,

Me gustaría consultarte qué solución aplicaste a este tema.

Estoy implementando el proceso de firma de XML con Xadex y te estaría muy agradecido si me comentaras un poco qué solución diste a este tema.

El problema de SecureBlackBox es que mi proyecto no soporta un gasto de 800€ en estos componentes, ya que necesitaría por un lado la firma Xadex para XML y Pades para PDF.

Te agradecería tu comentarios.

Un saludo.

Manuel.

Puedes ver éste interesante hilo (TFacturaElectronica con soporte para CFDI (http://www.clubdelphi.com/foros/showthread.php?t=84738)) no tiene desperdicio, he hecho algunas pruebas y va muy bien.

Saludos

manuc
08-01-2014, 18:00:21
Muchas gracias Egostar!

He estado ojeado el código y inicialmente sólo necesitaría la parte donde se realiza la firma del fichero XML, ya que el resto del proceso ya lo tengo implementado en base a la normativa vigente en España.

Es de mucha utilidad y te lo agradezco sinceramente, pero creo que me resultaría complicado (según mis conocimientos) extraer la parte donde se realiza la firma del fichero.

También, creo haber visto que se utiliza el certificado exportado y necesitaría acceder directamente al almacén de certificados, para obtener el certificado correcto.

Te quedo muy agradecido por tu ayuda.

Un saludo.

manuel.

iMia
22-01-2015, 11:04:15
Hola Manuel...
estoy en la misma situación que tu... genero el xml de la Facturae, pero me falta firmarlo...
¿Lo resolviste? ¿nos puedes guiar un poco?

gracias.

manuc
22-01-2015, 11:46:09
Hola iMia,

Claro; Al final contraté unos componentes de Eldos: SecureBlackBox. Es una suite de componentes para hacer encriptados y nosecuantascosas mas;

Un punto importante, que me encontré en mi caso, es que el método para la firma del XML es totalmente diferente a la firma del PDF. Si exportáis la factura también en formato PDF y queréis firmarla, es necesario una licencia un poco superior.

Si sólo vais a firmar el XML, creo que hay un paquete más pequeño (más económico).

Creo recordar que es este: https://www.eldos.com/sbb/, pero si decidís comprarlo, comprobarlo y preguntar antes, que hablo de memoria.

Pensaba sacar una API, para facilitar precisamente esta tarea a otros programadores, con intención de abaratar el coste y simplificar el proceso. De momento la dejé un poco en el tintero.

Es un tema que tienen su cierta complejidad, pregúntame lo que vayas necesitando.

Saludos;

Manuel.

iMia
22-01-2015, 11:50:52
Manuel, muchas gracias por tu rapidisima respuesta...
Estoy intentando mirar de firmar unicamente el XML con Xades (nada de PDFs), y voy a buscar primero si lo puedo hacer sin componentes. Mirare a traves de alguna dll o algo asi. Ya que puedo generar el xml y en las plataformas de envio del xml a las administraciones publicas, dentro hay la opción de firmar gratuitamente con sus applets... por eso mirar de no pagar y repercutir el gasto a mis "ClientesDeGorra"
Si no al final acabare con SBB...
ademas la app esta hecha con Delphi 5... casi nada...

lithium76
24-01-2015, 22:18:16
Muy buenas! Increíble que me haya perdido este foro tanto tiempo .. Me siento avergonzado

Como todos vosotros me veo en la necesidad de tratar el tema de la factura electrónica. Quería haceros una pregunta a vosotros que, por lo que veo, vais muy por delante de mi. ¿Habéis usado el fichero xsd de Facturae para generar una clase con el XML Data Binding o lo habéis hecho creando vosotros el XML "a pelo"? Yo, en primera instancia, use el Data Binding y, tras pelearme un poco con él, conseguí generar un XML aparentemente correcto. El problema es en los malditos "namespace" y sus "prefijos"..

en vez de ésto:

<fe:Facturae xmlns:fe="http...Facturae" xmlns:ds="http...xmldsig#">

yo, obtengo:

<Facturae xmlns="http..Facturae"> (nótese la falta del namespace "fe")

He conseguido alguna aproximación mejor pero no me convence la manera ya que rompe la filosofía del Data Binding con "apaños".. Alguien sigo el mismo camino que yo y supo resolverlo.. me sería de gran utilidad

Muchas gracias por avanzado

Casimiro Notevi
24-01-2015, 23:09:55
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración :)


Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

newtron
25-01-2015, 09:57:21
Hola.

Echale un vistazo a esto (http://www.clubdelphi.com/foros/showthread.php?t=87512) que seguro que te ayudará.

Saludos

lithium76
25-01-2015, 18:43:08
Gracias por la respuesta tan rápida! La verdad es que he el enlace está muy bien.. lo de la web de facturae ya lo tenía visto, por eso.. El contenido del xml lo tengo generado perfectamente. . El problema es básicamente con el elemento Facturae que he posteado antes .. Con la interface que ha generado el Data Binding al generar este nodo no lo hace como es debido y no entiendo exactamente el motivo.. Quizá sea un fallo del Data Binding y entonces optaré por algun "truco" para evitarlo pero me gustaría saber si alguien sabe como conseguirlo sin optar por "apaños"

Muchas gracias una vez más

iMia
25-01-2015, 20:00:55
Hola LITHIUM76,
con el Databinding, si has conseguido generarlo correctamente (ya que el propio de el interprete de xsd delphi no los convierte si tienen referencias externas), lo único que debes haces hacer (o almenos es lo que yo he hecho) ha sido que el nombre del elemento lo he puesto directamente 'fe:Facturae' y el validador del ministerio ha dicho que OK... :-)
Yo serialicé el xsd con XSDTool 3.0... pero luego reescribí todos los tipos que necesité manualmente, ya que hacia mas cosas que lo que quería, y la forma que lo hacía no me gustaba...

XMLNode_eFact_32_Facturae = 'fe:Facturae';
XMLNode_eFact_32_FileHeader = 'FileHeader';
XMLNode_eFact_32_SchemaVersion = 'SchemaVersion';
XMLNode_eFact_32_Modality = 'Modality';
XMLNode_eFact_32_InvoiceIssuerType = 'InvoiceIssuerType';

type
TFacturae = class
private
fFileHeader: TFileHeader;
fParties: TParties;
fInvoices: TInvoices;
// fExtensions: TExtensions;
public
constructor Create;
///
function ToXml: IXMLDOMElement;
///
property FileHeader: TFileHeader read fFileHeader write fFileHeader;
property Parties: TParties read fParties write fParties;
property Invoices: TInvoices read fInvoices write fInvoices;
// property fExtensions: TExtensions read fExtensions write fExtensions;
end;

lithium76
25-01-2015, 22:41:19
Muchas gracias iMia
yo también tuve problemas inicialmente con el Data Binding por el import y probé con esa herramienta que mencionas pero no quedé muy contento con el resultado.. Total, que investigando y probando, di con que si descargaba el xsd externo al que hace referencia el del Facturae y lo ponía en el mismo directorio, el Data Binding funcionaba perfectamente. El problema es que todo el XML es perfecto menos el elemento Facturae que sale sin el fe: de las narices . Probé como bien dices poniendo fe:Facturae pero entonces pone el prefijo fe: en todos los elementos del XML y, en consecuencia, el XML no valida. He encontrado algún "apaño" pero me gustaría saber si existe alguna manera elegante de conseguir el prefijo fe solo en elemento y no en sus hijos. No sé si es culpa del DataBinding que no acaba de hacerlo bien del todo o yo que ando algo confundido con mis pocos conocimientos de xml.. se te ocurre alguna cosa? yo ya no sé qué más probar

iMia
25-01-2015, 22:54:47
Lo debe hacer por que propaga el namespace en los nodos hijos. Eso era algo que no me cuadraba y poor eso reescribí los tiposwsin heredar el namespace.
Mira de modificar el tipo tfacturae para que en el create no lo traslade a los tipos contenidos.
(Perdon por la redaccion, estoy desde la tablet)

lithium76
25-01-2015, 23:16:18
No pasa nada por la redacción, se entiende.. Gracias por ser tan rápido/a.. Eso he estado intentando pero no lo consigo de ninguna manera.. Tienes algún ejemplo de código si no te importa de como hacer para no trasladar el namespace, si no te importa? Muy agradecido

iMia
25-01-2015, 23:29:28
Como te he comentado, he reescrito todos los tipos de nuevo, sin nada de los namespaces.
A ver si manana te poongo el codigo completo del tipo facturae, para que veas lo simple (y mal para otros casos) que lo he dejado.

lithium76
25-01-2015, 23:42:48
Sería de gran utilidad, muchas gracias.. aquí está una parte del mío (la de los nodos principales, todo no me deja por excesivamente largo) tal como salen del Data Binding por si queda más claro lo que quería decir

const
TargetNamespace = 'http:....Facturae';

implementation

{ Global Functions }

function GetFacturae(Doc: IXMLDocument): IXMLFacturae;
begin
Result := Doc.GetDocBinding('Facturae', TXMLFacturae, TargetNamespace) as IXMLFacturae;
end;

function LoadFacturae(const FileName: string): IXMLFacturae;
begin
Result:= LoadXMLDocument(FileName).GetDocBinding('Facturae', TXMLFacturae, TargetNamespace) as IXMLFacturae;
end;

function NewFacturae: IXMLFacturae;
begin
Result := NewXMLDocument.GetDocBinding('Facturae', TXMLFacturae, TargetNamespace) as IXMLFacturae;
end;

{ TXMLFacturae }

procedure TXMLFacturae.AfterConstruction;
begin
RegisterChildNode('FileHeader', TXMLFileHeaderType);
RegisterChildNode('Parties', TXMLPartiesType);
RegisterChildNode('Invoices', TXMLInvoicesType);
RegisterChildNode('Extensions', TXMLExtensionsType);
RegisterChildNode('Signature', TXMLSignatureType_ds);
inherited;
end;

iMia
26-01-2015, 08:37:45
Como verás lo he simplificado al máximo. y escribo el xml casi de forma literal


/// Tipo TFacturae
type
TFacturae = class
private
fFileHeader: TFileHeader;
fParties: TParties;
fInvoices: TInvoices;
// fExtensions: TExtensions;
public
constructor Create;
///
function ToXml: IXMLDOMElement;
///
property FileHeader: TFileHeader read fFileHeader write fFileHeader;
property Parties: TParties read fParties write fParties;
property Invoices: TInvoices read fInvoices write fInvoices;
// property fExtensions: TExtensions read fExtensions write fExtensions;
end;

{ TFacturae }

XMLNode_eFact_32_Facturae = 'fe:Facturae';
XMLNode_eFact_32_FileHeader = 'FileHeader';
XMLNode_eFact_32_SchemaVersion = 'SchemaVersion';
XMLNode_eFact_32_Modality = 'Modality';
XMLNode_eFact_32_InvoiceIssuerType = 'InvoiceIssuerType';

constructor TFacturae.Create;
begin
fFileHeader := TFileHeader.Create;
fParties := TParties.Create;
fInvoices := TInvoices.Create;
end;

function TFacturae.ToXml: IXMLDOMElement;
var
XMLDoc: IXMLDOMDocument;
XMLElement: IXMLDOMElement;
begin
XMLDoc := CoFreeThreadedDOMDocument30.Create;
try
XMLElement := XMLDoc.createElement( XMLNode_eFact_32_Facturae );
if XMLElement <> nil then
begin
XMLElement.AppendChild(Self.fFileHeader.ToXml);
XMLElement.AppendChild(Self.fParties.ToXml);
XMLElement.AppendChild(Self.fInvoices.ToXml);
end;
result := XMLElement;
finally
end;
end;


type
TFileHeader = class
private
fSchemaVersion: string; // (E)
fModality: string; // (E)
fInvoiceIssuerType: string; // (E)
// fThirdParty: TThirdParty;
fBatch: TBatch;
// fFactoringAssignmentData: TFactoringAssignmentData;
public
constructor Create;

function ToXml: IXMLDOMNode;

property SchemaVersion: string read fSchemaVersion write fSchemaVersion;
property Modality: string read fModality write fModality;
property InvoiceIssuerType: string read fInvoiceIssuerType write fInvoiceIssuerType;
property Batch: TBatch read fBatch write fBatch;
end;

{ FFileHeaderType }

C_SchemaVersion_3_2 = '3.2';

C_Modality_Individual = 'I';

C_PersonTypeCode_Fisica = 'F';
C_PersonTypeCode_Juridica = 'J';

C_ResidenceTypeCodeType_R = 'R'; /// - Residente en España
C_ResidenceTypeCodeType_U = 'U'; /// - Residente en la UE

C_InvoiceIssuerType_Emisor = 'EM';

constructor TFileHeader.Create;
begin
fSchemaVersion := C_SchemaVersion_3_2_1;
fModality := C_Modality_Individual;
fInvoiceIssuerType := C_InvoiceIssuerType_Emisor;
fBatch := TBatch.Create;
end;

function TFileHeader.ToXml: IXMLDOMNode;
var
XMLElement: IXMLDOMElement;
begin
XMLElement := NewElementNode( nil, XMLNode_eFact_32_FileHeader );
if XMLElement <> nil then
begin
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_SchemaVersion, Self.fSchemaVersion, 0));
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_Modality, Self.fModality, 0));
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_InvoiceIssuerType, Self.fInvoiceIssuerType, 0));
XMLElement.appendChild(Self.fBatch.ToXml);
end;
result := XMLElement;
end;

...



p.d.: Està hecho para Delphi5...

lithium76
26-01-2015, 16:17:53
Perdón pero he andado liado y no he podido responder antes... Pues es un gran trabajo, interesante la aproximación que has hecho al problema y la manera que has encontrado de resolverlo.. Me lo miraré más a fondo a ver si consigo rehacer mi código también . una lástima que el binding no consiga hacerlo directamente :( ¡Muchísimas gracias!

olbeup
27-01-2015, 15:15:01
Yo tenía el mismo problema y lo resolví aquí (http://www.clubdelphi.com/foros/showthread.php?t=86064), con la ayuda de Al González

Un saludo.

lithium76
27-01-2015, 16:15:36
¡Muchas gracias, olbeup! ¡Muy amable! Gran aporte este post que has puesto.. Una pregunta, si me permites, tu no trabajas a partir de la interface del Data Binding, no? ¿ Son todo IXMLNode's, que vas colocando según correspndo no?

olbeup
28-01-2015, 08:37:59
¡Muchas gracias, olbeup! ¡Muy amable! Gran aporte este post que has puesto.. Una pregunta, si me permites, tu no trabajas a partir de la interface del Data Binding, no? ¿ Son todo IXMLNode's, que vas colocando según correspndo no?

Si, desde el IXMLDocument que es el principal y los IXMLNotes el resto.

Un saludo.

Kribbeling
04-02-2015, 21:33:23
Como verás lo he simplificado al máximo. y escribo el xml casi de forma literal


/// Tipo TFacturae
type
TFacturae = class
private
fFileHeader: TFileHeader;
fParties: TParties;
fInvoices: TInvoices;
// fExtensions: TExtensions;
public
constructor Create;
///
function ToXml: IXMLDOMElement;
///
property FileHeader: TFileHeader read fFileHeader write fFileHeader;
property Parties: TParties read fParties write fParties;
property Invoices: TInvoices read fInvoices write fInvoices;
// property fExtensions: TExtensions read fExtensions write fExtensions;
end;

{ TFacturae }

XMLNode_eFact_32_Facturae = 'fe:Facturae';
XMLNode_eFact_32_FileHeader = 'FileHeader';
XMLNode_eFact_32_SchemaVersion = 'SchemaVersion';
XMLNode_eFact_32_Modality = 'Modality';
XMLNode_eFact_32_InvoiceIssuerType = 'InvoiceIssuerType';

constructor TFacturae.Create;
begin
fFileHeader := TFileHeader.Create;
fParties := TParties.Create;
fInvoices := TInvoices.Create;
end;

function TFacturae.ToXml: IXMLDOMElement;
var
XMLDoc: IXMLDOMDocument;
XMLElement: IXMLDOMElement;
begin
XMLDoc := CoFreeThreadedDOMDocument30.Create;
try
XMLElement := XMLDoc.createElement( XMLNode_eFact_32_Facturae );
if XMLElement <> nil then
begin
XMLElement.AppendChild(Self.fFileHeader.ToXml);
XMLElement.AppendChild(Self.fParties.ToXml);
XMLElement.AppendChild(Self.fInvoices.ToXml);
end;
result := XMLElement;
finally
end;
end;


type
TFileHeader = class
private
fSchemaVersion: string; // (E)
fModality: string; // (E)
fInvoiceIssuerType: string; // (E)
// fThirdParty: TThirdParty;
fBatch: TBatch;
// fFactoringAssignmentData: TFactoringAssignmentData;
public
constructor Create;

function ToXml: IXMLDOMNode;

property SchemaVersion: string read fSchemaVersion write fSchemaVersion;
property Modality: string read fModality write fModality;
property InvoiceIssuerType: string read fInvoiceIssuerType write fInvoiceIssuerType;
property Batch: TBatch read fBatch write fBatch;
end;

{ FFileHeaderType }

C_SchemaVersion_3_2 = '3.2';

C_Modality_Individual = 'I';

C_PersonTypeCode_Fisica = 'F';
C_PersonTypeCode_Juridica = 'J';

C_ResidenceTypeCodeType_R = 'R'; /// - Residente en España
C_ResidenceTypeCodeType_U = 'U'; /// - Residente en la UE

C_InvoiceIssuerType_Emisor = 'EM';

constructor TFileHeader.Create;
begin
fSchemaVersion := C_SchemaVersion_3_2_1;
fModality := C_Modality_Individual;
fInvoiceIssuerType := C_InvoiceIssuerType_Emisor;
fBatch := TBatch.Create;
end;

function TFileHeader.ToXml: IXMLDOMNode;
var
XMLElement: IXMLDOMElement;
begin
XMLElement := NewElementNode( nil, XMLNode_eFact_32_FileHeader );
if XMLElement <> nil then
begin
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_SchemaVersion, Self.fSchemaVersion, 0));
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_Modality, Self.fModality, 0));
XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_InvoiceIssuerType, Self.fInvoiceIssuerType, 0));
XMLElement.appendChild(Self.fBatch.ToXml);
end;
result := XMLElement;
end;

...

p.d.: Està hecho para Delphi5...

Muy Buenas ,

Esta es mi primera (bueno segunda) vez , no se si lo hago correctamente, en cualquier caso gracias.

Veo que has implementado codigo para la facturae, podrias pasarme algun ejemplo o las clases, muchas gracias .

Kribbeling
04-02-2015, 21:48:54
Manuel, muchas gracias por tu rapidisima respuesta...
Estoy intentando mirar de firmar unicamente el XML con Xades (nada de PDFs), y voy a buscar primero si lo puedo hacer sin componentes. Mirare a traves de alguna dll o algo asi. Ya que puedo generar el xml y en las plataformas de envio del xml a las administraciones publicas, dentro hay la opción de firmar gratuitamente con sus applets... por eso mirar de no pagar y repercutir el gasto a mis "ClientesDeGorra"
Si no al final acabare con SBB...
ademas la app esta hecha con Delphi 5... casi nada...



Buenas ,
No lo he mirado bien pero en ftp://ftp.zlatkovic.com/libxml/Delphi/ creo que tienes un ejemplo para firmar xml con las libXML y openssl.

Yo estoy empezando con todo este tema y si me pudieras pasar algun ejemplo o algo te lo agradeceria , x cierto creo que ya te lo he pedido en otro post.

Muchas gracias y un saludo .

iMia
11-02-2015, 16:01:09
Para el tema de la firma... desde delphi sólo con componentes de terceros $$ o €€ ...

Yo lo voy a solucionar de otra forma...

La AEAT/Ministerio/estado/etc... da las clases para firmar... pero en JAVA.... :(

Pues a hacerlo en java y hacer un shellexecute...

Empiezo las pruebas de firma... iré comentando....

MasDelphi
11-02-2015, 16:33:17
Buenas tardes.
También estoy en la misma situación que iMia y Manuel. Actualmente he logrado hacer la factura con el formato xml y validado por la página del ministerio.
El problema es que no logro validar la firma, he visto los componentes de SecureBlackBox, pero no son compatibles con Delphi 5. Actualmente estoy probando con OpenSSL, pero no he llegado a obtener buenos resultados.
Gracias por vuestra ayuda y consejos.

newtron
11-02-2015, 16:48:23
Para el tema de la firma... desde delphi sólo con componentes de terceros $$ o €€ ...

Yo lo voy a solucionar de otra forma...

La AEAT/Ministerio/estado/etc... da las clases para firmar... pero en JAVA.... :(

Pues a hacerlo en java y hacer un shellexecute...

Empiezo las pruebas de firma... iré comentando....

Estupendo. Cualquier ayuda en ese sentido se agradece.

iMia
11-02-2015, 16:55:55
Buenas ,
No lo he mirado bien pero en ftp://ftp.zlatkovic.com/libxml/Delphi/ creo que tienes un ejemplo para firmar xml con las libXML y openssl.

Yo estoy empezando con todo este tema y si me pudieras pasar algun ejemplo o algo te lo agradeceria , x cierto creo que ya te lo he pedido en otro post.

Muchas gracias y un saludo .
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....

iMia
11-02-2015, 17:31:56
Aquí estan las clases en java para firmar...

http://oficinavirtual.mityc.es/componentes/mityclibxades/index.html

iMia
12-02-2015, 09:09:57
Hola iMia,
he visto que generas el xml para la Efactura.
Me podrias passar un ejemplo de com lo generas? es que nunca he trabajado con xml y con el XML Data Binding tengo algunos problemas.
Si fueras tanamable de passar como generas el arxivo y si tienes solucionado el tema de la firma estaria muy agradecido

Hola aposi,

No es complicado, es laborioso, por que yo me he creado las clases de cada tipo de dato, (manualmente, ya que con el Databinding no se puede, ya que el extractor de clases a partir del xsd no funciona bien si hay referencias externas) y en cada clase he creado el metodo ToXML que genera los nodos.
Todas las clases anidadas, de esa forma al crear el objeto "padre" se crean todas las clases "hijas" y solo hay que rellenarlas con datos y llar al método TOXML que devuelve los nodos del XML.

mira el código que puse...

a partit de aquí crear las clases TFileHeader, TParties, etc...

Me podrias passar el codigo que te has creado si no es mucha molestia?

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:

Casimiro Notevi
12-02-2015, 10:14:03
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:

No es necesario ese tipo de comentarios, si quieres compartir tu código lo compartes y si no quieres, entonces mejor no digas nada. Aquí compartimos código y todo ese código es fruto de nuestro trabajo, encontrarás programas completos que se han compartido, utilidades, trucos, código de toda clase y tipo, algunos han costado poco hacerlo y otros son trabajo de meses o años.
Pero por eso estamos aquí, para compartir nuestros conocimientos, no para decirle a los demás que "a mí me costó un mes de trabajo, ¿me lo pagarás?"
Espero que lo hayas compartido, y en caso contrario, este no es tu sitio.

iMia
12-02-2015, 10:52:18
No es necesario ese tipo de comentarios, si quieres compartir tu código lo compartes y si no quieres, entonces mejor no digas nada. Aquí compartimos código y todo ese código es fruto de nuestro trabajo, encontrarás programas completos que se han compartido, utilidades, trucos, código de toda clase y tipo, algunos han costado poco hacerlo y otros son trabajo de meses o años.
Pero por eso estamos aquí, para compartir nuestros conocimientos, no para decirle a los demás que "a mí me costó un mes de trabajo, ¿me lo pagarás?"
Espero que lo hayas compartido, y en caso contrario, este no es tu sitio.

Estoy comentando, explicando los pasos que he hecho, compartiendo , aportando mis pocos conocimientos con los demás, explicando los problemas que me he econtradom, para que los demás no los tengan que sufrir, poniendo parte del código que he hecho ...
Pero me insiste en que se lo pase todo... un foro es para compartir, que es lo que estoy haciendo, para ayudar y encaminar, que es lo que he hecho, para ahorrar horas de investigación, que es lo que he hecho... No para hacerle el trabajo a los demás... por que "como nunca he trabajo con XML"... leches, ni yo antes tampoco... pero ahora sí... por que he leido, investigado, he probado, me he equivocado, vamos, que he aprendido... y no por que me lo han dado hecho sin tener yo que hacer ningún esfuerzo...y sabes de sobras que en todos los foros, de este tipo de gente hay mucha... que sus únicas aportaciones son pedir código y luego silencio...

P.D.: Si no soy bienvenido, y a parte de aportar mi reducida experiencia y problemas que me he encontrado, estoy obligado a poner todo el codigo... pues tambien se dice... y me largo por donde he venido... sin problemas...

Casimiro Notevi
12-02-2015, 11:00:38
A ver, iMia, tienes razón, peeero... me refiero a "las formas", te entiendo perfectamente, somos los primeros que ante casos de ese tipo, no hacemos el trabajo a los demás. Pero no le decimos que nos ha costado un mes de trabajo y que nos lo pague.
Lo que hacemos es indicarle un tutorial, preguntarle en qué parte tiene problemas, qué cosas es la que no entiende, etc. o sea, ayudar a encaminarlo.
Desde luego, que el que llega y dice: "tengo que hacer esto, pasadme el código", lo mandamos a tomar.........

iMia
12-02-2015, 11:19:05
Yo tambien entiendo tu postura como moderador, que conste.
Pero después de indicarle 2 veces, que mire lo que he puesto, que ya he puesto código, lo que he explicado , por donde ir, qué utilizar para que no tenga que hacer casi nada... me sigue insistiendo... es que, se vé claramente que ni se ha leido las 40 páginas del esquema de la eFactura, ni lo compara con el codigo que he puesto, es que si hubiese hecho un minimo esfuerzo, vería claramente por donde seguir...
Por eso me he "encendido" un poco... por que no pregunta... "tengo un problema aquí o allí..." si no que... "me puedes pasar tu codigo"...
Tampoco creo que le haya dicho DIRECTAMENTE... "me lo vas a pagar?"... en el sentido que quiero que me lo pague.. si no que le he intentado hacer ver que lo que pide tiene un coste de tiempo (y el tiempo es oro...) , muy grande para pedir todo e insistir, con emoticonos, para que no fuese una respuesta seca...

Casimiro Notevi
12-02-2015, 11:27:20
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.

iMia
12-02-2015, 11:31:41
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
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
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/java/javamail/dig-signature-api-140772.html

Kribbeling
12-02-2015, 22:49:48
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
ale... ya está...
aquí lo tenéis todo para firmar desde java....

http://www.oracle.com/technetwork/java/javamail/dig-signature-api-140772.html

más....

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=xmlSignature
http://sviudes.blogspot.com.es/2010/05/facturae-con-net-y-c.html

newtron
13-02-2015, 10:20:35
ale... ya está...
aquí lo tenéis todo para firmar desde java....

http://www.oracle.com/technetwork/java/javamail/dig-signature-api-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/05/facturae-con-net-y-c.html

newtron
17-02-2015, 19:54:11
Aqui lo tenéis en .NET y C#

http://sviudes.blogspot.com.es/2010/05/facturae-con-net-y-c.html

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


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.

// 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.


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


4º - Firmar

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!!!!

// 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
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
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
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
... 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
¿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
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 (http://sourceforge.net/projects/jedi-apilib/) para estos temas?
Le estoy probando pero de momento no llego a ningun resultado..

Todo andara :D

SAGOAN
25-06-2015, 18:44:43
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.

www.facturae.gob.es/formato/Paginas/descarga-aplicacion-escritorio.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 (http://www.clubdelphi.com/foros/showthread.php?t=86064&page=2&highlight=facturae) 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
Ok.

Pues igual te interesa este (http://www.clubdelphi.com/foros/showthread.php?t=86064&page=2&highlight=facturae) 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
Ok.

Pues igual te interesa este (http://www.clubdelphi.com/foros/showthread.php?t=86064&page=2&highlight=facturae) 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
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
: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
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
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
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
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
¿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/viewtopic.php?f=6&t=25119&sid=a8ad3a2e82dcdb511837f782812975a1

Saludos