Hola espinete,
Yo también me estoy dando cabezazos con esto de la firma electrónica, porque no tengo ni idea de Java, SOAP, etc. Pero bueno, ya estoy bastante avanzado.
Los de FACe van enviando periódicamente emails con los cambios que van haciendo, y tocan mucho los w...s. Por si a alguno le interesa, todos los envíos que realizan por correo pueden ser consultados en listas-ctt.administracionelectronica.gob.es/pipermail/face-notificacion/ sin necesidad de darse de alta en las listas de correo. Lo último que han informado parece ser importante, ya que es un cambio en la interfaz sspp, que ahora pasa a ser sspp2. No obstante, aseguran que hasta Octubre nada de nada. Pueden ver la noticia completa aquí: listas-ctt.administracionelectronica.gob.es/pipermail/face-notificacion/2015-June/000024.html.
Por lo que puedo deducir de la documentación de FACe para proveedores, concretamente "Interfaz WS FACe- Proveedores.pdf", es que hace falta generar un nuevo XML (que es el que se envía mediante SOAP) que es el que contiene la factura xsig pero en formato base64, así como otros datos como el nombre, el correo electrónico del proveedor, el tipo mime y los ficheros anexos (si los hubiera, éstos también codificados en base64). El total de archivos a enviar no puede superar los 8Mb, según leí en el archivo "integracion-y-recomendaciones.pdf". Un ejemplo de este XML es el que adjuntó elguille en el primer post dentro de requestsoap.zip.
Ahora bien, este nuevo fichero XML hay que firmarlo cumpliendo el estándar OASIS WSSecurity 1.0 X509 Token Profile, pero la firma es diferente a la que se usó para el xsig ya que tiene bloques como <wsse:BinarySecurityToken>, y no sé cómo firmar así. Si el compañero elguille u algún otro puede arrojar algo de luz se agradecería.
Sobre la codificación en base64 que alguien me corrija, pero en Delphi XE2 o superiores creo que basta con el siguiente código que encontré por internet (añadir al uses la librería "Soap.EncdDecd"):
Código Delphi
[-]
function TPFIRMAR.ConvertirEnBase64(const FileName: string): AnsiString;
var
Stream: TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
Stream.LoadFromFile(Filename);
Result := EncodeBase64(Stream.Memory, Stream.Size);
finally
Stream.Free;
end;
end;
¿Alguna ayuda para firmar el XML que debe enviarse por SOAP? elguille...¿has sabido por fin cómo se envía una vez generado el WSDL con el importer de Delphi?
¿Les funciona a día de hoy el entorno de pruebas de FACe?
Gracias de antemano!