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)

razorxxx 15-01-2025 09:09:53

Cita:

Empezado por dannyt (Mensaje 561181)
Hola,

Desde esta mañana me sale el error "Anulada la solicitud: No se puede crear un canal seguro SSL/TLS" en varios clientes/servidores. Le pasa a alguien más? ¿Sabéis que puede ser?

Gracias!

No sé si está relacionado, pero en FACe anunciaron que desde ayer se dejan de soportar los protocolos TLS 1.0 y 1.1. Así que las comunicaciones desde equipos con sistemas operativos antiguos dejarán de funcionar.

keys 15-01-2025 09:15:15

Hace unos días publique lo siguiente, no se si podrá ser por esto.

Cita:

Hola a todos. Por si a alguien le pasa.

Hace unos días publicaron esto https://sede.agenciatributaria.gob.e...ograficos.html. En un principio no pensé que nos afectara.

Pero resulta que si, si el envío al SII lo haces THttprio y capicom, en los ordenadores con windows 7, ha dejado de funcionar, ya que no esta adaptado para esas nuevas políticas de seguridad.

Si pones en el internet explorer de esos equipos la siguiente dirección https://prewww1.aeat.es/wlpl/SSII-FA...iiFactFEV1SOAP que es la de envío de las emitidas sale el siguiente error

Cita:
No se puede mostrar esta página


Activa TLS 1.0, TLS 1.1 y TLS 1.2 desde Configuración avanzada e intenta conectarte en https://prewww1.aeat.es de nuevo. Si el error continúa, es posible que este sitio use un protocolo no compatible o un conjunto de cifrado como RC4 (vínculo para obtener detalles), que no se considere seguro. Ponte en contacto con el administrador del sitio.
En definitiva han habilitado en la aeat el RC4 y los windows 7 no están preparados para esto. Todo esto ha empezado a pasar a partir de ayer.

dannyt 15-01-2025 09:21:32

Cita:

Empezado por keys (Mensaje 561187)
Hace unos días publique lo siguiente, no se si podrá ser por esto.

Si, parece que es eso, tenía algunos servidores con 2012 R2 y han dejado de funcionar, en 2019 y posteriores funciona correctamente.

¡Gracias!

Zento 15-01-2025 22:26:39

Cita:

Empezado por dannyt (Mensaje 561188)
Si, parece que es eso, tenía algunos servidores con 2012 R2 y han dejado de funcionar, en 2019 y posteriores funciona correctamente.

¿Lo has conseguido solucionar en los 2012 R2?

Llevo toda la tarde jugando con valores del registro y con la utilidad IISCrypto a ver si doy con alguna combinación de protocolo y cifrado que permita el uso sin éxito. También he cambiado en mi aplicación el componente THTTPRIO para que sólo use TLS 1.2, pero siempre me devuelve el error 12175 (Error de seguridad) y en el registro de eventos un error de Schannel con el texto Se recibió una alerta irrecuperable desde el extremo remoto. El código de alerta irrecuperable definido del protocolo TLS es: 40., código de error que refiere a la negociación.

APO 17-01-2025 08:22:41

Buenos días,
Desde hace unos días nos está fallando el envío de facturas al SII (y otras operaciones como la identificación fiscal por NIF). El sistema operativo utilizado es Windows Server 2012 R2 y el componente utilizado el HTTPRIO. Lo extraño es que hasta ahora ha funcionado correctamente, y sin tocar nada ha empezado a dar este error:

Error sending data: (12175) Error de seguridad

¿Os habéis encontrado este error alguna vez? ¿Alguna idea?

Muchas gracias.

razorxxx 17-01-2025 09:03:18

Cita:

Empezado por APO (Mensaje 561252)
Buenos días,
Desde hace unos días nos está fallando el envío de facturas al SII (y otras operaciones como la identificación fiscal por NIF). El sistema operativo utilizado es Windows Server 2012 R2 y el componente utilizado el HTTPRIO. Lo extraño es que hasta ahora ha funcionado correctamente, y sin tocar nada ha empezado a dar este error:

Error sending data: (12175) Error de seguridad

¿Os habéis encontrado este error alguna vez? ¿Alguna idea?

Muchas gracias.

