A ver, yo sigo con el tema de comprobación del servicio soap esté activo o no. Soy cabezón por naturaleza
He estado probando con el tema de consulta vacia a la AEAT, pero me da errores "Consultando a la AEAT" y la verdad, tampoco he conseguido averiguar el motivo, ya que la consulta esta calcada de la que se realiza en la pantalla de consultas que funciona a la perfección.
Si la comprobación la realizo solo al entrar en la aplicación, tengo el inconveniente que si la aplicación no se cierra y el servicio deja de estar activo y se emite una o varias facturas, ya tenemos el lio montado.
Si la comprobación la realizo antes de realizar un envío, se va a poner a realizar consulta tras consulta hasta que detecte que el servicio está activo y la envie.
Todo ello desconociendo si hay algún limite de consultas, o si la operación de consultas continuadas puede desembocar en algún tipo de baneo por parte de mis amigos de la AEAT.
Entonces basandome en que la URL del EndPoint de mis amigos del fisco responde con una redirección, eso debiera bastar para indicar que está activo ya que si no se encuentra activo, no debiera de haber respuesta con esa redirección. Entonces con la siguiente función trato de hacer esa comprobación que activaría o desactivaría un flag y la imagen correspondiente en el StatusBar para que el usuario sea consciente en todo momento de como está el patio. La he probado con
https://prewww1.aeat.es/wlpl/TIKE-CO.../VerifactuSOAP y con
https://prewww1.aeat.es/wlpl/TIKE-CO...factuSOAP?wsdl y aparentemente cumple su función.
Código Delphi
[-]
Function VerificarServicioSOAP(URL:String): Boolean;
var
HTTP: TIdHTTP;
SSLIO: TIdSSLIOHandlerSocketOpenSSL;
begin
result := false;
HTTP := TIdHTTP.Create(nil);
SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
try
try
SSLIO.SSLOptions.Method := sslvTLSv1_2;
SSLIO.SSLOptions.Mode := sslmClient;
HTTP.IOHandler := SSLIO;
HTTP.Head(URL);
result := true;
except
on E: EIdHTTPProtocolException do
begin
if (E.ErrorCode = 302) then begin
result := True;
end else begin
result := False;
end;
end;
on E: Exception do
end;
finally
HTTP.Free;
end;
end;
No se si estoy en un error. A ver que os parece y me alegraría que fuera válido.
Un saludo,