Buenos días
Os presento una alternativa a NetHttpClient, quien tiene los componentes de SecureBlackBox 2020 DE.
Código Delphi
[-]var
CertificateStorage: TsbxCertificateStorage;
cert : TsbxCertificate;
otros_parametros : string;
encontrado : Boolean;
Cuerpo_Mensaje : TFileStream;
Entry: TSBxArchivedFile;
procedure....
Cuerpo_Mensaje := TFileStream.Create(FicheroComprimido, fmOpenRead);
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, IntToStr(ejercicio_presentacion.Value));
sbxHTTPClient1.TLSSettings.AutoValidateCertificates := True;
CertificateStorage := TsbxCertificateStorage.Create(nil);
if CertificateStorage.Opened then
CertificateStorage.Close(True);
CertificateStorage.Open('system://currentuser@localhost/?store=MY');
encontrado := False;
sbxHTTPClient1.ClientChain.Clear;
for i := 0 to CertificateStorage.Certificates.Count - 1 do
begin
cert := CertificateStorage.Certificates[i];
if bintostr(Cert.SerialNumber) = mi_certificadoID.Caption then
begin
sbxHTTPClient1.ClientChain.Add(cert);
encontrado := True;
end;
end;
if not encontrado then
begin
Application.MessageBox('Firma no encontrada',
'Proceso de firma', MB_OK + MB_ICONWARNING
+ MB_DEFBUTTON2);
Exit;
end;
sbxHTTPClient1.RequestParameters.ContentType := el_Content_Type;
otros_parametros := 'Accept-Encoding: ' + el_accept_Encoding + #13#10
+ 'Content-Encoding: ' + el_Content_Encoding + #13#10
+ 'eus-bizkaia-n3-version: ' + el_eus_bizkaia_n3_version + #13#10
+ 'eus-bizkaia-n3-content-type: ' + el_eus_bizkaia_n3_content_type + #13#10
+ 'eus-bizkaia-n3-data: ' + el_eus_bizkaia_n3_data ;
sbxHTTPClient1.RequestParameters.CustomHeaders := otros_parametros;
case rg_Entorno.ItemIndex of
0: sbxHTTPClient1.PostStream(la_url_pruebas, Cuerpo_Mensaje);
1: sbxHTTPClient1.PostStream(la_url, Cuerpo_Mensaje);
end;
FicheroRespuesta := DMBatu.CDSEnvc.FieldByName('EN070').AsString +'.gz';
GuardarRespuesta(FicheroRespuesta,sbxHTTPClient1.OutputBytes);
if sbxArchiveReader1.Opened then
sbxArchiveReader1.Close;
sbxArchiveReader1.Open(Integer(aftGzip), FicheroRespuesta);
for i := 0 to sbxArchiveReader1.Files.Count - 1 do
begin
Entry := sbxArchiveReader1.Files[i];
sbxArchiveReader1.Extract(Entry.Path, ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString), false);
Application.ProcessMessages;
RenameFile(ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString) + Entry.Path, DMBatu.CDSEnvc.FieldByName('EN070').AsString);
Application.ProcessMessages;
end;
XMLDocument1 := TXMLDocument.Create(nil);
XMLDocument1.Active := False;
XMLDocument1.XML.Clear;
XMLDocument1.LoadFromFile(DMBatu.CDSEnvc.FieldByName('EN070').AsString);
XMLDocument1.Active := True;
.......
procedure GuardarRespuesta(const Fichero: String; Respuesta: TBytes);
var
stream: TBytesStream;
begin
stream := TBytesStream.Create(Respuesta);
try
stream.SaveToFile(Fichero);
finally
stream.Free;
end;
end;