Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

Anagnostes 30-01-2025 14:14:18

Si, a mi también me ha pasado con un W10 pero como no puedo ver la respuesta del SOAP y que texto HTML devuelve directamente no he seguido mirando el problema.

Estoy a la espera de poder hacer el cambio de todo el sistema SOAP a Indy como puse en un mensaje anterior y luego lo volveré a provar a estos clientes.

Ramon88 30-01-2025 19:05:00

Creo que eso se puede activar en las características del Windows.

Ramon88 31-01-2025 19:33:19

Perdonar mi ignorancia, pensaba que esto sería más sencillo y no saco nada en claro, me he leído varias páginas del post, pero es infinito!
Veo que importáis el WDSL, esto nunca lo he hecho, es para generar el XML? o para que?
Yo trabajo con visual studio, pero como me ayudasteis muchísimo en el tema de TicketBai, pues siempre os leo...

El proceso es:
1- Generar XML
2- Subirlo logeandote con certificado?

Por favor arrojarme algo de luz!(o a los leones...)

newtron 31-01-2025 20:04:48

Cita:

Empezado por Ramon88 (Mensaje 561625)
Perdonar mi ignorancia, pensaba que esto sería más sencillo y no saco nada en claro, me he leído varias páginas del post, pero es infinito!
Veo que importáis el WDSL, esto nunca lo he hecho, es para generar el XML? o para que?
Yo trabajo con visual studio, pero como me ayudasteis muchísimo en el tema de TicketBai, pues siempre os leo...

El proceso es:
1- Generar XML
2- Subirlo logeandote con certificado?

Por favor arrojarme algo de luz!(o a los leones...)


Buenas.


La importación del WSDL (por lo menos en Delphi) es para generar las unidades necesarias para poder hacer la llamada mediante un objeto HTTPRIO, ese objeto es el que genera el fichero XML y lo envía rellenando los campos en el mismo objeto sin necesidad de crear el XML "a pelo".


La verdad es que no te puedo decir cómo hacerlo con Visual Studio, quiero recordar que alguien que trabajaba con Visual Basic tenía que generar directamente a mano el XML, firmarlo y enviarlo pero no me hagas mucho caso.


Saludos.

jlmoli_67 01-02-2025 21:56:26

Cita:

Empezado por Ramon88 (Mensaje 561625)
Perdonar mi ignorancia, pensaba que esto sería más sencillo y no saco nada en claro, me he leído varias páginas del post, pero es infinito!
Veo que importáis el WDSL, esto nunca lo he hecho, es para generar el XML? o para que?
Yo trabajo con visual studio, pero como me ayudasteis muchísimo en el tema de TicketBai, pues siempre os leo...

El proceso es:
1- Generar XML
2- Subirlo logeandote con certificado?

Por favor arrojarme algo de luz!(o a los leones...)


Buenas,


Si, asi es. Primero se genera el xml y despues se envia mediante mesajes soap autentificados con certificado.
Con el wsdl generamos el xml ya que nos permite ,mediante las clases que crea al importarlo al proyecto, manejar los nodos y estructura del xml facilmente.
Para importar el wsdl nada mas que tienes que agregar a tu proyecto el servicio y listo. Para eso : proyectos-añadir referencia de servicio y añades la direccion


https://www2.agenciatributaria.gob.e...tEmitidas.wsdl

.....
y este para las facturas recibidas


https://www2.agenciatributaria.gob.e...Recibidas.wsdl




Con eso ya te permite referenciarlo en tu codigo para ir generando la estructura del fichero xml:


Dim oSfe As New SuministroFactEmitidas.LRConsultaEmitidasType
oSfe.Cabecera = New SuministroFactEmitidas.CabeceraConsultaSii
oSfe.Cabecera.IDVersionSii = SuministroFactEmitidas.VersionSiiType.Item11
oSfe.Cabecera.Titular = New SuministroFactEmitidas.PersonaFisicaJuridicaUnicaESType With {
.NombreRazon = aeatrscertificado,
.NIF = cifempresa
}


... etc




un saludo y te sigo por si necesitas algo. Yo trabajo en vs2010

