Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
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)
Responder Con Cita
  #2  
Antiguo 06-03-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
Cita:
Empezado por espinete Ver Mensaje
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.
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 07-03-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Cita:
Empezado por newtron Ver Mensaje
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.
Responder Con Cita
  #4  
Antiguo 07-03-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
Cita:
Empezado por espinete Ver Mensaje
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.
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 07-03-2025
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 193
Poder: 14
elcharlie Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
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
Responder Con Cita
  #6  
Antiguo 07-03-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Cita:
Empezado por elcharlie Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 07-03-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
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.
Responder Con Cita
  #8  
Antiguo 07-03-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
Cita:
Empezado por espinete Ver Mensaje
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.

Pues con más razón compañero, haz lo que te digo y prueba en una máquina con W10 a ver si W11 va a tener algún tipo de configuración especial con los nuevos protocolos de seguridad de la aeat.


Saludos.
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 07-03-2025
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.235
Poder: 24
keys Va por buen camino
En windows 11 funciona correctamente. Lo único que te puedo decir es que pases un pequeño proyecto sólo con el envío de una factura y te lo puedo probar.
Responder Con Cita
  #10  
Antiguo 07-03-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Cita:
Empezado por keys Ver Mensaje
En windows 11 funciona correctamente. Lo único que te puedo decir es que pases un pequeño proyecto sólo con el envío de una factura y te lo puedo probar.
Gracias, keys. He creado un mini-proyecto de prueba. Lo he simplificado al máximo, pero se puede ver el funcionamiento básico para generar el XML y hacer el envío.
He incluido también el archivo .pas que se genera al importar el wsdl.

Los datos del emisor, cliente, etc. son ficticios en este proyecto (en mis pruebas uso NIFs y nombres reales).

Lo de asignar certificado tendrías que completarlo tu si quieres compilar y probar el código, pero no creo que haga falta porque tampoco tiene mucha ciencia el proceso de firmar el envío.
Yo me he asegurado de que el certificado que uso para el envío es el correcto (mostrando en pantalla el nombre del certificado que se asigna al HTTPRIO en el momento de hacer anIndex := xxxx).

Total, que espero que puedas decirme si tienes algo diferente.

Me da rabia porque viendo los primeros mensajes del foro, hay mensajes míos de 2019 en el que conseguí enviar facturas sin problema con el mismo proyecto.
Pero más rabia me da saber que hasta hace 1 semana mi cliente podía enviar sin problemas sin haber tocado nada

OJO, probando ESTE mini proyecto, ahora PUEDO ENVIAR FACTURAS.

Ahora sí que no entiendo nada. He copiado/pegado el código y los componentes de un proyecto a otro.
Archivos Adjuntos
Tipo de Archivo: zip sii-project.zip (126,1 KB, 14 visitas)

Última edición por espinete fecha: 07-03-2025 a las 14:48:17.
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
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4530 Hace 1 Semana 14:09:59
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 01:48:56.


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