Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Aruba Fatturazione Elettronica Get Zip by Filename

See more Aruba Fatturazione Examples

Returns an invoice with all of its notifications in Zip format (e.g. IT01879020517_abcde.xml.p7m).

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.BinData,
  Chilkat.ZipEntry,
  Chilkat.Zip,
  Chilkat.Crypt2;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  bdZip: TBinData;
  respStatusCode: Integer;
  zip: TZip;
  numUnzipped: Integer;
  entry: TZipEntry;
  bdP7m: TBinData;
  crypt: TCrypt2;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  Implements the following CURL command:

  //  curl -X GET https://ws.fatturazioneelettronica.aruba.it/services/invoice/in/getZipByFilename?filename=IT01879020517_jtlk1.xml.p7m \
  //    -H "Accept: application/json" \
  //    -H "Authorization: Bearer NLOGDVXLVaF3tzmnVPkTwpkuh7dG0i09uSCcog3u+rE="

  //  Use the following online tool to generate HTTP code from a CURL command
  //  Convert a cURL Command to HTTP Source Code

  //  Adds the "Authorization: Bearer NLOGDVXLVaF3tzmnVPkTwpkuh7dG0i09uSCcog3u+rE=" header.
  http.AuthToken := 'NLOGDVXLVaF3tzmnVPkTwpkuh7dG0i09uSCcog3u+rE=';
  http.SetRequestHeader('Accept','application/json');

  bdZip := TBinData.Create;
  success := http.QuickGetBd('https://ws.fatturazioneelettronica.aruba.it/services/invoice/in/getZipByFilename?filename=IT01879020517_jtlk1.xml.p7m',bdZip);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  respStatusCode := http.LastStatus;
  WriteLn('response status code = ' + respStatusCode);

  if (respStatusCode <> 200) then
    begin
      //  If it failed, the response body will not contain the .zip file data.
      //  It will likely contain an error message.
      WriteLn(bdZip.GetString('utf-8'));
      WriteLn('Failed.');
      Exit;
    end;

  //  Open the zip and extract the .p7m
  zip := TZip.Create;

  success := zip.OpenBd(bdZip);
  if (success = False) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  //  If desired, we can unzip to the filesystem..
  numUnzipped := zip.Unzip('c:/mySignedInvoices');
  if (numUnzipped < 0) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  //  Alternatively, we can unzip into memory..
  entry := TZipEntry.Create;
  success := zip.EntryAt(0,entry);
  if (success = False) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  bdP7m := TBinData.Create;
  success := entry.UnzipToBd(bdP7m);
  if (success = False) then
    begin
      WriteLn(entry.LastErrorText);
      Exit;
    end;

  //  Verify the signature and extract the XML from the p7m
  //  If the signature verification is successful, the contents of bdP7m are unwrapped and what
  //  remains is the original signed document..
  crypt := TCrypt2.Create;
  success := crypt.OpaqueVerifyBd(bdP7m);
  if (success = False) then
    begin
      WriteLn(crypt.LastErrorText);
      Exit;
    end;

  WriteLn('The signature was verified.');

  //  The bdp7m now contains the XML that was originally signed.
  WriteLn('Original XML:');
  WriteLn(bdP7m.GetString('utf-8'));


  http.Free;
  bdZip.Free;
  zip.Free;
  entry.Free;
  bdP7m.Free;
  crypt.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.