Se ha dicho estos días en varios hilos, y la AEAT lo ha estado avisando para varias plataformas (SII, FACe, etc). Los protocolos TLS 1.0 y 1.1 han dejado de estar soportados, por lo que las comunicaciones realizadas desde sistemas operativos antiguos (Windows XP, Vista, 7, Server 2012, etc) han dejado de funcionar. Me temo que vas a tener que buscar otro equipo más moderno desde donde ejecutar tus aplicaciones.

pablog2k 17-01-2025 09:24:03

A nosotros, que teníamos windows 7 en un cliente , y hace un mes con el aviso de un compañero del foro, nos empezó a dar el error, en un principio lo solucionamos reinstalando el certificado, pero desde ayer ni siquiera eso nos ha funcionado. Hemos tenido que hacer una migración express a W10 para que pudiera enviar las facturas, un drama vamos :eek:

razorxxx 17-01-2025 09:43:46

Cita:

Empezado por pablog2k (Mensaje 561256)
A nosotros, que teníamos windows 7 en un cliente , y hace un mes con el aviso de un compañero del foro, nos empezó a dar el error, en un principio lo solucionamos reinstalando el certificado, pero desde ayer ni siquiera eso nos ha funcionado. Hemos tenido que hacer una migración express a W10 para que pudiera enviar las facturas, un drama vamos :eek:

Es un drama, pero más drama es seguir usando sistemas de hace 15 o 20 años. A las empresas les cuesta renovar su parque de equipos, y se quedan perplejos cuando de repente un PC de 15 años deja de funcionar, cuando lo normal es pensar que la vida útil esté entre 6 u 8 años.

YellowStone 17-01-2025 10:19:11

Buenos días:


Nosotros hemos podido migrar (de momento la consulta de NIFS que es lo más sencillo) del componente THTTPRIO al componente TIDHTTP. Con este último componente, y con TIdSSLIOHandlerSocketOpenSSL configurado a TLS 1.2, no sólo hemos podido conectar sin problema, sino que además, nos permite realizar las consultas sin tener instalado CAPICOM. Supongo que mi compañero encargado del SII, realizará próximamente la misma migración de componente para realizar el envío.


Tanto en servidores Windows 2012 cómo en servidores Windows 2008. Supongo que Windows 2007 no debe ser tampoco problema.

keys 17-01-2025 10:27:20

Cita:

Empezado por YellowStone (Mensaje 561263)
Buenos días:


Nosotros hemos podido migrar (de momento la consulta de NIFS que es lo más sencillo) del componente THTTPRIO al componente TIDHTTP. Con este último componente, y con TIdSSLIOHandlerSocketOpenSSL configurado a TLS 1.2, no sólo hemos podido conectar sin problema, sino que además, nos permite realizar las consultas sin tener instalado CAPICOM. Supongo que mi compañero encargado del SII, realizará próximamente la misma migración de componente para realizar el envío.


Tanto en servidores Windows 2012 cómo en servidores Windows 2008. Supongo que Windows 2007 no debe ser tampoco problema.

Perdona. ¿Con que versión de delphi trabajas? En delphi Athens en el componente THttPRIO ya no hace falta utilizar el capicom por que tiene su propio evento para aceptar el certificado como el TIDHTTP

YellowStone 17-01-2025 10:34:07

Cita:

Empezado por keys (Mensaje 561265)
Perdona. ¿Con que versión de delphi trabajas? En delphi Athens en el componente THttPRIO ya no hace falta utilizar el capicom por que tiene su propio evento para aceptar el certificado como el TIDHTTP


Madre mía, Delphi 2007 :D

Anagnostes 22-01-2025 12:33:07

Podrias decir como lo ha migrado a Indy?

La unit SOAPHTTPTrans parece estar preparada usando el define USE_INDY pero tampoco consigo que me funcione.

Anagnostes 23-01-2025 16:31:29

Cita:

Empezado por Zento (Mensaje 561219)
¿Lo has conseguido solucionar en los 2012 R2?

Llevo toda la tarde jugando con valores del registro y con la utilidad IISCrypto a ver si doy con alguna combinación de protocolo y cifrado que permita el uso sin éxito. También he cambiado en mi aplicación el componente THTTPRIO para que sólo use TLS 1.2, pero siempre me devuelve el error 12175 (Error de seguridad) y en el registro de eventos un error de Schannel con el texto Se recibió una alerta irrecuperable desde el extremo remoto. El código de alerta irrecuperable definido del protocolo TLS es: 40., código de error que refiere a la negociación.

