Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Enviar factura electronica via webservice (https://www.clubdelphi.com/foros/showthread.php?t=87738)

elguille 19-02-2015 09:16:43

Enviar factura electronica via webservice
 
2 Archivos Adjunto(s)
Al final a base de leer esta web y otras y copiar y pegar he conseguido crear la factura electronica firmada y correctamente validada mediante secureblackbox (son muy buenas con ejemplos para hacerlo todo) y de hecho ya las envio manualmente a traves de
https://face.gob.es/es/remitir-factura
, mi problema ahora es enviarla via webservice segun la siguiente documentacion
http://administracionelectronica.gob...s#.VOWOBeaG-TM
esto es una webservice definida para entorno de pruebas
https://se-face-webservice.redsara.es/sspp?wsdl
o produccion
https://webservice.face.gob.es/sspp?wsdl

son iguales solo cambia la direccion inicial
, en este caso solo me interesa el procedimiento enviarfactura esto consiste en hacer una petición soap FIRMADA (como odio esto de las firmas :mad:) adjunto peticion SOAP que he creado y creo que es correcta y aqui viene el problema, he empleado diversos metodos para enviar la peticion, el componente SOAP que viene con SecureBlackBox
Código Delphi [-]
              FXMLDocument := TElXMLDOMDocument.Create;
              FXMLDocument.LoadFromFile(extractfilepath(application.exename) + 'requestsoap.xml');
              FSOAPClient := TElXMLSOAPClient.Create(nil);
              try
                FSOAPClient.SOAPPrefix := 'soap';
                FSOAPClient.SOAPVersion := SOAP_v1_2;
                FSOAPClient.OperationName := 'enviarFactura';
                FSOAPClient.OperationNamespaceURI := 'https://se-face-webservice.redsara.es';
                FSOAPClient.MessageNamespaces.Clear;
                FSOAPClient.HTTPClient := HTTPSClient;
                FSOAPClient.URL := 'https://se-face-webservice.redsara.es/sspp';
                FSOAPClient.SOAPAction := 'https://se-face-webservice.redsara.es/sspp/enviarFactura';
                fsoapclient.GenerateMessage;
                FSOAPClient.XMLDocument.LoadFromFile(extractfilepath(application.exename) + 'requestsoap.xml');
                FSOAPClient.SOAPMessage.LoadFromXML(FSOAPClient.XMLDocument); // reload a SOAP message if needed
//                HTTPSClient.Post('https://se-face-webservice.redsara.es/sspp/enviarFactura'+FXMLDocument.OuterXML);
                FSOAPClient.SendMessage;
              except
                on E: Exception do
                begin
                  MessageDlg('Failed to send SOAP message: ' + E.Message, mtError, [mbOk], 0);
                end;
              end;
o mediante el pas creado con el WDSL importer de Delphi ( lo adjunto sspp_serviceprueba)
Código Delphi [-]
          sspp := GetSSPPWebServiceProxyPort(FALSE, '', nil);
          facturasspp := ssppfactura.Create;
          facturasspp.correo := tsdat[16];
          facturassppfichero := ssppficherofactura.Create;
          facturassppfichero.nombre := MFIC;
          facturassppfichero.factura := '72345';
          facturassppfichero.mime := 'application/xml';
          facturasspp.fichero_factura := facturassppfichero;
          resulsspp := sspp.enviarFactura(facturasspp)
en ambos casos recibo connection lost y no consigo hacer nada mas, tambien creo que si en cualquier navegador tecleo el punto de entrada https://se-face-webservice.redsara.e.../enviarfactura mas ?= y el requestsoap tambien deberia de funcionar pero recibo FIRMA INVALIDA ..
Ya se que el tema es muy complicado pero si alguien tiene alguna idea de por donde tirar se lo agradeceria, así como estoy dispuesto a pagar (dentro de unos limites :D) si alguien ya lo ha solucionado ...
Gracias

engranaje 19-02-2015 09:48:17

Espero no equivocarme pero tienes que andarte con ojo con el tema de face, estan haciendo cambios cada 2x3 y no estan avisando. Estoy seguro que si pruebas eso mismo contra el entorno de producción te funcionará y que lo que está pasando es que en este momento en pruebas no están aceptando que se suban facturas. Ya te digo que no te fies demasiado de mi y mires por otros lados pero si tuviera que jugarme algo apostaría por esto que te estoy diciendo. No me parece que el problema lo tengas en tu código, creo que esta en el webservice.

elguille 19-02-2015 11:14:46

Tienes razón Engranaje contra el entorno de producción recibo error "firma no válida" no "connection lost" que tengo que suponer que es cierto, menudos chapuzas ponen un entorno de pruebas invalido, para ese mejor no ponerlo...
En fin voy a repasar el tema de la firma a ver si pillo donde puede estar el error...

elguille 19-02-2015 11:17:53

Después de perder tantas horas por errores no mios quisiera asegurarme de que estoy equivocado, ¿alguno ha conseguido enviar las facturas via webservice ?

engranaje 19-02-2015 12:46:02

Lo que comenté antes es mas bien de oidas. Lo que sé y ya digo que no puedo hablar en primera persona es que estas semanas han cambiado el formato de las facturas varias veces y también el webservice, dandose el caso de aplicaciones pasababan de subir facturas utilizando el webservice a no poder subirlas teniendo los desarrolles que modificar la aplicación para adpatarse el nuevo funcionamiento del webservice. A ver si alguien que tenga el tema de primera mano puede ayudarte más y te dice en que punto está el webservice de face ahora en lo que respecta a subir facturas.

engranaje 19-02-2015 13:40:20

¿Has visto esto?


Igualmente el próximo día 17 de febrero, se procederá a la modificación de los certificados de FACe en producción debido al fin del soporte por parte de Microsoft de los certificados de Clase 2CA.
Certificados actualización 17/2/2015
ruta_de_certificacion_ssl_face.p7b
ruta_de_certificacion_wildcard_face.p7b

Para obtener dichos certificados por favor pinche aquí:
http://administracionelectronica.gob.es/ctt/resources/Soluciones/334/Area%20descargas/Certificados%20FACe.zip?idIniciativa=334&idElemento=3766

elguille 19-02-2015 13:49:51

Creo que a nosotros no nos afecta a no ser que valides la firma de respuesta del servidor ...

elguille 09-03-2015 13:06:20

webservice facturae
 
¿Alguna mente preclara ha conseguido enviar la factura electrónica a través del webservice "https://webservice.face.gob.es"?

Saludos

newtron 10-03-2015 09:36:18

Hola.

Siento no poder ayudarte porque creo que los demás vamos un paso por detrás. ¿Exactamente qué componente de SBB has comprado?, ¿puedes decirnos el precio?.

Saludos

elguille 11-03-2015 12:12:48

https://www.eldos.com/sbb/editions.php#vcl

Edición profesional

Para calcular el precio

https://www.eldos.com/sbb/calc.php

Saludos

newtron 11-03-2015 12:29:31

Cita:

Empezado por elguille (Mensaje 489865)
https://www.eldos.com/sbb/editions.php#vcl

Edición profesional

Para calcular el precio

https://www.eldos.com/sbb/calc.php

Saludos

Si, si hasta ahí llego. Mi pregunta es si has comprado la "suite" completa que si no me equivoco sale por 1,324.00 trompos+IVA para un usuario o has comprado solo el componente de firma que no estoy seguro si es el XMLBlackBox que sale por 497.00.

Saludos

elguille 16-03-2015 10:38:03

Necesitas la suite completa... al necesitar XMLBlackbox package...

newtron 16-03-2015 10:54:46

Cita:

Empezado por elguille (Mensaje 490061)
Necesitas la suite completa... al necesitar XMLBlackbox package...

Bueno, creo que se pueden comprar paquetes sueltos, como en este caso el XMLBlackbox.

Por otro lado si consigues algo en relación a tu tema te agradeceríamos que lo comentaras y si te cuesta pasta igual podemos hacer un "mocho" :D.

Gracias y un saludo.

espinete 25-03-2015 14:43:57

Hola a todos...

Yo también estoy intentando enviar las facturas vía webservice, solo que con el problema añadido de que no tengo mucha experiencia con SOAP, WDSL, etc...

1) Tengo los componentes SecureBlackBox, en caso de que los necesite, que supongo que sí.
2) También he conseguido generar la factura (XML o XSIG) y firmarla. El servicio de validación de factura-e me la da como perfectamente válida.
3) He logrado importar el WSDL. Hasta aquí todo bien.

