Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
¿Como enviar facturas al web service?

Buenos días a todos


Estoy peleándome con el web service del Verifactu y quería preguntar como estáis haciendo para enviar los registros de facturas.


En un código que está anclado en el foro vi que lo que se manda es el xml, pero me gustaría saber si es la única manera o hay algo parecido el envío en el SII, que puedes enviar el "objeto" SuministroLRFacturasEmitidas que construyes (en el caso del Verifactu sería el objeto "RegFactuSistemaFacturacion")


El código que vi para enviar al Verifactu:


Código:
   Dim webRequest As HttpWebRequest = CType(Net.WebRequest.Create("...prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"), HttpWebRequest)
        webRequest.ContentType = "text/xml;charset=""utf-8"""
        webRequest.Accept = "text/xml"
        webRequest.Method = "POST"

        webRequest.ClientCertificates.Add(certificate)

        Using stream As Stream = webRequest.GetRequestStream()
            doc.Save(stream)        'EN ESTE DOC ESTÁ EL XML
        End Using

        Dim response As HttpWebResponse = CType(webRequest.GetResponse(), HttpWebResponse)
        Dim statusDescription As String = response.StatusDescription
        Dim dataStream As Stream = response.GetResponseStream()
        Dim responseFromServer As String

        Using reader As StreamReader = New StreamReader(dataStream)
            responseFromServer = reader.ReadToEnd()
            reader.Close()
            dataStream.Close()
            response.Close()
        End Using
El código que uso para enviar al SII:
Código:
        Dim Ws As WSEmitidas.siiSOAPClient = New WSEmitidas.siiSOAPClient("SuministroFactEmitidasPruebas", New EndpointAddress("...prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"))
        Ws.Endpoint.Binding = binding
        Ws.ClientCredentials.ClientCertificate.Certificate = certifikat
        Dim RespuestaEnvioFactura As RespuestaLRFEmitidasType = Ws.SuministroLRFacturasEmitidas(ObjetoFacturaEmitida)
        MsgBox(RespuestaEnvioFactura.EstadoEnvio)
Muchas gracias a todos de antemano por la ayuda
Responder Con Cita
  #2  
Antiguo 24-01-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
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
En este mensaje tienes un programa de ejemplo "completo" que ha publicado un forero (seccion_31) que incluye el envío del fichero utilizando HTTPRio.
El código fuente está disponible en Github, puedes revisarlo.


El código simplificado es algo así:

Código Delphi [-]
      // --> envío pre-produccion:  'https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP';
      try
          HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado_SERIAL( comboCertificados.text );  // coloca el certificado
          direccion_envio := editURL.text;
          if sender=soloXML then HTTPRIO1.Tag:=1                                                                             // 0-envio  1-generar XML
                            else HTTPRIO1.Tag:=0;                                                                            // 0-envio  1-generar XML
          res:=   RespuestaRegFactuSistemaFacturacionType.Create;
          res:=   GetsfPortTypeVerifactu( false, direccion_envio , HTTPRIO1 ).RegFactuSistemaFacturacion( veriFactu );        // enviarlo !
          // resultado del envio:   (se colocara el csv si la factura ha sido aceptada, en la base de datos: facturas.xml)
          procesarEnvio(res);
      except
            on E:Exception do
                  memoRes.text  :=Format('Error al realizar el envío; (%s)-%s',[E.ClassName, E.Message]);
      end;
__________________
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
  #3  
Antiguo 24-01-2025
Avatar de gcqZW
gcqZW gcqZW is offline
Miembro
 
Registrado: ene 2025
Ubicación: Zaragoza
Posts: 274
Poder: 2
gcqZW Va por buen camino
Si no me equivoco, se debería poder hacer de ambas maneras, generando tú el XML a mano o pasando por la función "RegFactuSistemaFacturacion", yo personalmente monto el XML a mano por ahora, pero como te dice neftali échale un ojo al github que te aclarará mas que cualquier respuesta.
__________________
La religión es personal e intransferible.
Responder Con Cita
  #4  
Antiguo 24-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Gracias a ambos por las respuestas.


Es que estaba montando el objeto "RegFactuSistemaFacturacion" (como la hacía en el SII)
Código:
Dim objectoFactEmitida As RegFactuSistemaFacturacion = New WSVerifactu.RegFactuSistemaFacturacion