Ramon88 03-02-2025 21:52:50

Cita:

Empezado por jlmoli_67 (Mensaje 561641)
Buenas,


Si, asi es. Primero se genera el xml y despues se envia mediante mesajes soap autentificados con certificado.
Con el wsdl generamos el xml ya que nos permite ,mediante las clases que crea al importarlo al proyecto, manejar los nodos y estructura del xml facilmente.
Para importar el wsdl nada mas que tienes que agregar a tu proyecto el servicio y listo. Para eso : proyectos-añadir referencia de servicio y añades la direccion


https://www2.agenciatributaria.gob.e...tEmitidas.wsdl

.....
y este para las facturas recibidas


https://www2.agenciatributaria.gob.e...Recibidas.wsdl




Con eso ya te permite referenciarlo en tu codigo para ir generando la estructura del fichero xml:


Dim oSfe As New SuministroFactEmitidas.LRConsultaEmitidasType
oSfe.Cabecera = New SuministroFactEmitidas.CabeceraConsultaSii
oSfe.Cabecera.IDVersionSii = SuministroFactEmitidas.VersionSiiType.Item11
oSfe.Cabecera.Titular = New SuministroFactEmitidas.PersonaFisicaJuridicaUnicaESType With {
.NombreRazon = aeatrscertificado,
.NIF = cifempresa
}


... etc




un saludo y te sigo por si necesitas algo. Yo trabajo en vs2010

Mil gracias a los 2 por la información!

Siempre he generado el XML a pelo, la verdad. Voy a probar a ver que tal!

Por lo que tengo entendido todas las empresas deben acogerse al SII, y si no te acoges(no las subes) si tienes una inspección, deberías generarlas todas de golpe y presentarlas de la misma forma.(Esto tengo entendido) ¿Es así?

Por lo que he leído en la información, podemos presentar:
- Libro registro de Facturas Expedidas.
- Libro registro de Facturas Recibidas.
- Libro registro de Bienes de Inversión.
- Libro registro de Determinadas Operaciones Intracomunitarias.

No puedo presentar cobros? solo las facturas, algo se me escapa...
Mil Gracias!

newtron 04-02-2025 09:41:21

Cita:

Empezado por Ramon88 (Mensaje 561689)
Mil gracias a los 2 por la información!

Siempre he generado el XML a pelo, la verdad. Voy a probar a ver que tal!

Por lo que tengo entendido todas las empresas deben acogerse al SII, y si no te acoges(no las subes) si tienes una inspección, deberías generarlas todas de golpe y presentarlas de la misma forma.(Esto tengo entendido) ¿Es así?

Por lo que he leído en la información, podemos presentar:
- Libro registro de Facturas Expedidas.
- Libro registro de Facturas Recibidas.
- Libro registro de Bienes de Inversión.
- Libro registro de Determinadas Operaciones Intracomunitarias.

No puedo presentar cobros? solo las facturas, algo se me escapa...
Mil Gracias!


Compañero... creo que estás confundiendo SII con Verifactu y son dos "ñapas" distintas.

Ramon88 04-02-2025 12:54:25

Cita:

Empezado por newtron (Mensaje 561696)
Compañero... creo que estás confundiendo SII con Verifactu y son dos "ñapas" distintas.

Pues si, fui a una reunión y creo que me marearon más que informarme... Estoy ahora mismo hablando con mi asesor y me comenta debo desarrollar Factura electrónica.
Voy al lio ^\||/

rci 04-02-2025 13:17:11

Cita:

Empezado por Ramon88 (Mensaje 561707)
Pues si, fui a una reunión y creo que me marearon más que informarme... Estoy ahora mismo hablando con mi asesor y me comenta debo desarrollar Factura electrónica.
Voy al lio ^\||/

Ramon88 creo que estabas hablando de la ley antifraude (Veri*Factu).
No es lo mismo que la factura electrónica ni que SII. Antes de ponerte a trabajar asegúrate :)

Te paso el enlace del foro que habla de la ley antifraude:
Ley antifraude: https://www.clubdelphi.com/foros/forumdisplay.php?f=63

