|
|
|
procedure THeaderFooterwithNavigation.OnNavCompleted(Sender: TObject; |
|
var Params: TTMSFNCCustomWebBrowserNavigateCompleteParams); |
|
var |
|
s, Encoded, accessToken: string; |
|
Base64: TBase64Encoding; |
|
uri: TUri; |
|
begin |
|
{ TODO: On load complete, extract code for https://localhost callback } |
|
Memo1.Lines.Add(Params.URL); |
|
|
|
if Params.URL.Contains('http://localhost/?code=') then |
|
begin |
|
|
|
TMSFNCWebBrowser1.StopLoading; |
|
uri := TUri.Create(Params.URL); |
|
Memo1.Lines.Add(uri.ParameterByName['code']); |
|
|
|
Memo1.Lines.Add('Extract code'); |
|
s := '<YOUR_CLIENT_ID_FITBIT>' + ':' + '<YOUR_CLIENT_SECRET_FITBIT>'; |
|
Base64 := TBase64Encoding.Create(0); |
|
Encoded := Base64.Encode(s); |
|
Memo1.Lines.Add('Basic ' + Encoded); |
|
|
|
|
|
RESTClient1.BaseURL := 'https://api.fitbit.com/oauth2/token'; |
|
RESTRequest1.Params.Clear; |
|
RESTRequest1.AddParameter('Authorization', 'Basic ' + Encoded, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]); |
|
|
|
RESTRequest1.Params.AddItem('client_id', '<YOUR_CLIENT_ID_FITBIT>', TRESTRequestParameterKind.pkQUERY); |
|
RESTRequest1.Params.AddItem('client_secret', '<YOUR_CLIENT_SECRET_FITBIT>', TRESTRequestParameterKind.pkQUERY); |
|
RESTRequest1.Params.AddItem('grant_type', 'authorization_code', TRESTRequestParameterKind.pkQUERY); |
|
RESTRequest1.Params.AddItem('redirect_uri', 'http://localhost', TRESTRequestParameterKind.pkQUERY); |
|
RESTRequest1.Params.AddItem('code', uri.ParameterByName['code'], TRESTRequestParameterKind.pkQUERY); |
|
|
|
RESTRequest1.Method := TRESTRequestMethod.rmPOST; |
|
RESTRequest1.Execute; |
|
|
|
Memo1.Lines.Add(RESTResponse1.JSONValue.ToString); |
|
Memo1.Lines.Add(RESTResponse1.JSONValue.GetValue<string>('access_token')); |
|
|
|
accessToken := RESTResponse1.JSONValue.GetValue<string>('access_token'); |
|
|
|
Memo1.Lines.Add('Request Access Token w POST'); |
|
Memo1.Lines.Add('Print Access Token'); |
|
|
|
RESTClient1.BaseURL := 'https://api.fitbit.com/1/user/-/profile.json'; |
|
RESTRequest1.Params.Clear; |
|
RESTRequest1.AddParameter('Authorization', 'Bearer ' + accessToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]); |
|
|
|
RESTRequest1.Method := TRESTRequestMethod.rmGET; |
|
RESTRequest1.Execute; |
|
Memo1.Lines.Add(RESTResponse1.JSONValue.ToString); |
|
end; |
|
end; |