objectoFactEmitida.Cabecera = New CabeceraType
objectoFactEmitida.Cabecera.ObligadoEmision = New PersonaFisicaJuridicaESType
objectoFactEmitida.Cabecera.ObligadoEmision.NombreRazon = "AAAA"
objectoFactEmitida.Cabecera.ObligadoEmision.NIF = "BBBB"
objectoFactEmitida.Cabecera.Representante = New PersonaFisicaJuridicaESType
objectoFactEmitida.Cabecera.Representante.NombreRazon = "CCCC"
....
y una vez que terminé quería enviarlo al web service, pero no encuentro la manera. Sí que lo conseguí comunicar una factura enviando un xml, pero quería asegurarme si es la única manera.


Porque al convertir el objeto "RegFactuSistemaFacturacion" al xml lo monta regular: las etiquetas no comienzan por "<sum:" o "<sum1:" y me dice que el xml es incorrecto. Si lo edito a mano poniendo los "sum " me funciona, pero es un poco rollo.


También puedo olvidarme del objeto "RegFactuSistemaFacturacion" y montarlo a mano como dices, pero me parece más engorroso, quería agotar todas las vías antes


Probaré lo que me decís a ver si avanzo algo


Muchas gracias!
Responder Con Cita
  #5  
Antiguo 24-01-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
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
Revisa los mensajes existentes.
Ya hay muchos hablando del envío, donde puedes ver código.
__________________
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
  #6  
Antiguo 24-01-2025
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Gracias a ambos por las respuestas.


Es que estaba montando el objeto "RegFactuSistemaFacturacion" (como la hacía en el SII)
Código:
Dim objectoFactEmitida As RegFactuSistemaFacturacion = New WSVerifactu.RegFactuSistemaFacturacion

objectoFactEmitida.Cabecera = New CabeceraType
objectoFactEmitida.Cabecera.ObligadoEmision = New PersonaFisicaJuridicaESType
objectoFactEmitida.Cabecera.ObligadoEmision.NombreRazon = "AAAA"
objectoFactEmitida.Cabecera.ObligadoEmision.NIF = "BBBB"
objectoFactEmitida.Cabecera.Representante = New PersonaFisicaJuridicaESType
objectoFactEmitida.Cabecera.Representante.NombreRazon = "CCCC"
....
y una vez que terminé quería enviarlo al web service, pero no encuentro la manera. Sí que lo conseguí comunicar una factura enviando un xml, pero quería asegurarme si es la única manera.


Porque al convertir el objeto "RegFactuSistemaFacturacion" al xml lo monta regular: las etiquetas no comienzan por "<sum:" o "<sum1:" y me dice que el xml es incorrecto. Si lo edito a mano poniendo los "sum " me funciona, pero es un poco rollo.


También puedo olvidarme del objeto "RegFactuSistemaFacturacion" y montarlo a mano como dices, pero me parece más engorroso, quería agotar todas las vías antes


Probaré lo que me decís a ver si avanzo algo


Muchas gracias!
Si que puedes enviar el objeto directamente usando las clases que se generan al importar el wsdl

Este código c# lo encontré en este foro, de algún compañero:

Código:
var basicbinding = new BasicHttpsBinding();
basicbinding.Name = "sfVerifactu";
basicbinding.Security.Mode = BasicHttpsSecurityMode.Transport;
basicbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
basicbinding.MaxReceivedMessageSize = 100 * 1024 * 1024;
var service = new sfPortTypeVerifactuClient(basicbinding, new EndpointAddress(new Uri(url)));
service.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(certificate);
RespuestaRegFactuSistemaFacturacionType wsResponse = wsResponse = service.RegFactuSistemaFacturacion(objectoFactEmitida);
Espero que te sirva, seguro que puedes adaptarlo a tu lenguaje fácilmente
Responder Con Cita
  #7  
Antiguo 26-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Si que puedes enviar el objeto directamente usando las clases que se generan al importar el wsdl

Este código c# lo encontré en este foro, de algún compañero:

Código:
var basicbinding = new BasicHttpsBinding();
basicbinding.Name = "sfVerifactu";
basicbinding.Security.Mode = BasicHttpsSecurityMode.Transport;
basicbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
basicbinding.MaxReceivedMessageSize = 100 * 1024 * 1024;
var service = new sfPortTypeVerifactuClient(basicbinding, new EndpointAddress(new Uri(url)));
service.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(certificate);
RespuestaRegFactuSistemaFacturacionType wsResponse = wsResponse = service.RegFactuSistemaFacturacion(objectoFactEmitida);
Espero que te sirva, seguro que puedes adaptarlo a tu lenguaje fácilmente
Muchas gracias por el código, lo voy a probar. ¿podrías indicarme de que hilo lo sacaste? porque por más que he buscado no lo encontré
Responder Con Cita
  #8  
Antiguo 27-01-2025
Avatar de gcqZW
gcqZW gcqZW is offline
Miembro
 
Registrado: ene 2025
Ubicación: Zaragoza
Posts: 274
Poder: 2
gcqZW Va por buen camino
Cita:
Porque al convertir el objeto "RegFactuSistemaFacturacion" al xml lo monta regular: las etiquetas no comienzan por "<sum:" o "<sum1:" y me dice que el xml es incorrecto. Si lo edito a mano poniendo los "sum " me funciona, pero es un poco rollo.
Me pasaba lo mismo, yo lo que hacía era un replace de las etiquetas para que quedaran con sum y sum1, pero vamos que al final me monte una función que me componía el xml a partir de un array por que me daba problemas la otra manera.
__________________
La religión es personal e intransferible.
Responder Con Cita
  #9  
Antiguo 27-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Cita:
Empezado por gcqZW Ver Mensaje
Me pasaba lo mismo, yo lo que hacía era un replace de las etiquetas para que quedaran con sum y sum1, pero vamos que al final me monte una función que me componía el xml a partir de un array por que me daba problemas la otra manera.

Si no lo consigo de otra manera tendré que tirar por ahí, pero me parece mucho más cómo crear y mandar el objeto RegFactuSistemaFacturacion.


Seguiré investigando y si lo consigo lo pongo aquí


Muchas gracias igualmente!
Responder Con Cita
  #10  
Antiguo 27-01-2025
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Muchas gracias por el código, lo voy a probar. ¿podrías indicarme de que hilo lo sacaste? porque por más que he buscado no lo encontré
Hola Jarogo08 ahora no encuentro donde lo vi pero he encontrado este otro post que creo que te puede ayudar:
https://www.clubdelphi.com/foros/sho...postcount=3119

También te podría ser útil revisar los ejemplos publicados en el post #2:
https://www.clubdelphi.com/foros/showthread.php?t=95235

Saludos
Responder Con Cita
  #11  
Antiguo 29-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Conseguido

Buenas a todos


al final lo conseguí, pongo aquí el código por si puede ayudarle a alguien más:


Código:
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

        Dim ws As sfVerifactu = New WSVerifactu.sfVerifactu
        ws.ClientCertificates.Add(certificate)
        ws.Url = "https : // prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"   'quitar los espacios

        Dim RespuestaEnvioFactura As WSVerifactu.RespuestaRegFactuSistemaFacturacionType = ws.RegFactuSistemaFacturacion(objectoFactEmitida)

        MsgBox(RespuestaEnvioFactura.EstadoEnvio & "/" & RespuestaEnvioFactura.RespuestaLinea.Length)

        For x As Integer = 0 To RespuestaEnvioFactura.RespuestaLinea.Length - 1
            MsgBox(RespuestaEnvioFactura.RespuestaLinea(x).IDFactura.NumSerieFactura.ToString & ": " & RespuestaEnvioFactura.RespuestaLinea(x).CodigoErrorRegistro & " - " & RespuestaEnvioFactura.RespuestaLinea(x).DescripcionErrorRegistro)
        Next
Tenía mal la URL en el app.config y por eso no me funcionaba


Gracias a todos por la ayuda
Responder Con Cita
Respuesta



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
Enviar información a los clientes desde un Web Service REST chinchan C++ Builder 1 20-01-2023 21:51:20
Como consumir un web service que usa SSL AzidRain Internet 0 12-12-2013 20:38:02
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 17:27:37
Mi aplicacion como un Service kavisch Varios 2 03-05-2006 21:51:51
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44


La franja horaria es GMT +2. Ahora son las 11:53:17.


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