Chilkat Examples

ChilkatHOMEAndroid™Classic ASPCC++C#Mono C#.NET Core C#C# UWP/WinRTDataFlexDelphi ActiveXDelphi DLLVisual FoxProJavaLianjaMFCObjective-CPerlPHP ActiveXPHP ExtensionPowerBuilderPowerShellPureBasicCkPythonChilkat2-PythonRubySQL ServerSwift 2Swift 3/4TclUnicode CUnicode C++Visual Basic 6.0VB.NETVB.NET UWP/WinRTVBScriptXojo PluginNode.jsExcelGo

Delphi DLL Web API Examples

Primary Categories

Facebook
GeoOp
Jira
PayPal
Peoplevox
QuickBooks

Shopify
Stripe
SugarCRM
Twitter
VoiceBase
Walmart
Xero
eBay
effectconnect

 

 

 

(Delphi DLL) Shopify OAuth2 Authentication

Demonstrates obtaining an access token for a Shopify application using OAuth2 authentication. This example is for non-web-apps, and requires that a browser window be displayed to get authorization from the user.

A web-based application would not obtain an OAuth2 token in this way, because the redirect URL would route back to the web application.

Note: Once an access token is in hand, the remainder of the Chilkat examples, which use an already-obtained access token, apply to both web and non-web apps.

Chilkat for Delphi Downloads

Chilkat non-ActiveX DLL for Delphi

Chilkat ActiveX DLL for Delphi

* The examples here use the non-ActiveX DLL.

uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, OAuth2;

...

procedure TForm1.Button1Click(Sender: TObject);
var
oauth2: HCkOAuth2;
success: Boolean;
url: PWideChar;
numMsWaited: Integer;

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

oauth2 := CkOAuth2_Create();

// This should be the port in the localhost callback URL for your app.  
// The callback URL would look like "http://localhost:3017/" if the port number is 3017.
// Make sure that "http://localhost:3017/" is listed in your Whitelisted Redirection URLs for your Shopify app.
CkOAuth2_putListenPort(oauth2,3017);

// The full content of the Authorization Endpoin for Shopify looks like this:
// https://{shop}.myshopify.com/admin/oauth/authorize?client_id={api_key}&scope={scopes}&redirect_uri={redirect_uri}&state={nonce}&grant_options[]={option}

// Replace "chilkat" with your shop name.
CkOAuth2_putAuthorizationEndpoint(oauth2,'https://chilkat.myshopify.com/admin/oauth/authorize');
CkOAuth2_putTokenEndpoint(oauth2,'https://chilkat.myshopify.com/admin/oauth/access_token');

// Replace these with actual values.
CkOAuth2_putClientId(oauth2,'SHOPIFY_API_KEY');
CkOAuth2_putClientSecret(oauth2,'SHOPIFY_API_SECRET_KEY');

CkOAuth2_putCodeChallenge(oauth2,True);
CkOAuth2_putCodeChallengeMethod(oauth2,'S256');

// Set requested scopes.  See https://help.shopify.com/api/getting-started/authentication/oauth
CkOAuth2_putScope(oauth2,'read_product_listings,read_customers,read_orders,read_draft_orders');

// Begin the OAuth2 three-legged flow.  This returns a URL that should be loaded in a browser.
url := CkOAuth2__startAuth(oauth2);
if (CkOAuth2_getLastMethodSuccess(oauth2) <> True) then
  begin
    Memo1.Lines.Add(CkOAuth2__lastErrorText(oauth2));
    Exit;
  end;

// At this point, your application should load the URL in a browser.
// For example, 
// in C#:  System.Diagnostics.Process.Start(url);
// in Java: Desktop.getDesktop().browse(new URI(url));
// in VBScript: Set wsh=WScript.CreateObject("WScript.Shell")
//              wsh.Run url
// The Shopify account owner would interactively accept or deny the authorization request.

// Add the code to load the url in a web browser here...
// Add the code to load the url in a web browser here...
// Add the code to load the url in a web browser here...

// Now wait for the authorization.
// We'll wait for a max of 30 seconds.
numMsWaited := 0;
while (numMsWaited < 30000) and (CkOAuth2_getAuthFlowState(oauth2) < 3) do
  begin
    CkOAuth2_SleepMs(oauth2,100);
    numMsWaited := numMsWaited + 100;
  end;

// If there was no response from the browser within 30 seconds, then 
// the AuthFlowState will be equal to 1 or 2.
// 1: Waiting for Redirect. The OAuth2 background thread is waiting to receive the redirect HTTP request from the browser.
// 2: Waiting for Final Response. The OAuth2 background thread is waiting for the final access token response.
// In that case, cancel the background task started in the call to StartAuth.
if (CkOAuth2_getAuthFlowState(oauth2) < 3) then
  begin
    CkOAuth2_Cancel(oauth2);
    Memo1.Lines.Add('No response from the browser!');
    Exit;
  end;

// Check the AuthFlowState to see if authorization was granted, denied, or if some error occurred
// The possible AuthFlowState values are:
// 3: Completed with Success. The OAuth2 flow has completed, the background thread exited, and the successful JSON response is available in AccessTokenResponse property.
// 4: Completed with Access Denied. The OAuth2 flow has completed, the background thread exited, and the error JSON is available in AccessTokenResponse property.
// 5: Failed Prior to Completion. The OAuth2 flow failed to complete, the background thread exited, and the error information is available in the FailureInfo property.
if (CkOAuth2_getAuthFlowState(oauth2) = 5) then
  begin
    Memo1.Lines.Add('OAuth2 failed to complete.');
    Memo1.Lines.Add(CkOAuth2__failureInfo(oauth2));
    Exit;
  end;

if (CkOAuth2_getAuthFlowState(oauth2) = 4) then
  begin
    Memo1.Lines.Add('OAuth2 authorization was denied.');
    Memo1.Lines.Add(CkOAuth2__accessTokenResponse(oauth2));
    Exit;
  end;

if (CkOAuth2_getAuthFlowState(oauth2) <> 3) then
  begin
    Memo1.Lines.Add('Unexpected AuthFlowState:' + IntToStr(CkOAuth2_getAuthFlowState(oauth2)));
    Exit;
  end;

Memo1.Lines.Add('OAuth2 authorization granted!');
Memo1.Lines.Add('Access Token = ' + CkOAuth2__accessToken(oauth2));

CkOAuth2_Dispose(oauth2);

end;

 

© 2000-2019 Chilkat Software, Inc. All Rights Reserved.