Pudiste hacer que funcione con el THTTPRIO original de Delphi cambiando los registros de TLS del servidor?

Veo que también hay los nuevos HTTPRIO de Clevercomponents.com pero se tienen que comprar. No se si vale la pena explorar las demos para ver si con los nuevos componentes funciona en Windows Server 2008 y 2012.

Muchas gracias

razorxxx 23-01-2025 16:39:30

Cita:

Empezado por Anagnostes (Mensaje 561389)
Pudiste hacer que funcione con el THTTPRIO original de Delphi cambiando los registros de TLS del servidor?

Veo que también hay los nuevos HTTPRIO de Clevercomponents.com pero se tienen que comprar. No se si vale la pena explorar las demos para ver si con los nuevos componentes funciona en Windows Server 2008 y 2012.

Muchas gracias

Creo que el problema lo tienes del lado del sistema operativo. Si el SO no soporta TLS 1.2 o 1.3 estás vendido. Hay algunos trucos que circulan por internet para habilitarlos en SO antiguos, pero no sé si funcionan o si son de fiar.

Anagnostes 23-01-2025 16:46:47

Si ya se lo del SO. Pero segun veo se puede activar, por ejemplo des de support.microsoft.com/es-es/topic/actualizar-para-habilitar-tls-1-1-y-tls-1-2-como-protocolos-seguros-predeterminados-en-winhttp-en-windows-c4bd73d2-31d7-761e-0178-11268bb10392 indican como habilitarlo en SO antiguos. Queria saber si alguien lo ha provado antes y le ha funcionado.

Me parece dificil de entender que de un dia por otro no podamos hacer llamadas a AEAT des de Servidores porque tienen Windows Server 2008 o 2012. Ya se que tienen años pero seguimos teniendo clientes con estos SO.

YellowStone 23-01-2025 17:43:06

Este código de DELPHI 2007 Funciona en 2008 Y 2012 en la consulta de NIFS, sin IISCrypto ni tocar el registro. (Y no necesita CAPICOM)

Código PHP:

unit VNifV2;

interface

uses WindowsDialogsSysUtilsMessagesClassesxmldomXMLDocXMLIntfDateUtilsStrUtilsIdHTTPIdSSLOpenSSL;

type

  
Forward Decls }

  
IXMLContribuyenteType = interface;

IXMLContribuyenteType }

  
IXMLContribuyenteType = interface(IXMLNode)
    [
'{501E2A2E-11EB-42A7-A9D1-D1D7FA481B5B}']
    { 
Property Accessors }
    function 
Get_NifWideString;
    function 
Get_NombreWideString;
    function 
Get_ResultadoWideString;
    
procedure Set_Nif(ValueWideString);
    
procedure Set_Nombre(ValueWideString);
    
procedure Set_Resultado(ValueWideString);
    { 
Methods Properties }
    
property NifWideString read Get_Nif write Set_Nif;
    
property NombreWideString read Get_Nombre write Set_Nombre;
    
property ResultadoWideString read Get_Resultado write Set_Resultado;
  
end;

Forward Decls }

  
TXMLContribuyenteType = class;

TXMLContribuyenteType }

  
TXMLContribuyenteType = class(TXMLNodeIXMLContribuyenteType)
  protected
    { 
IXMLContribuyenteType }
    function 
Get_NifWideString;
    function 
Get_NombreWideString;
    function 
Get_ResultadoWideString;
    
procedure Set_Nif(ValueWideString);
    
procedure Set_Nombre(ValueWideString);
    
procedure Set_Resultado(ValueWideString);
  
end;

  
TGetCertificado = class(Tobject)
  
procedure hServidorGetPassword(var Passwordstring);
  
end;

{ Global 
Functions }

function 
GetContribuyente(DocIXMLDocument): IXMLContribuyenteType;
function 
NewContribuyenteIXMLContribuyenteType;
function 
VerificaNIFAEAT(var nifstring; var nombrestring): boolean// versión indy
function LimpiaRespuesta(respuestastring): string;

const

  
TargetNamespace '';

implementation

