Ver Mensaje Individual
  #11  
Antiguo 12-01-2025
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 56
Reputación: 22
Toñico Va por buen camino
LROE Bizcaia - Indy HTTP

Hola a todos.

Antes que nada pido disculpas si cometo algún error ya que es mi primer mensaje en este foro.

Necesito vuestra ayuda porque estoy bloqueado.

Estoy intentando enviar a Bizcaia un fichero LROE 240 y para ello estoy utilizando Delphi 10.3 Rio y los componentes Indy HTTP y TIdSSLIOHandlerSocketOpenSSL.

El fichero que estoy enviando es un gzip que contiene el xml según la documentación.

El código que estoy usando es el siguiente:

Código:
Código Delphi [-]
        AHttp                       := TIdHTTP.Create(nil);
        IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
        try
                try
                        IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
                        IdSSLIOHandlerSocketOpenSSL.SSLOptions.CertFile    := FBaiConfiguration.restServer.certificateFile;
                        IdSSLIOHandlerSocketOpenSSL.SSLOptions.KeyFile     := FBaiConfiguration.restServer.certificateFile;
                        IdSSLIOHandlerSocketOpenSSL.OnGetPassword          := GetPasswordEvent;

                        AHttp.IOHandler              := IdSSLIOHandlerSocketOpenSSL;
                        AHttp.ConnectTimeout         := 5000;
                        AHttp.Request.CustomHeaders.Clear;
                        AHttp.Request.CustomHeaders.AddValue('Accept-Encoding',             'gzip');
                        AHttp.Request.CustomHeaders.AddValue('Content-Encoding',            'gzip');
                        AHttp.Request.CustomHeaders.AddValue('Content-Type',                'octet-stream');
                        AHttp.Request.CustomHeaders.AddValue('Content-Length',              IntToStr(RecoverFileSize(TPath.Combine(FWorkFilePath, Format('LROE_240_1_1_%s.gz',[documentData.document_sid])))));
                        AHttp.Request.CustomHeaders.AddValue('eus-bizkaia-n3-version',      '1.0');
                        AHttp.Request.CustomHeaders.AddValue('eus-bizkaia-n3-content-type', 'application/xml');
                        AHttp.Request.CustomHeaders.AddValue('eus-bizkaia-n3-data',         ComposeJSONBizcaiaData); // El Json está construido según la documentación

                        Try
                                requestBody  := TFileStream.Create(TPath.Combine(FWorkFilePath, Format('LROE_240_1_1_%s.gz',[documentData.document_sid])), fmOpenRead);
                                try
                                        try
                                                responseBody := AHttp.Post(FBaiConfiguration.restServer.urlInsertDocument, requestBody);

                                                if AHttp.ResponseCode = 200 then
                                                Begin
              // Si fuera bien, leería la respuesta
                                                        Result := True;
                                                End;
                                        except
                                                on e: EIdHTTPProtocolException do
                                                begin
                                                        Result := False;
                                                        errorMessage := 'Error: Uploading document failed. ' + IntToStr(AHttp.ResponseCode) + ' - ' + AHttp.response.ResponseText;
                                                end;
                                        end;
                                finally
                                        requestBody.Free;
                                end;
                        Except
                                on e: EIdHTTPProtocolException do
                                begin
                                        Result := False;
                                        errorMessage := 'Error: Uploading document failed. ' + IntToStr(AHttp.ResponseCode) + ' - ' + AHttp.response.ResponseText;
                                end;
                        End;

                except
                        on E: Exception do
                        begin
                                Result := False;
                                errorMessage := 'Error: Uploading document TicketBAI failed.';
                        end;
                end;
        finally
                FreeAndNil(AHttp);
                FreeAndNil(IdSSLIOHandlerSocketOpenSSL);
        end;

Me devuelve siempre error 400 - Bad request

Las cabeceras que le paso creo que están bien. Las vuelco a un fichero para ver que envío y muestra lo siguiente:

Accept-Encoding: gzip
Content-Encoding: gzip
Content-Type: octet-stream
Content-Length: 8532
eus-bizkaia-n3-version: 1.0
eus-bizkaia-n3-content-type: application/xml
eus-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":{"nif":"A99800005","nrs":"SOFTWARE GARANTE TICKETBAI PRUEBA"},"drs":{"mode":"240","ejer":"2025"}}

Alguien me puede explicar donde está el problema o algún trozo de código que me pueda ayudar.

Muchas gracias a todos.
Responder Con Cita