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