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

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 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.Http,
  Chilkat.StringBuilder,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  query: string;
  url: string;
  resp: THttpResponse;
  sbResponseBody: TStringBuilder;
  jResp: TJsonObject;
  respStatusCode: Integer;
  shopId: string;
  shopName: string;
  shopDescription: string;
  shopEmail: string;
  costRequestedQueryCost: Integer;
  costActualQueryCost: Integer;
  costThrottleStatusMaximumAvailable: string;
  costThrottleStatusCurrentlyAvailable: Integer;
  costThrottleStatusRestoreRate: string;

begin
  success := False;

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

  http := THttp.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.
  http.Login := 'SHOPIFY_PRIVATE_API_KEY';
  http.Password := 'SHOPIFY_PRIVATE_API_SECRET_KEY';
  http.BasicAuth := 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 := THttpResponse.Create;
  success := http.HttpStr('POST',url,query,'utf-8','application/graphql',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Examine the response code.
  if (resp.StatusCode <> 200) then
    begin
      WriteLn('Received error response code: ' + resp.StatusCode);
      WriteLn('Response body:');
      WriteLn(resp.BodyStr);
      Exit;
    end;

  sbResponseBody := TStringBuilder.Create;
  resp.GetBodySb(sbResponseBody);
  jResp := TJsonObject.Create;
  jResp.LoadSb(sbResponseBody);
  jResp.EmitCompact := False;

  WriteLn('Response Body:');
  WriteLn(jResp.Emit());

  respStatusCode := resp.StatusCode;
  WriteLn('Response Status Code = ' + respStatusCode);
  if (respStatusCode >= 400) then
    begin
      WriteLn('Response Header:');
      WriteLn(resp.Header);
      WriteLn('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 := jResp.StringOf('data.shop.id');
  shopName := jResp.StringOf('data.shop.name');
  shopDescription := jResp.StringOf('data.shop.description');
  shopEmail := jResp.StringOf('data.shop.email');
  costRequestedQueryCost := jResp.IntOf('extensions.cost.requestedQueryCost');
  costActualQueryCost := jResp.IntOf('extensions.cost.actualQueryCost');
  costThrottleStatusMaximumAvailable := jResp.StringOf('extensions.cost.throttleStatus.maximumAvailable');
  costThrottleStatusCurrentlyAvailable := jResp.IntOf('extensions.cost.throttleStatus.currentlyAvailable');
  costThrottleStatusRestoreRate := jResp.StringOf('extensions.cost.throttleStatus.restoreRate');

  WriteLn('Shop name: ' + shopName);
  //  ...


  http.Free;
  resp.Free;
  sbResponseBody.Free;
  jResp.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.