Sample code for 30+ languages & platforms
Xbase++ Requires Chilkat v11.0.0+

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 Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oHttp
LOCAL cQuery
LOCAL cUrl
LOCAL oResp
LOCAL oSbResponseBody
LOCAL oJResp
LOCAL nRespStatusCode
LOCAL cShopId
LOCAL cShopName
LOCAL cShopDescription
LOCAL cShopEmail
LOCAL nCostRequestedQueryCost
LOCAL nCostActualQueryCost
LOCAL cCostThrottleStatusMaximumAvailable
LOCAL nCostThrottleStatusCurrentlyAvailable
LOCAL cCostThrottleStatusRestoreRate

nSuccess := 0

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

oHttp := CreateObject("Chilkat.Http")

//  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.
oHttp:Login := "SHOPIFY_PRIVATE_API_KEY"
oHttp:Password := "SHOPIFY_PRIVATE_API_SECRET_KEY"
oHttp:BasicAuth := 1

//  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:

cQuery := "{ shop { id name description email } }"

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

oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpStr("POST", cUrl, cQuery, "utf-8", "application/graphql", oResp)
IF (nSuccess == 0)
    ? oHttp:LastErrorText
    oHttp:destroy()
    oResp:destroy()
    RETURN
ENDIF

//  Examine the response code.
IF (oResp:StatusCode != 200)
    ? "Received error response code: " + Str(oResp:StatusCode)
    ? "Response body:"
    ? oResp:BodyStr
    oHttp:destroy()
    oResp:destroy()
    RETURN
ENDIF

oSbResponseBody := CreateObject("Chilkat.StringBuilder")
oResp:GetBodySb(oSbResponseBody)
oJResp := CreateObject("Chilkat.JsonObject")
oJResp:LoadSb(oSbResponseBody)
oJResp:EmitCompact := 0

? "Response Body:"
? oJResp:Emit()

nRespStatusCode := oResp:StatusCode
? "Response Status Code = " + Str(nRespStatusCode)
IF (nRespStatusCode >= 400)
    ? "Response Header:"
    ? oResp:Header
    ? "Failed."
    oHttp:destroy()
    oResp:destroy()
    oSbResponseBody:destroy()
    oJResp:destroy()
    RETURN
ENDIF

//  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

cShopId := oJResp:StringOf("data.shop.id")
cShopName := oJResp:StringOf("data.shop.name")
cShopDescription := oJResp:StringOf("data.shop.description")
cShopEmail := oJResp:StringOf("data.shop.email")
nCostRequestedQueryCost := oJResp:IntOf("extensions.cost.requestedQueryCost")
nCostActualQueryCost := oJResp:IntOf("extensions.cost.actualQueryCost")
cCostThrottleStatusMaximumAvailable := oJResp:StringOf("extensions.cost.throttleStatus.maximumAvailable")
nCostThrottleStatusCurrentlyAvailable := oJResp:IntOf("extensions.cost.throttleStatus.currentlyAvailable")
cCostThrottleStatusRestoreRate := oJResp:StringOf("extensions.cost.throttleStatus.restoreRate")

? "Shop name: " + cShopName
//  ...

oHttp:destroy()
oResp:destroy()
oSbResponseBody:destroy()
oJResp:destroy()