Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Registros de Facturacion y Eventos (XML)
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-01-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Ok.


Por si a alguien le viene bien creo que he conseguido enviar registros en modo NO Verifactu a partir de los ficheros XML de las facturas firmados en disco con una pequeña "ñapa".


Lo que he hecho ha sido crear un fichero .xml con la cabecera "a pelo" hasta el nodo "RegistroFactura"

A esto le añado los ficheros xml firmados leyendo cada uno de ellos y al final cierro los nodos.

Una vez creado este fichero hago una llamada SOAP e intercepto el evento "beforeexecute" del objeto HTTPRIO y sustituyo el stream por el del fichero que he generado con el siguiente código:

Código Delphi [-]
  // Cargar el archivo XML desde disco
  XMLFactura := TStringList.Create;
  XMLFactura.LoadFromFile('C:\TEMP\prueba.xml'); // Fichero creado "a pelo"
  // Leer el contenido del flujo SOAPRequest
  RequestStream := TStringStream.Create;
  SOAPRequest.Position := 0;
  RequestStream.CopyFrom(SOAPRequest, SOAPRequest.Size);
  // Convertir el flujo a una cadena para su manipulación
  ModifiedRequest := RequestStream.DataString;
  ModifiedRequest:=XMLFactura.Text;
  // Sobrescribir el contenido del flujo con la solicitud modificada
  RequestStream.Size := 0; // Limpiar el flujo
  RequestStream.WriteString(ModifiedRequest);
  RequestStream.Position := 0;
  // Reemplazar el flujo original con el modificado
  SOAPRequest.Size := 0;
  SOAPRequest.CopyFrom(RequestStream, RequestStream.Size);
  SOAPRequest.Position := 0;
  RequestStream.Free;
  XMLFactura.Free;


Esto hace la llamada SOAP con el fichero que hemos creado y debe de funcionar. Todo esto lo he hecho en pruebas sueltas y me falta implementarlo en mi programa pero creo que funciona, lo digo por si alguien quiere ir trabajando en ello.


Saludos.
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 03-01-2025
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 202
Poder: 12
razorxxx Va por buen camino
Hola a todos.

Cada vez que ejecuto en una consola el AutoFirmaCommandLine.exe me devuelve un warning:

es.gob.afirma.standalone.HDPIManager executeWmicCommand
ADVERTENCIA: Error en la ejecucion del comando [Ljava.lang.String;@380fb434: java.io.IOException: Cannot run program "wmic": CreateProcess error=2, El sistema no puede encontrar el archivo especificado.

Tengo instalado Java y AutoFirma en sus últimas versiones.

¿A alguien más le pasa?
Responder Con Cita
  #3  
Antiguo 03-01-2025
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 202
Poder: 12
razorxxx Va por buen camino
Cita:
Empezado por razorxxx Ver Mensaje
Hola a todos.

Cada vez que ejecuto en una consola el AutoFirmaCommandLine.exe me devuelve un warning:

es.gob.afirma.standalone.HDPIManager executeWmicCommand
ADVERTENCIA: Error en la ejecucion del comando [Ljava.lang.String;@380fb434: java.io.IOException: Cannot run program "wmic": CreateProcess error=2, El sistema no puede encontrar el archivo especificado.

Tengo instalado Java y AutoFirma en sus últimas versiones.

¿A alguien más le pasa?
Me respondo a mí mismo. En Windows 11 hay que instalar WMIC (Windows Management Instrumentation Command-line). Hay que ir a Configuración, en el cuadro de búsqueda escribimos "Características opcionales", luego "Ver características" y en el buscador escribimos WMIC. Lo seleccionamos, le damos a instalar y esperamos a que termine (tarda un rato).
Responder Con Cita
  #4  
Antiguo 03-01-2025
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 202
Poder: 12
razorxxx Va por buen camino
Por cierto, ¿alguien ha conseguido firmar con AutoFirmaCommandline.exe y colocar el nodo <Signature> al final del documento?
Responder Con Cita
  #5  
Antiguo 07-01-2025
Faneka Faneka is offline
Miembro
 
Registrado: nov 2024
Ubicación: Alicante
Posts: 499
Poder: 2
Faneka Va por buen camino
Cita:
Empezado por razorxxx Ver Mensaje
Por cierto, ¿alguien ha conseguido firmar con AutoFirmaCommandline.exe y colocar el nodo <Signature> al final del documento?
Pues ahora que lo comentas yo tuve que mover la etiqueta de la firma a su sitio porque no la coloca donde indica la extructura del veri*factu.
Responder Con Cita
  #6  
Antiguo 13-01-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Ok. He integrado la forma que comentaba para montar el .xml en mi programa y me encuentro con un error al hacer el envío del fichero:





Lo que hago es interceptar el evento "Beforeexecute" del objeto HTTPRIO para cambiar el stream de la llamada por el fichero .xml montado con la cabecera+ficheros de facturas firmados y me da este mensaje.


¿Alguien sabe de qué puede ser?


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 13-01-2025
delphiGar delphiGar is offline
Miembro
 
Registrado: ago 2024
Posts: 182
Poder: 2
delphiGar Va por buen camino
Igual que cuando envias para verifactu necesitas el certificado para autenticarte en la aeat, en este caso por requerimiento.
Responder Con Cita
  #8  
Antiguo 14-01-2025
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 202
Poder: 12
razorxxx Va por buen camino
Cita:
Empezado por Faneka Ver Mensaje
Pues ahora que lo comentas yo tuve que mover la etiqueta de la firma a su sitio porque no la coloca donde indica la extructura del veri*factu.
Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:
Cita:
AutoFirmaCommandLine.exe sign -i "ejemplo.xml" -o "ejemplo_signed.xml" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urnid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=Dkx2R3nMv8kWo7iSAh+/1SQ70hfseOEaQbpJnURk+pg= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store pkcs12:"cert.pfx" -password XXXX -filter subject.contains:89890001K

Última edición por Neftali [Germán.Estévez] fecha: 14-01-2025 a las 12:26:42. Razón: Añadir TAGs al código
Responder Con Cita
  #9  
Antiguo 14-01-2025
Faneka Faneka is offline
Miembro
 
Registrado: nov 2024
Ubicación: Alicante
Posts: 499
Poder: 2
Faneka Va por buen camino
Ah, perfecto, lo probare, gracias.
Responder Con Cita
  #10  
Antiguo 14-01-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.442
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por razorxxx Ver Mensaje
Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:

Actualizado mensaje#2 con códigos útiles.
Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 14-01-2025
delphiGar delphiGar is offline
Miembro
 
Registrado: ago 2024
Posts: 182
Poder: 2
delphiGar Va por buen camino
Cita:
Empezado por razorxxx Ver Mensaje
Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:
Aunque yo no utilizo Autofirma para firmar los ficheros.

El codigo correcto para autofrima seria este:
Código:
AutoFirmaCommandLine.exe sign -i "c:\envio_firmado.xml" -o "c:\envio_firmado_a.xsig" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urn:oid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=G7roucf600+f03r/o0bAOQ6WAs0= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2000/09/xmldsig#sha1 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store auto -certgui

Última edición por Neftali [Germán.Estévez] fecha: 15-01-2025 a las 10:16:59.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Posicion Firma shoulder Varios 9 11-10-2016 17:03:20
Chequeo para InputBox... bulc OOP 1 20-06-2014 22:18:14
Calcular un digito de chequeo GrupoDatasoft Varios 7 09-02-2009 17:53:53
Firma Digital Dado de baja Varios 5 30-11-2008 20:52:16
La firma de la semana, del mes, del año... kinobi Debates 3 23-05-2005 01:00:52


La franja horaria es GMT +2. Ahora son las 20:07:49.


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