Sample code for 30+ languages & platforms
Lianja

Shopify Create a new product with multiple product variants

See more Shopify Examples

Create a new product with multiple product variants

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

loRest = createobject("CkRest")

loRest.SetAuthBasic("SHOPIFY_PRIVATE_API_KEY","SHOPIFY_PRIVATE_API_KEY")

llSuccess = loRest.Connect("chilkat.myshopify.com",443,.T.,.T.)
if (llSuccess <> .T.) then
    ? loRest.LastErrorText
    release loRest
    return
endif

// The following code creates the JSON request body.
// The JSON created by this code is shown below.
loJsonReq = createobject("CkJsonObject")
loJsonReq.UpdateString("product.title","Burton Custom Freestyle 151")
loJsonReq.UpdateString("product.body_html","<strong>Good snowboard!</strong>")
loJsonReq.UpdateString("product.vendor","Burton")
loJsonReq.UpdateString("product.product_type","Snowboard")
loJsonReq.UpdateString("product.variants[0].option1","First")
loJsonReq.UpdateString("product.variants[0].price","10.00")
loJsonReq.UpdateString("product.variants[0].sku","123")
loJsonReq.UpdateString("product.variants[1].option1","Second")
loJsonReq.UpdateString("product.variants[1].price","20.00")
loJsonReq.UpdateString("product.variants[1].sku","123")

// The JSON request body created by the above code:

// {
//   "product": {
//     "title": "Burton Custom Freestyle 151",
//     "body_html": "<strong>Good snowboard!<\/strong>",
//     "vendor": "Burton",
//     "product_type": "Snowboard",
//     "variants": [
//       {
//         "option1": "First",
//         "price": "10.00",
//         "sku": "123"
//       },
//       {
//         "option1": "Second",
//         "price": "20.00",
//         "sku": "123"
//       }
//     ]
//   }
// }

loSbReq = createobject("CkStringBuilder")
loJsonReq.EmitSb(loSbReq)

loRest.AddHeader("Content-Type","application/json")

loSbJson = createobject("CkStringBuilder")
llSuccess = loRest.FullRequestSb("POST","/admin/products.json ",loSbReq,loSbJson)
if (llSuccess <> .T.) then
    ? loRest.LastErrorText
    release loRest
    release loJsonReq
    release loSbReq
    release loSbJson
    return
endif

if (loRest.ResponseStatusCode <> 201) then
    ? "Received error response code: " + str(loRest.ResponseStatusCode)
    ? "Response body:"
    ? loSbJson.GetAsString()
    release loRest
    release loJsonReq
    release loSbReq
    release loSbJson
    return
endif

loJson = createobject("CkJsonObject")
loJson.LoadSb(loSbJson)

// The following code parses the JSON response.
// A sample JSON response is shown below the sample code.

lnProductId = loJson.IntOf("product.id")
lcProductTitle = loJson.StringOf("product.title")
lcProductBody_html = loJson.StringOf("product.body_html")
lcProductVendor = loJson.StringOf("product.vendor")
lcProductProduct_type = loJson.StringOf("product.product_type")
lcProductCreated_at = loJson.StringOf("product.created_at")
lcProductHandle = loJson.StringOf("product.handle")
lcProductUpdated_at = loJson.StringOf("product.updated_at")
lcProductPublished_at = loJson.StringOf("product.published_at")
llProductTemplate_suffix = loJson.IsNullOf("product.template_suffix")
lcProductPublished_scope = loJson.StringOf("product.published_scope")
lcProductTags = loJson.StringOf("product.tags")
llProductImage = loJson.IsNullOf("product.image")
i = 0
lnCount_i = loJson.SizeOfArray("product.variants")
do while i < lnCount_i
    loJson.I = i
    lnId = loJson.IntOf("product.variants[i].id")
    lnProduct_id = loJson.IntOf("product.variants[i].product_id")
    lcTitle = loJson.StringOf("product.variants[i].title")
    lcPrice = loJson.StringOf("product.variants[i].price")
    lcSku = loJson.StringOf("product.variants[i].sku")
    lnPosition = loJson.IntOf("product.variants[i].position")
    lnGrams = loJson.IntOf("product.variants[i].grams")
    lcInventory_policy = loJson.StringOf("product.variants[i].inventory_policy")
    llCompare_at_price = loJson.IsNullOf("product.variants[i].compare_at_price")
    lcFulfillment_service = loJson.StringOf("product.variants[i].fulfillment_service")
    llInventory_management = loJson.IsNullOf("product.variants[i].inventory_management")
    lcOption1 = loJson.StringOf("product.variants[i].option1")
    llOption2 = loJson.IsNullOf("product.variants[i].option2")
    llOption3 = loJson.IsNullOf("product.variants[i].option3")
    lcCreated_at = loJson.StringOf("product.variants[i].created_at")
    lcUpdated_at = loJson.StringOf("product.variants[i].updated_at")
    llTaxable = loJson.BoolOf("product.variants[i].taxable")
    llBarcode = loJson.IsNullOf("product.variants[i].barcode")
    llImage_id = loJson.IsNullOf("product.variants[i].image_id")
    lnInventory_quantity = loJson.IntOf("product.variants[i].inventory_quantity")
    lnWeight = loJson.IntOf("product.variants[i].weight")
    lcWeight_unit = loJson.StringOf("product.variants[i].weight_unit")
    lnOld_inventory_quantity = loJson.IntOf("product.variants[i].old_inventory_quantity")
    llRequires_shipping = loJson.BoolOf("product.variants[i].requires_shipping")
    i = i + 1
