Sample code for 30+ languages & platforms
Delphi DLL

Shopify GraphQL Simple Query (Get Shop Object)

See more Shopify Examples

Demonstrates a simple Shopify GraphQL query to get specific fields of the Shop object.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, StringBuilder, HttpResponse, JsonObject;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
http: HCkHttp;
query: PWideChar;
url: PWideChar;
resp: HCkHttpResponse;
sbResponseBody: HCkStringBuilder;
jResp: HCkJsonObject;
respStatusCode: Integer;
shopId: PWideChar;
shopName: PWideChar;
shopDescription: PWideChar;
shopEmail: PWideChar;
costRequestedQueryCost: Integer;
costActualQueryCost: Integer;
costThrottleStatusMaximumAvailable: PWideChar;
costThrottleStatusCurrentlyAvailable: Integer;
costThrottleStatusRestoreRate: PWideChar;

begin
success := False;

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

http := CkHttp_Create();

// This example will use private authentication (which is HTTP Basic authentication)
// See the other Chilkat Shopify examples for OAuth2 authentication.
// To use HTTP Basic Authentication with any HTTP request, we simply set the Login, Password, and BasicAuth properties.
// Important: All HTTP requests using Basic authentication must be over SSL/TLS.
CkHttp_putLogin(http,'SHOPIFY_PRIVATE_API_KEY');
CkHttp_putPassword(http,'SHOPIFY_PRIVATE_API_SECRET_KEY');
CkHttp_putBasicAuth(http,True);

// We're going to do a POST  https://{shop}.myshopify.com/admin/api/2021-04/graphql.json
// Make sure to replace "chilkat" with your store name.

// The body of the request will be:
//    {
//        shop {
//            id
//            name
//            description
//            email
//         }
//     }

// The above query is not JSON.  It looks like JSON, but it's actually not.
// We'll just make it one line:

query := '{ shop { id name description email } }';

// My store name is "chilkat".  Use your store name here instead.
url := 'https://chilkat.myshopify.com/admin/api/2021-04/graphql.json';

resp := CkHttpResponse_Create();
success := CkHttp_HttpStr(http,'POST',url,query,'utf-8','application/graphql',resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

// Examine the response code.
if (CkHttpResponse_getStatusCode(resp) <> 200) then
  begin
    Memo1.Lines.Add('Received error response code: ' + IntToStr(CkHttpResponse_getStatusCode(resp)));
    Memo1.Lines.Add('Response body:');
    Memo1.Lines.Add(CkHttpResponse__bodyStr(resp));
    Exit;
  end;

sbResponseBody := CkStringBuilder_Create();
CkHttpResponse_GetBodySb(resp,sbResponseBody);
jResp := CkJsonObject_Create();
CkJsonObject_LoadSb(jResp,sbResponseBody);
CkJsonObject_putEmitCompact(jResp,False);

Memo1.Lines.Add('Response Body:');
Memo1.Lines.Add(CkJsonObject__emit(jResp));

respStatusCode := CkHttpResponse_getStatusCode(resp);
Memo1.Lines.Add('Response Status Code = ' + IntToStr(respStatusCode));
if (respStatusCode >= 400) then
  begin
    Memo1.Lines.Add('Response Header:');
    Memo1.Lines.Add(CkHttpResponse__header(resp));
    Memo1.Lines.Add('Failed.');
    Exit;
  end;

// Sample JSON response:
// (Sample code for parsing the JSON response is shown below)

// {
//   "data": {
//     "shop": {
//       "id": "gid:\/\/shopify\/Shop\/24198053",
//       "name": "chilkat",
//       "description": null,
//       "email": "admin@chilkatsoft.com"
//     }
//   },
//   "extensions": {
//     "cost": {
//       "requestedQueryCost": 1,
//       "actualQueryCost": 1,
//       "throttleStatus": {
//         "maximumAvailable": 1000.0,
//         "currentlyAvailable": 999,
//         "restoreRate": 50.0
//       }
//     }
//   }
// }

// Sample code for parsing the JSON response...
// Use the following online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON

shopId := CkJsonObject__stringOf(jResp,'data.shop.id');
shopName := CkJsonObject__stringOf(jResp,'data.shop.name');
shopDescription := CkJsonObject__stringOf(jResp,'data.shop.description');
shopEmail := CkJsonObject__stringOf(jResp,'data.shop.email');
costRequestedQueryCost := CkJsonObject_IntOf(jResp,'extensions.cost.requestedQueryCost');
costActualQueryCost := CkJsonObject_IntOf(jResp,'extensions.cost.actualQueryCost');
costThrottleStatusMaximumAvailable := CkJsonObject__stringOf(jResp,'extensions.cost.throttleStatus.maximumAvailable');
costThrottleStatusCurrentlyAvailable := CkJsonObject_IntOf(jResp,'extensions.cost.throttleStatus.currentlyAvailable');
costThrottleStatusRestoreRate := CkJsonObject__stringOf(jResp,'extensions.cost.throttleStatus.restoreRate');

Memo1.Lines.Add('Shop name: ' + shopName);
// ...

CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
CkStringBuilder_Dispose(sbResponseBody);
CkJsonObject_Dispose(jResp);

end;