var rDatosEmisorTDatosEmisor;
    
bCertificadoboolean;

{ Global 
Functions }

function 
GetContribuyente(DocIXMLDocument): IXMLContribuyenteType;
begin
  Result 
:= Doc.GetDocBinding('Contribuyente'TXMLContribuyenteTypeTargetNamespace) as IXMLContribuyenteType;
end;

function 
NewContribuyenteIXMLContribuyenteType;
begin
  Result 
:= NewXMLDocument.GetDocBinding('Contribuyente'TXMLContribuyenteTypeTargetNamespace) as IXMLContribuyenteType;
end;

TXMLContribuyenteType }

function 
TXMLContribuyenteType.Get_NifWideString;
begin
  Result 
:= ChildNodes['Nif'].Text;
end;

procedure TXMLContribuyenteType.Set_Nif(ValueWideString);
begin
  ChildNodes
['Nif'].NodeValue := Value;
end;

function 
TXMLContribuyenteType.Get_NombreWideString;
begin
  Result 
:= ChildNodes['Nombre'].Text;
end;

procedure TXMLContribuyenteType.Set_Nombre(ValueWideString);
begin
  ChildNodes
['Nombre'].NodeValue := Value;
end;

function 
TXMLContribuyenteType.Get_ResultadoWideString;
begin
  Result 
:= ChildNodes['Resultado'].Text;
end;

procedure TXMLContribuyenteType.Set_Resultado(ValueWideString);
begin
  ChildNodes
['Resultado'].NodeValue := Value;
end;

//Versión Indy
function VerificaNIFAEAT(var nifstring; var nombrestring): boolean;
var 
RespuestaTStringList;
    
ixmlDocIXMLDocument;
    
hServidorTIdHTTP;
    
LHandlerTIdSSLIOHandlerSocketOpenSSL;
    
stRequestTStringStream;
    
sXMLsURLstring;
    
salidaIXMLContribuyenteType;
    
rGetCertificadoTGetCertificado;
begin
  
// Creamos la petición para comprobar
  
salida := NewContribuyente;
  
result := false;
  
Respuesta := TStringList.Create();
  
hServidor := TIdHTTP.Create(nil);
  
rGetCertificado := TGetCertificado.Create;
  try
    try
      
sURL := 'https://www1.agenciatributaria.gob.es/wlpl/BURT-JDIT/ws/VNifV2SOAP';
      
sXML := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '+
              
'xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">';
      
sXML := sXML '<soapenv:Body><vnif:VNifV2Ent><vnif:Contribuyente><vnif:Nif>'+Trim(nif)+'</vnif:Nif>';
      
sXML := sXML '<vnif:Nombre>'+Trim(nombre)+'</vnif:Nombre></vnif:Contribuyente></vnif:VNifV2Ent></soapenv:Body></soapenv:Envelope>';

      
stRequest := TStringStream.Create(Utf8Encode(sXML));

      
hServidor.Request.CustomHeaders.AddValue('Accept''*/*');
      
hServidor.Request.CustomHeaders.AddValue('Accept-Encoding''gzip, deflate');
      
hServidor.Request.CustomHeaders.AddValue('Content-Type''text/xml; charset=utf-8');
      
hServidor.Request.CustomHeaders.AddValue('Connection''keep-alive');
      
hServidor.Request.CustomHeaders.AddValue('User-Agent''gVisualRec (Language=Delphi/2007)');
      
hServidor.Request.CustomHeaders.AddValue('SOAPAction''VNifV2Service');

      
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
      
LHandler.sslOptions.Method := sslvTLSv1_2;
      
LHandler.sslOptions.SSLVersions := [sslvTLSv1_2];
      
LHandler.SSLOptions.CertFile := 'CERTIFICADO.PFX'//<<<--- Nombre del certificado PFX / P12
      
LHandler.SSLOptions.KeyFile := 'CERTIFICADO.PFX';  //<<<--- Nombre del certificado PFX / P12  // Certificado de dispositivo a usar (el mismo que certfile)
      
LHandler.OnGetPassword := rGetCertificado.hServidorGetPassword;    // Cuando se solicite la clave, el evento se encarga de aportarla
      
hServidor.IOHandler := LHandler;

      
Respuesta.Append(hServidor.Post(Trim(sURL), stRequest));

      if 
