implementation
uses
REST.Client, REST.Types, Soap.EncdDecd, IPPeerClient;
{$R *.dfm}
procedure TForm1.btnBearerClick(Sender: TObject);
var
sClientID, sClientSecret, sAccessToken, sOdpoved: string;
rClient: TRESTClient;
rRequest: TRESTRequest;
rResponse: TRESTResponse;
par: TRESTRequestParameter;
begin
sOdpoved := '';
sClientID := 'xxxxxxxxx';
sClientSecret := 'xxxxxxxxx';
rClient := TRESTClient.Create('https://xxxxx/api/');
try
rClient.Accept := 'application/json';
rClient.ContentType := 'application/x-www-form-urlencoded';
rRequest := TRESTRequest.Create(rClient);
try
rResponse := TRESTResponse.Create(rClient);
try
try
rRequest.Client := rClient;
rRequest.Response := rResponse;
rRequest.Method := rmPOST;
rRequest.Resource := 'oauth2/token';
rRequest.Accept := 'application/json';
rRequest.Params.AddItem('Accept','application/json', pkHTTPHEADER,[poDoNotEncode]);
rRequest.Params.AddItem('Content-Type','application/x-www-form-urlencoded', pkHTTPHEADER,[poDoNotEncode]);
rRequest.Params.AddItem('Authorization', 'Basic '+Soap.EncdDecd.EncodeString(sClientID+':'+sClientSecret), pkHTTPHEADER,[poDoNotEncode]);
rRequest.Params.AddItem('scope', 'payment-create', pkGETorPOST,[poDoNotEncode]);
rRequest.Params.AddItem('grant_type', 'client_credentials', pkGETorPOST,[poDoNotEncode]);
mLog.Lines.Add('Params:');
for par in rRequest.Params do
mLog.Lines.Add(par.ToString);
rRequest.Execute;
mLog.Lines.Add('konec execute');
mLog.Lines.Add(Format('TotalExecutionTime %d', [rRequest.ExecutionPerformance.TotalExecutionTime]));
mLog.Lines.Add(Format('HTTP status %d %s',[rResponse.StatusCode, rResponse.StatusText]));
case rResponse.StatusCode of
200:
begin
mLog.Lines.Add('Odpoved zpracovana');
if rResponse.GetSimpleValue('access_token', sAccessToken) then
mLog.Lines.Add('access_token: '+sAccessToken);
if rResponse.GetSimpleValue('expires_in', sAccessToken) then
mLog.Lines.Add('expires_in: '+sAccessToken);
end;
400:
begin
sOdpoved := '400 - Spatny pozadavek';
end;
401:
begin
sOdpoved := '401 - Chyba ve zpracovani na strane serveru';
end;
else
begin
sOdpoved := 'Neznama odpoved: '+ Format('HTTP status %d %s',[rResponse.StatusCode, rResponse.StatusText]);
end;
end; // case
except on E: Exception do
begin
sOdpoved := 'Chyba: '+E.Message;
end;
end;
if sOdpoved <> '' then
begin
mLog.Lines.Add(sOdpoved);
end;
finally
rResponse.Free;
end;
finally
rRequest.Free;
end;
finally
rClient.Free;
end;
end;