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

hotelbeds.com REST API Authentication

See more HTTP Misc Examples

Demonstrates how to calculate the X-Signature header and add to requests sent to api.test.hotelbeds.com.

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.StringBuilder,
  Chilkat.CkDateTime,
  Chilkat.Crypt2;

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

procedure RunDemo;
var
  success: Boolean;
  dt: TCkDateTime;
  bLocalTime: Boolean;
  unixTimeStr: string;
  apiKey: string;
  secret: string;
  sb: TStringBuilder;
  crypt: TCrypt2;
  signature: string;
  http: THttp;
  jsonResponse: string;

begin
  success := False;

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

  //  This example duplicates the following CURL statement provided in the hotelbeds.com "Getting Started"
  //  developer documentation:

  //  #!/bin/bash 
  //  apiKey="yourApiKey"
  //  secret="yourSecret"
  //  curl -i \
  //    -X GET \
  //    -H 'Accept:application/json' \
  //    -H 'Api-key:'$apiKey'' \
  //    -H 'X-Signature:'$(echo -n ${apiKey}${secret}$(date +%s)|sha256sum|awk '{ print $1}')'' \
  //    https://api.test.hotelbeds.com/hotel-api/1.0/status

  //  The "date + %s" command emits a UNIX date/time number such as 1605548842
  //  We need to concatenate the apiKey, secret, and current date/time in UNIX (numeric) time format.
  dt := TCkDateTime.Create;
  dt.SetFromCurrentSystemTime();
  //  Get the UNIX time string in the GMT timezone.
  bLocalTime := False;
  unixTimeStr := dt.GetAsUnixTimeStr(bLocalTime);
  WriteLn(unixTimeStr);

  //  Use your own API key and secret.  (These are not valid values)
  apiKey := '227b20a2cb705e45f3b0a0944672dc07';
  secret := '54dc7ba9e2';

  sb := TStringBuilder.Create;
  sb.Append(apiKey);
  sb.Append(secret);
  sb.Append(unixTimeStr);

  crypt := TCrypt2.Create;
  crypt.HashAlgorithm := 'sha256';
  crypt.EncodingMode := 'hexlower';
  signature := crypt.HashStringENC(sb.GetAsString());

  WriteLn(signature);

  http := THttp.Create;

  http.SetRequestHeader('Accept','application/json');
  http.SetRequestHeader('Api-key',apiKey);
  http.SetRequestHeader('X-Signature',signature);

  jsonResponse := http.QuickGetStr('https://api.test.hotelbeds.com/hotel-api/1.0/status');
  WriteLn(jsonResponse);
  WriteLn(http.LastStatus);

  //  Sample output:  

  //  1605549542
  //  2146aefb36e7331b3b29aafd7638398ca22e689573224f1a71274d60bd201ec2
  //  {"auditData":{"timestamp":"2020-11-16 18:59:02.430"},"status":"OK"}
  //  200


  dt.Free;
  sb.Free;
  crypt.Free;
  http.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.