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

Mastercard ICCP Get Data Source with OAuth1

See more Mastercard Examples

Demonstrates OAuth1 authentication with the Mastercard SOAP API's. This example sends a POST to the sandbox endpoint for the "In Control for Commercial Payments" (ICCP) API.

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.Pfx,
  Chilkat.PrivateKey,
  Chilkat.HttpResponse,
  Chilkat.Xml,
  Chilkat.Http;

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

procedure RunDemo;
var
  success: Boolean;
  xml: TXml;
  pfx: TPfx;
  privKey: TPrivateKey;
  http: THttp;
  resp: THttpResponse;
  respXml: TXml;

begin
  success := False;

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

  //  --------------------------------------------------------------------------------
  //  Also see Chilkat's Online WSDL Code Generator
  //  to generate code and SOAP Request and Response XML for each operation in a WSDL.
  //  --------------------------------------------------------------------------------

  //  First build the XML body of the SOAP request:

  //      <soapenv:Envelope
  //  	    xmlns:ser="http://mastercard.com/sd/pc/service"
  //  	    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  //  	    <soapenv:Header>
  //  	    </soapenv:Header>
  //  	    <soapenv:Body>
  //  		    <ser:getDataSourcesRequest></ser:getDataSourcesRequest>
  //  	    </soapenv:Body>
  //      </soapenv:Envelope>

  //  Use this online tool to generate code from sample XML: 
  //  Generate Code to Create XML

  xml := TXml.Create;
  xml.Tag := 'soapenv:Envelope';
  xml.AddAttribute('xmlns:ser','http://mastercard.com/sd/pc/service');
  xml.AddAttribute('xmlns:soapenv','http://schemas.xmlsoap.org/soap/envelope/');
  xml.UpdateChildContent('soapenv:Header','');
  xml.UpdateChildContent('soapenv:Body|ser:getDataSourcesRequest','');

  //  We'll need to get our signing RSA key from the PFX (provided by Mastercard)
  pfx := TPfx.Create;
  success := pfx.LoadPfxFile('qa_data/pfx/MCD_Sandbox_chilkat_iccp_API_Keys/chilkat_iccp-sandbox.p12','keystorepassword');
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  privKey := TPrivateKey.Create;
  success := pfx.PrivateKeyAt(0,privKey);
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  http := THttp.Create;

  http.OAuth1 := True;
  //  Use your own consumer key (this is not a valid consumer key)
  http.OAuthConsumerKey := 'MLBRl0-xxxxxxxxxxxxxxxxxxxxxxxxxx_BUNtu5xxxxx20b!a075a714a5fxxxxxxxxxxxxx59cd02b60000000000000000';
  http.OAuthSigMethod := 'RSA-SHA256';
  success := http.SetOAuthRsaKey(privKey);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Tell Chilkat to automatically calculate and add the oauth_body_hash field when sending the request.
  http.OAuthBodyHash := True;

  //  Send the SOAP XML request and get the response.
  //  Chilkat automaticaly adds the OAuth1 authentication.
  resp := THttpResponse.Create;
  success := http.HttpStr('POST','https://sandbox.api.mastercard.com/iccp/financial',xml.GetXml(),'utf-8','application/xml',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Examine the response status code and the XML response body.
  WriteLn('Response status code = ' + resp.StatusCode);

  respXml := TXml.Create;
  resp.GetBodyXml(respXml);

  WriteLn('Response XML:');
  WriteLn(respXml.GetXml());

  //  If desired, use this online tool to generate parsing code from response XML.
  //  (Run your code once to get a representative sample response, and then generate the parsing code.)
  //  Generate Parsing Code from XML


  xml.Free;
  pfx.Free;
  privKey.Free;
  http.Free;
  resp.Free;
  respXml.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.