Saludos

Ramon88 04-02-2025 19:31:17

Cita:

Empezado por rci (Mensaje 561711)
Ramon88 creo que estabas hablando de la ley antifraude (Veri*Factu).
No es lo mismo que la factura electrónica ni que SII. Antes de ponerte a trabajar asegúrate :)

Te paso el enlace del foro que habla de la ley antifraude:
Ley antifraude: https://www.clubdelphi.com/foros/forumdisplay.php?f=63

Saludos


Toda la razón, Gracias!

keys 05-02-2025 12:28:30

Hola a todos.

Sigo con el problema de enviar al SII con el nuevo delphi 12.2 update 2 (Athens). Estoy enviando con THttpRio importando los wsdl. Me he dado cuenta que si envío pocos registros en un envío funciona correctamente, pero si hago un envío con muchos registros más de 100 mas o menos, al enviarlos me sale el siguiente error. Estoy probando con recibidas, pero pasa lo mismo con las demás.

Cita:

Error querying headers: (12019) El identificador está en un estado incorrecto para la operación solicitada
.

La diferencia que veo es que cuando envío pocos se activa el evento HTTPWebNode1NeedClientCertificate, para indicarle por el certificado que tiene que enviar, pero si envío muchos este evento no se activa y por lo tanto sale el error.

No se si alguien tiene este delphi y le esta ocurriendo lo mismo o lo puede probar. Por cierto el mismo envío realizado con el delphi Tokio funciona correctamente.

Joseg012 23-02-2025 16:32:26

Documento Firmado
 
2 Archivos Adjunto(s)
:) Considero que mi firma hecha con mi propio desarrollo esta hermosa y completa.
:p No le falta Nada!!!

newtron 24-02-2025 09:44:39

¡¡Anda!! Pues estaría bien que compartieras cómo lo has firmado.


Saludos.

espinete 06-03-2025 19:24:13

Buenas!

Hace tiempo que no toco este tema porque no tengo muchos clientes que usen el SII, pero casualmente esta semana un cliente nos ha dicho que recibe este error:

Received content of invalid content-type setting: text/html - SOAP expects "text/xml"

Lo cierto es que no sé por qué de repente da este error, porque no se ha cambiado nada.

Uso el componente HTTPRIO. Lo tengo así:
- SecureProtocols: TLS12 y TLS13
- En WSDL Location tengo: https://www2.agenciatributaria.gob.e...tEmitidas.wsdl (no sé si es necesario si luego asigno yo el puerto, addr y service a mano, pero bueno, ahí está)
- Port y Service los tengo en blanco en el componente porque lo relleno a mano para poder alternar entre Pruebas y Producción de esta manera:

Código:

      if (ENTORNO_PRUEBAS) then
      begin
          HTTPRIO1.WSDLLocation := 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidasPruebas';
      end
      else
      begin
          HTTPRIO1.WSDLLocation := 'https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidas';
      end;
      result := GetsiiSOAP(false,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

He tenido que hacer algunos cambios porque el código anterior era de Delphi 11 y ahora lo he tenido que pasar a Delphi 12.2, pero no recuerdo haber tocado nada sobre el Content-Type ni donde puedo asignarle otro (text/xml)

newtron 06-03-2025 19:33:18

Cita:

Empezado por espinete (Mensaje 562511)
Buenas!

Hace tiempo que no toco este tema porque no tengo muchos clientes que usen el SII, pero casualmente esta semana un cliente nos ha dicho que recibe este error:

Received content of invalid content-type setting: text/html - SOAP expects "text/xml"

Lo cierto es que no sé por qué de repente da este error, porque no se ha cambiado nada.

Uso el componente HTTPRIO. Lo tengo así:
- SecureProtocols: TLS12 y TLS13
- En WSDL Location tengo: https://www2.agenciatributaria.gob.e...tEmitidas.wsdl (no sé si es necesario si luego asigno yo el puerto, addr y service a mano, pero bueno, ahí está)
- Port y Service los tengo en blanco en el componente porque lo relleno a mano para poder alternar entre Pruebas y Producción de esta manera:

Código:

      if (ENTORNO_PRUEBAS) then
      begin
          HTTPRIO1.WSDLLocation := 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidasPruebas';
      end
      else
      begin
          HTTPRIO1.WSDLLocation := 'https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidas';
      end;
      result := GetsiiSOAP(false,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

He tenido que hacer algunos cambios porque el código anterior era de Delphi 11 y ahora lo he tenido que pasar a Delphi 12.2, pero no recuerdo haber tocado nada sobre el Content-Type ni donde puedo asignarle otro (text/xml)


Buenas compañero.


¿Es posible que sea por la versión de windows? Tema de compatibilidades con TLS y eso.


Saludos.

elcharlie 07-03-2025 07:48:36

Cita:

Empezado por espinete (Mensaje 562511)
Buenas!

Hace tiempo que no toco este tema porque no tengo muchos clientes que usen el SII, pero casualmente esta semana un cliente nos ha dicho que recibe este error:

Received content of invalid content-type setting: text/html - SOAP expects "text/xml"

Lo cierto es que no sé por qué de repente da este error, porque no se ha cambiado nada.

Uso el componente HTTPRIO. Lo tengo así:
- SecureProtocols: TLS12 y TLS13
- En WSDL Location tengo: https://www2.agenciatributaria.gob.e...tEmitidas.wsdl (no sé si es necesario si luego asigno yo el puerto, addr y service a mano, pero bueno, ahí está)
- Port y Service los tengo en blanco en el componente porque lo relleno a mano para poder alternar entre Pruebas y Producción de esta manera:

Código:

      if (ENTORNO_PRUEBAS) then
      begin
          HTTPRIO1.WSDLLocation := 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidasPruebas';
      end
      else
      begin
          HTTPRIO1.WSDLLocation := 'https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          HTTPRIO1.Service := 'siiService';
          HTTPRIO1.Port := 'SuministroFactEmitidas';
      end;
      result := GetsiiSOAP(false,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

He tenido que hacer algunos cambios porque el código anterior era de Delphi 11 y ahora lo he tenido que pasar a Delphi 12.2, pero no recuerdo haber tocado nada sobre el Content-Type ni donde puedo asignarle otro (text/xml)

Buenos días compi,
A mi ese mensaje me apareció el otro día, haciendo pruebas en VERI*FACTU, al enviar la comunicación sin firmar, es decir no encontró el certificado y lo estaba intentando enviar sin firma.
Lo comento, por si va por ahí los tiros y te sirve de algo.
Suerte
Un saludo

espinete 07-03-2025 11:30:59

Cita:

Empezado por newtron (Mensaje 562512)
Buenas compañero.


¿Es posible que sea por la versión de windows? Tema de compatibilidades con TLS y eso.


Saludos.

No debería porque en mi equipo, haciendo pruebas de envío, tengo Windows 11.
Al cliente también le pasa y tiene W11 también.

espinete 07-03-2025 11:33:07

Cita:

Empezado por elcharlie (Mensaje 562517)
Buenos días compi,
A mi ese mensaje me apareció el otro día, haciendo pruebas en VERI*FACTU, al enviar la comunicación sin firmar, es decir no encontró el certificado y lo estaba intentando enviar sin firma.
Lo comento, por si va por ahí los tiros y te sirve de algo.
Suerte
Un saludo

Sería raro, porque el cliente lleva enviando facturas sin problema hasta hace unos días, y revisando el código, haciendo pruebas de envío con un certificado válido, yo obtengo el mismo error.
No sé si el código estará bien, pero no he cambiado absolutamente nada (de hecho era un proyecto que llevaba años sin tocarse). Ha sido ahora al abrir el proyecto con Delphi 12.2 cuando he tenido que hacer algún cambio, pero sin embargo el cliente tiene la misma versión de siempre.

newtron 07-03-2025 12:59:01

Cita:

Empezado por espinete (Mensaje 562526)
No debería porque en mi equipo, haciendo pruebas de envío, tengo Windows 11.
Al cliente también le pasa y tiene W11 también.


Pues no sé. Lo único que te puedo decir es que a mi me salía exactamente el mismo error intentando enviar datos con mi W7 a partir de la actualización que hicieron de seguridad en los servidores de la aeat y por eso tuve que cambiar mi máquina y ahora uso una con W10.


Una prueba que podrías hacer es intentar enviar datos desde W10 a ver....



Saludos.

espinete 07-03-2025 13:29:54

A ver, que esto está empezando a volverme loco...

He creado el XML y lo he revisado con la utilidad de "invocación de webservice de la AEAT" para comprobar si es válido:
https://prewww1.aeat.es/static_files...teWSAEAT2.html

La respuesta del servidor es "Correcto".

Por lo tanto, entiendo que en el XML que genero está todo bien, pero por algún motivo el componente HTTPRIO no está leyendo la respuesta porque me devuelve el error:

Received content of invalid content-type setting: text/html - SOAP expects "text/xml"

Entiendo que en el SII no hay que firmar el XML, solo el envío. Esto lo hago en el evento OnNeedCertificate:

Código:

    for I := 0 to ACertificateList.Count - 1 do
    begin
        if i=strtointdef(comboCertificate.items.SelectedItem.Hint,0) then
        begin
            AnIndex := I;
            Exit;
        end;
    end;

El envío lo hago usando el HTTPRIO, que no es que me guste pero no sé si hay otra forma de hacerlo (En TicketBAI y VeriFactu uso NetHTTPRequest y NetHTTPClient).

Código:

    try
      // se hace la llamada a la funcion suministrada por el WS
      if ENTORNO_DE_PRUEBAS then
          begin
              HTTPRIO1.WSDLLocation := 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
              HTTPRIO1.Service := 'siiService';
              HTTPRIO1.Port := 'SuministroFactEmitidasPruebas';
              HTTPRIO1.URL := 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          end
          else
          begin
              HTTPRIO1.WSDLLocation := 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
              HTTPRIO1.Service := 'siiService';
              HTTPRIO1.Port := 'SuministroFactEmitidas';
              HTTPRIO1.URL := 'https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
          end;
          result := GetsiiSOAP(false,HTTPRIO1.URL,HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

      //mostrar los resultados devueltos por la llamada
      for i := low(result.RespuestaLinea) to High(result.RespuestaLinea) do
      begin
          with result.RespuestaLinea[i] do
          begin
            //si el estado no es correcto, se muestran los errores
            if EstadoRegistro <> EstadoRegistroType(0) then
            begin
                showmessage('Error ' + InttoStr(CodigoErrorRegistro)+#13#10+DescripcionErrorRegistro);
                error:=DescripcionErrorRegistro;
            end
            else
            begin
                spain.Table1.edit;
                spain.Table1.FieldByName('ID_HACIENDA').AsString:=result.CSV;
                spain.Table1.Post;
            end;
          end;
      end;
    except
      On E:Exception do
        MessageDlg(E.Message, mtError, [mbOK], 0);
    end;

¿Alguien puede decirme si el envío lo está haciendo de la misma manera o si ve algo raro en lo anterior?

He probado también a hacer el envío con el componente NetHTTPClient para ver qué pasa. En ese caso, como respuesta obtengo un código html de una página de la AEAT (eso explica el error si uso HTTPRIO, estoy obteniendo como respuesta una página html en vez de un xml).

¿Puede alguien confirmarme si las URL que estoy usando y la forma de llamar a GetsiiSOAP() es correcta? Algo me dice que el envío está abriendo otra página, o algo similar, y por eso devuelve html y no xml.
La firma del envío la hago en el evento OnNeedCertificate del HTTPRIO. No creo que eso esté mal porque lleva funcionando así siempre.

¿Será que debo usar otro certificado distinto? ¿Hay que darse de alta en algún sitio primero? ¿Puedo usar certificados de prueba? ¿Debe el nombre del emisor coincidir con el nombre en el certificado?

La verdad es que ya no sé qué más probar. Funcionaba todo bien hasta hace unos días (al menos a mi cliente). Y ahora tanto él como yo no podemos enviar al entorno de pruebas.


La franja horaria es GMT +2. Ahora son las 03:45:40.

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