Ver Mensaje Individual
  #310  
Antiguo 20-10-2020
juramisa juramisa is offline
Miembro
 
Registrado: abr 2007
Posts: 54
Reputación: 18
juramisa Va por buen camino
Petición al servicio

Buenas tardes,

Os pido ayuda para el envío del fichero LROE, siempre me da error desconocido.
Estoy usando los componente TNetHTTPRequest y TNetHTTPClient, pero si alguien me da otra opción más sencilla y que funcione, estoy dispuesto a cambiar.

Os expongo el código a ver si alguien puede ayudarme, que hago mal.

en TNetHTTPClient cargo el cerificado:

Código Delphi [-]
procedure TfrmEnvelm.NetHTTPClient1NeedClientCertificate(const Sender: TObject; const ARequest: TURLRequest; const ACertificateList: TCertificateList; var AnIndex: Integer);
var
  i: Integer;
begin
  for i := 0 to ACertificateList.Count - 1 do
  begin

    if SameText(ACertificateList[i].Subject, mi_certificado.Caption) then
    begin
      AnIndex := i;
      break;
    end;
  end;
end;

Genero el fichero XML y lo comprimo en formato gzip.

Código Delphi [-]
    

function TfrmEnvelm.f_cabecera_LROE(mi_con, mi_apa, mi_nif, mi_nrs, mi_ap1, mi_ap2, mi_mode, mi_eje : string): string;
begin
  result := Format('{"con": "%s", "apa": "%s", "inte": {"nif": "%s","nrs": "%s","ap1": "%s","ap2": "%s"},"drs": {"mode": "%s","ejer": "%s"}}', [mi_con, mi_apa, mi_nif, mi_nrs, mi_ap1, mi_ap2, mi_mode, mi_eje]);
end;


var
  Src, Dst: TFileStream;
  ResponseContent: TMemoryStream;
  Encoding: TEncoding;
  ss: TStringStream;
....
    SaveAsUTF8(DMBatu.CDSEnvc.FieldByName('EN050').AsString, el_xml.XML);
    Src := TFileStream.Create(DMBatu.CDSEnvc.FieldByName('EN050').AsString, fmOpenRead);
    try
      Dst := TFileStream.Create(DMBatu.CDSEnvc.FieldByName('EN050').AsString + '.gz', fmCreate);
      try
        MakeGZ(Src, Dst);
      finally
        Dst.Free;
      end;
    finally
      Src.Free;
    end;

Cargo cabecera y cuerpo de https, y realizo la llamada.

Código Delphi [-]
   
      if FileExists(DMBatu.CDSEnvc.FieldByName('EN050').AsString + '.gz') then
      begin
        NetHTTPRequest1.CustomHeaders['Accept-Encoding'] := el_accept_Encoding;
        NetHTTPRequest1.CustomHeaders['Content-Encoding'] := el_Content_Encoding;
        NetHTTPRequest1.CustomHeaders['Content-Type'] := el_Content_Type;
        NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-version'] := el_eus_bizkaia_n3_version;
        NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-content-type'] := el_eus_bizkaia_n3_content_type;
        el_eus_bizkaia_n3_data :=  f_cabecera_LROE(el_concepto,
                                                   el_subcapitulo,
                                                   DMBatu.CDSPres.FieldByName('PR020').AsString,
                                                   DMBatu.CDSPres.FieldByName('PR040').AsString,
                                                   DMBatu.CDSPres.FieldByName('PR090').AsString,
                                                   DMBatu.CDSPres.FieldByName('PR100').AsString,
                                                   DMBatu.CDSPres.FieldByName('PR080').AsString,
                                                   txtEjer.Text);
        NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-data'] := el_eus_bizkaia_n3_data;
        ss := TStringStream.Create('', TEncoding.UTF8);
        ss.Position := 0;
        ss.LoadFromFile(DMBatu.CDSEnvc.FieldByName('EN050').AsString + '.gz');

        NetHTTPRequest1.MethodString := 'POST';
        Memo1.Text := NetHTTPClient1.Post(la_url, ss).ContentAsString(tencoding.UTF8);

Las variables siguientes, se leen de un fichero de configuración:

Código Delphi [-]
    la_url := 'https://sarrerak.bizkaia.eus/aurkezpena';
    el_accept_Encoding := 'gzip';
    el_Content_Encoding := 'gzip';
    el_Content_Type := 'application/octet-stream';
    el_eus_bizkaia_n3_version := '1.0';
    el_eus_bizkaia_n3_content_type := 'application/xml';
    el_Concepto := 'LROE';
   el_subcapitulo := '1.1';
Tengo dudas si el cuerpo debe de estar en hexadecimal.

Estoy abierto a todo, ya no se por donde seguir,
Gracias
Responder Con Cita