Al realizar el envío, me da el error "SOAP Request Signature is not valid". Tras investigar un poco, creo que también hay que FIRMAR la petición SOAP. ¿Cómo hago eso?

¿El mensaje SOAP es otro XML y dentro de éste debe ir el contenido de la factura XML convertido a base64? ¿Qué estructura debe tener este otro XML?
¿Puedo usar mi propio certificado digital para las pruebas, o he de usar el de ellos para pruebas?

¿Alguien puede ayudarme con esto?

Gracias!

razorxxx 17-07-2015 16:29:18

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!

espinete 27-10-2015 11:33:39

Hola de nuevo...

Hoy me han entrado escalofríos porque me han dicho que a partir de 2016 tienen previsto desplegar la factura electrónica en España de manera "obligatoria" para reducir el fraude, y no sólo a administraciones públicas, sino a todas las empresas, por lo que las facturas deberán enviarse a Hacienda a través de Internet tarde o temprano. Esto ya ocurre por ejemplo en México y otros países.

Creo que deberíamos entre todos intentar sacar esto adelante, porque no hay mucha información ni ejemplos en Delphi y nos va a costar más de la cuenta conseguirlo.

He encontrado este post que hace lo que necesitamos, pero en C# / .NET:
http://sourcedevnet.blogspot.com.es/...e-con-c-y.html