hServidor.ResponseCode 200 then
        begin
              Respuesta
.Text := LimpiaRespuesta(Respuesta.Text);
              
ixmlDoc := TXMLDocument.Create(nil);
              
ixmlDoc.XML.Add(Respuesta.Text);
              
ixmlDoc.Active := True;
              
ixmlDoc.Encoding := 'UTF-8';
              try
                
salida := GetContribuyente(ixmlDoc);
                
result := ((salida.Resultado 'IDENTIFICADO') and (salida.Nif Nif));
                if 
result then
                  begin
                    Nif 
:= salida.Nif;
                    
Nombre := salida.Nombre;
                  
end
                
else
                  
begin
                    Nif 
:= '';
                    
Nombre := '';
                  
end;
              
except
                on E
:Exception do
                  
begin
                    ShowMessage
(E.Message);
                    
Nif := '';
                    
Nombre := '';
                  
end;
              
end;
        
end
      
else
        
begin
          Nif 
:= '';
          
Nombre := '';
        
end;
    
except
      on e
exception do
        
begin
          ShowMessage
(e.message);
          
Nif := '';
          
Nombre := '';
        
end
    end
;
  
finally
    Respuesta
.Free;
    
stRequest.Free;
    
hServidor.Free;
  
end;
end;

function 
LimpiaRespuesta(respuestastring): string;
var 
iIniiLoninteger;
begin
  result 
:= StringReplace(respuesta'
'
'', [rfReplaceAll]);
  
result := StringReplace(result'&lt;''<', [rfReplaceAll]);
  
result := StringReplace(result'&gt;''>', [rfReplaceAll]);
  
iIni := Pos('<VNifV2Sal:Contribuyente'result);
  
iLon := Pos('</VNifV2Sal:Contribuyente>'result) +26 iIni;
  
result := Copy(resultiIniiLon);
  
result := StringReplace(result'VNifV2Sal:''', [rfReplaceAll]);
end;

procedure TGetCertificado.hServidorGetPassword(var Passwordstring);
begin
  Password 
:= Clave// Password del certificado pfx
end;

end


Anagnostes 23-01-2025 19:30:37

Perfecto, pues ya me funciona a mi tambien. Lo dejo aqui para si a alguien le sirve.

Al final lo que he hecho es copiar todas las units de "C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\source\Win32\soap" a una carpeta dentro del proyecto. Compilar el proyecto con los defines de USE_INDY y INDY_CUSTOM_IOHANDLER, para que el THTTPRIO use Indy al hacer el post.

Luego configurar el TIdSSLIOHandlerSocketOpenSSL tal y como comenta YellowStone y pasarselo al HTTPRIO asi:

HTTPRIO1.HTTPWebNode.IOHandler := IdSSLIOHandlerSocketOpenSSL1;

Ahora voy a pulir el codigo, pero recibo una respuesta ya de AEAT en formato SOAP.

Gracias a todos

Ramon88 23-01-2025 19:31:15

Hola!
Voy a ponerme con las pruebas de SII...
No encuentro información clara, no sé si alguien podría decirme si en alguna página esta todo o donde puedo encontrarlo...
Endpoint, XML de ejemplo, documentos con los esquemas...

Llevo un ratito pegándome en esta web: https://sede.agenciatributaria.gob.e...icios-web.html
Pero no encuentro lo que comento...

Veo que necesito certificado de prueba, o eso me dice ChatGPT... sabéis de donde puedo sacarlo?

Anagnostes 24-01-2025 09:32:41

Justo la web que comentas es la web oficial donde està todo. De hecho todos los puntos que pones que no encuentras estan alli:

Endpoint -> WSDL de los servicios web
XML -> Descripción del servicio web ( en el pdf )
documentos con los esquemas -> Esquemas

Certificado es con el tuyo de FNMT o del que hace las presentaciones. No recuerdo mucho en el caso del SII pero todos los servicios de AEAT tienen un EndPoint de pruebas.

APO 30-01-2025 13:21:59

En un ordenador con W10 Pro y Framework 4.8 también nos sigue dando el mismo error:

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

También hemos agregado la entrada TLS 1.2 en el registro, pero no hay manera.
¿Os ha pasado con algún W10?

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 22:30:05.

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