enddo
i = 0
lnCount_i = loJson.SizeOfArray("product.options")
do while i < lnCount_i
    loJson.I = i
    lnId = loJson.IntOf("product.options[i].id")
    lnProduct_id = loJson.IntOf("product.options[i].product_id")
    lcName = loJson.StringOf("product.options[i].name")
    lnPosition = loJson.IntOf("product.options[i].position")
    j = 0
    lnCount_j = loJson.SizeOfArray("product.options[i].values")
    do while j < lnCount_j
        loJson.J = j
        lcStrVal = loJson.StringOf("product.options[i].values[j]")
        j = j + 1
    enddo
    i = i + 1
enddo
i = 0
lnCount_i = loJson.SizeOfArray("product.images")
do while i < lnCount_i
    loJson.I = i
    i = i + 1
enddo

// A sample JSON response body that is parsed by the above code:

// {
//   "product": {
//     "id": 1071559755,
//     "title": "Burton Custom Freestyle 151",
//     "body_html": "<strong>Good snowboard!<\/strong>",
//     "vendor": "Burton",
//     "product_type": "Snowboard",
//     "created_at": "2017-09-22T14:48:54-04:00",
//     "handle": "burton-custom-freestyle-151",
//     "updated_at": "2017-09-22T14:48:55-04:00",
//     "published_at": "2017-09-22T14:48:54-04:00",
//     "template_suffix": null,
//     "published_scope": "global",
//     "tags": "",
//     "variants": [
//       {
//         "id": 1070325225,
//         "product_id": 1071559755,
//         "title": "First",
//         "price": "10.00",
//         "sku": "123",
//         "position": 1,
//         "grams": 0,
//         "inventory_policy": "deny",
//         "compare_at_price": null,
//         "fulfillment_service": "manual",
//         "inventory_management": null,
//         "option1": "First",
//         "option2": null,
//         "option3": null,
//         "created_at": "2017-09-22T14:48:54-04:00",
//         "updated_at": "2017-09-22T14:48:54-04:00",
//         "taxable": true,
//         "barcode": null,
//         "image_id": null,
//         "inventory_quantity": 1,
//         "weight": 0.0,
//         "weight_unit": "lb",
//         "old_inventory_quantity": 1,
//         "requires_shipping": true
//       },
//       {
//         "id": 1070325226,
//         "product_id": 1071559755,
//         "title": "Second",
//         "price": "20.00",
//         "sku": "123",
//         "position": 2,
//         "grams": 0,
//         "inventory_policy": "deny",
//         "compare_at_price": null,
//         "fulfillment_service": "manual",
//         "inventory_management": null,
//         "option1": "Second",
//         "option2": null,
//         "option3": null,
//         "created_at": "2017-09-22T14:48:54-04:00",
//         "updated_at": "2017-09-22T14:48:54-04:00",
//         "taxable": true,
//         "barcode": null,
//         "image_id": null,
//         "inventory_quantity": 1,
//         "weight": 0.0,
//         "weight_unit": "lb",
//         "old_inventory_quantity": 1,
//         "requires_shipping": true
//       }
//     ],
//     "options": [
//       {
//         "id": 1022828915,
//         "product_id": 1071559755,
//         "name": "Title",
//         "position": 1,
//         "values": [
//           "First",
//           "Second"
//         ]
//       }
//     ],
//     "images": [
//     ],
//     "image": null
//   }
// }

? "Example Completed."


release loRest
release loJsonReq
release loSbReq
release loSbJson
release loJson