Por lo que he leído, la documentación de face es mejor no seguirla al pie de la letra (sería la primera vez que un manual oficial está bien explicado).

No debería ser tan complicado teniendo los componentes necesarios, pero todos estamos liados y no tenemos tiempo de ponernos a probar cosas, sobre todo porque muchas veces nos da error y no depende de nosotros sino del webservice, o bien nuestros conocimientos de un tema en concreto no son suficientes (soap, firmas, etc).

Yo uso los componentes de SecureBlackBox para firmar el .XML y generar el .XSIG
La importación del WSDL es sencilla, Delphi se encarga de todo así que no tiene mucha ciencia.
Eso sí, me pierdo entre tanta firma, los headers del soap, etc. ya que nunca he trabajado con soap.

¿Qué tal si vamos poniendo lo que tenemos a ver si entre todos vamos completando el proceso completo? ¿Qué os parece?

Ñuño Martínez 27-10-2015 17:39:05

Buena idea. Lo que propongo es crear otro hilo, igual que existe para los casos que mencionas. Así no está tan mezclado, ¿no?

pacopenin 27-10-2015 18:00:31

Sería una idea estupenda. Todos lo vamos a necesitar, así que podemos beneficiarnos.

newtron 28-10-2015 10:15:16

Cita:

Empezado por espinete (Mensaje 498418)
Yo uso los componentes de SecureBlackBox para firmar el .XML y generar el .XSIG

Espinete, ¿tú podrías preparar en delphi (aunque fuera pagando), usando esos componentes, un ejecutable simple que desde la línea de comandos darle un fichero de entrada y otro de salida, te firmara el archivo y te generara el fichero de salida?. Ahora mismo estoy usando el programita que ya hemos visto en java pero molaría quitarse el java de enmedio.

Saludos

Ñuño Martínez 29-10-2015 11:50:29

He movido algunos mensajes a este otro foro en Trucos, ya que me parece más apropiado. Puede seguirse la conversación apropiada aquí y allí, según el tema.


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

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