Sample code for 30+ languages & platforms
Lua

Shopify Update a product and associated variants and images

See more Shopify Examples

Update a product and associated variants and images

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

local rest = chilkat.Rest.new()

rest:set_auth_basic("SHOPIFY_PRIVATE_API_KEY", "SHOPIFY_PRIVATE_API_KEY")

local success = rest:connect("chilkat.myshopify.com", 443, true, true)
if not success then
    print(rest.last_error_text)
    return
end

-- The following code creates the JSON request body.
-- The JSON created by this code is shown below.
local jsonReq = chilkat.JsonObject.new()
jsonReq:update_number("product.id", "632910392")
jsonReq:update_bool("product.published", false)

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

-- {
--   "product": {
--     "id": 632910392,
--     "published": false
--   }
-- }

local sbReq = chilkat.StringBuilder.new()
jsonReq:emit_sb(sbReq)

rest:add_header("Content-Type", "application/json")

local sbJson = chilkat.StringBuilder.new()
success = rest:full_request_sb("PUT", "/admin/products/#{id}.json", sbReq, sbJson)
if not success then
    print(rest.last_error_text)
    return
end

if rest.response_status_code ~= 200 then
    print("Received error response code: " .. rest.response_status_code)
    print("Response body:")
    print(sbJson:get_as_string())
    return
end

local json = chilkat.JsonObject.new()
json:load_sb(sbJson)

-- The following code parses the JSON response.
-- A sample JSON response is shown below the sample code.
local id = 0
local product_id = 0
local title = ""
local price = ""
local sku = ""
local position = 0
local grams = 0
local inventory_policy = ""
local compare_at_price = false
local fulfillment_service = ""
local inventory_management = ""
local option1 = ""
local option2 = false
local option3 = false
local created_at = ""
local updated_at = ""
local taxable = false
local barcode = ""
local image_id = 0
local inventory_quantity = 0
local weight = 0
local weight_unit = ""
local old_inventory_quantity = 0
local requires_shipping = false
local name = ""
local j = 0
local count_j = 0
local strVal = ""
local width = 0
local height = 0
local src = ""
local intVal = 0

local productId = json:int_of("product.id")
local productTitle = json:string_of("product.title")
local productBody_html = json:string_of("product.body_html")
local productVendor = json:string_of("product.vendor")
local productProduct_type = json:string_of("product.product_type")
local productCreated_at = json:string_of("product.created_at")
local productHandle = json:string_of("product.handle")
local productUpdated_at = json:string_of("product.updated_at")
local productPublished_at = json:is_null_of("product.published_at")
local productTemplate_suffix = json:is_null_of("product.template_suffix")
local productPublished_scope = json:string_of("product.published_scope")
local productTags = json:string_of("product.tags")
local productImageId = json:int_of("product.image.id")
local productImageProduct_id = json:int_of("product.image.product_id")
local productImagePosition = json:int_of("product.image.position")
local productImageCreated_at = json:string_of("product.image.created_at")
local productImageUpdated_at = json:string_of("product.image.updated_at")
local productImageWidth = json:int_of("product.image.width")
local productImageHeight = json:int_of("product.image.height")
local productImageSrc = json:string_of("product.image.src")
local i = 0
local count_i = json:size_of_array("product.variants")
while i < count_i do
    json.i = i
    id = json:int_of("product.variants[i].id")
    product_id = json:int_of("product.variants[i].product_id")
    title = json:string_of("product.variants[i].title")
    price = json:string_of("product.variants[i].price")
    sku = json:string_of("product.variants[i].sku")
    position = json:int_of("product.variants[i].position")
    grams = json:int_of("product.variants[i].grams")
    inventory_policy = json:string_of("product.variants[i].inventory_policy")
    compare_at_price = json:is_null_of("product.variants[i].compare_at_price")
    fulfillment_service = json:string_of("product.variants[i].fulfillment_service")
    inventory_management = json:string_of("product.variants[i].inventory_management")
    option1 = json:string_of("product.variants[i].option1")
    option2 = json:is_null_of("product.variants[i].option2")
    option3 = json:is_null_of("product.variants[i].option3")
    created_at = json:string_of("product.variants[i].created_at")
    updated_at = json:string_of("product.variants[i].updated_at")
    taxable = json:bool_of("product.variants[i].taxable")
    barcode = json:string_of("product.variants[i].barcode")
    image_id = json:int_of("product.variants[i].image_id")
    inventory_quantity = json:int_of("product.variants[i].inventory_quantity")
    weight = json:int_of("product.variants[i].weight")
    weight_unit = json:string_of("product.variants[i].weight_unit")
    old_inventory_quantity = json:int_of("product.variants[i].old_inventory_quantity")
    requires_shipping = json:bool_of("product.variants[i].requires_shipping")
    i = i + 1
end

i = 0
count_i = json:size_of_array("product.options")
while i < count_i do
    json.i = i
    id = json:int_of("product.options[i].id")
    product_id = json:int_of("product.options[i].product_id")
    name = json:string_of("product.options[i].name")
    position = json:int_of("product.options[i].position")
    j = 0
    count_j = json:size_of_array("product.options[i].values")
    while j < count_j do
        json.j = j
        strVal = json:string_of("product.options[i].values[j]")
        j = j + 1
    end

    i = i + 1
end

i = 0
count_i = json:size_of_array("product.images")
while i < count_i do
    json.i = i
    id = json:int_of("product.images[i].id")
    product_id = json:int_of("product.images[i].product_id")
    position = json:int_of("product.images[i].position")
    created_at = json:string_of("product.images[i].created_at")
    updated_at = json:string_of("product.images[i].updated_at")
    width = json:int_of("product.images[i].width")
    height = json:int_of("product.images[i].height")
    src = json:string_of("product.images[i].src")
    j = 0
    count_j = json:size_of_array("product.images[i].variant_ids")
    while j < count_j do
        json.j = j
        intVal = json:int_of("product.images[i].variant_ids[j]")
        j = j + 1
    end

    i = i + 1
end

i = 0
count_i = json:size_of_array("image.product.variant_ids")
while i < count_i do
    json.i = i
    i = i + 1
end

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

-- {
--   "product": {
--     "id": 632910392,
--     "title": "IPod Nano - 8GB",
--     "body_html": "<p>It's the small iPod with one very big idea: Video. Now the world's most popular music player, available in 4GB and 8GB models, lets you enjoy TV shows, movies, video podcasts, and more. The larger, brighter display means amazing picture quality. In six eye-catching colors, iPod nano is stunning all around. And with models starting at just $149, little speaks volumes.<\/p>",
--     "vendor": "Apple",
--     "product_type": "Cult Products",
--     "created_at": "2017-09-22T14:08:02-04:00",
--     "handle": "ipod-nano",
--     "updated_at": "2017-09-22T14:48:36-04:00",
--     "published_at": null,
--     "template_suffix": null,
--     "published_scope": "web",
--     "tags": "Emotive, Flash Memory, MP3, Music",
--     "variants": [
--       {
--         "id": 808950810,
--         "product_id": 632910392,
--         "title": "Pink",
--         "price": "199.00",
--         "sku": "IPOD2008PINK",
--         "position": 1,
--         "grams": 567,
--         "inventory_policy": "continue",
--         "compare_at_price": null,
--         "fulfillment_service": "manual",
--         "inventory_management": "shopify",
--         "option1": "Pink",
--         "option2": null,
--         "option3": null,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:48:37-04:00",
--         "taxable": true,
--         "barcode": "1234_pink",
--         "image_id": 562641783,
--         "inventory_quantity": 10,
--         "weight": 1.25,
--         "weight_unit": "lb",
--         "old_inventory_quantity": 10,
--         "requires_shipping": true
--       },
--       {
--         "id": 49148385,
--         "product_id": 632910392,
--         "title": "Red",
--         "price": "199.00",
--         "sku": "IPOD2008RED",
--         "position": 2,
--         "grams": 567,
--         "inventory_policy": "continue",
--         "compare_at_price": null,
--         "fulfillment_service": "manual",
--         "inventory_management": "shopify",
--         "option1": "Red",
--         "option2": null,
--         "option3": null,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:08:02-04:00",
--         "taxable": true,
--         "barcode": "1234_red",
--         "image_id": null,
--         "inventory_quantity": 20,
--         "weight": 1.25,
--         "weight_unit": "lb",
--         "old_inventory_quantity": 20,
--         "requires_shipping": true
--       },
--       {
--         "id": 39072856,
--         "product_id": 632910392,
--         "title": "Green",
--         "price": "199.00",
--         "sku": "IPOD2008GREEN",
--         "position": 3,
--         "grams": 567,
--         "inventory_policy": "continue",
--         "compare_at_price": null,
--         "fulfillment_service": "manual",
--         "inventory_management": "shopify",
--         "option1": "Green",
--         "option2": null,
--         "option3": null,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:08:02-04:00",
--         "taxable": true,
--         "barcode": "1234_green",
--         "image_id": null,
--         "inventory_quantity": 30,
--         "weight": 1.25,
--         "weight_unit": "lb",
--         "old_inventory_quantity": 30,
--         "requires_shipping": true
--       },
--       {
--         "id": 457924702,
--         "product_id": 632910392,
--         "title": "Black",
--         "price": "199.00",
--         "sku": "IPOD2008BLACK",
--         "position": 4,
--         "grams": 567,
--         "inventory_policy": "continue",
--         "compare_at_price": null,
--         "fulfillment_service": "manual",
--         "inventory_management": "shopify",
--         "option1": "Black",
--         "option2": null,
--         "option3": null,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:08:02-04:00",
--         "taxable": true,
--         "barcode": "1234_black",
--         "image_id": null,
--         "inventory_quantity": 40,
--         "weight": 1.25,
--         "weight_unit": "lb",
--         "old_inventory_quantity": 40,
--         "requires_shipping": true
--       }
--     ],
--     "options": [
--       {
--         "id": 594680422,
--         "product_id": 632910392,
--         "name": "Color",
--         "position": 1,
--         "values": [
--           "Pink",
--           "Red",
--           "Green",
--           "Black"
--         ]
--       }
--     ],
--     "images": [
--       {
--         "id": 850703190,
--         "product_id": 632910392,
--         "position": 1,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:08:02-04:00",
--         "width": 123,
--         "height": 456,
--         "src": "https:\/\/cdn.shopify.com\/s\/files\/1\/0006\/9093\/3842\/products\/ipod-nano.png?v=1506103682",
--         "variant_ids": [
--         ]
--       },
--       {
--         "id": 562641783,
--         "product_id": 632910392,
--         "position": 2,
--         "created_at": "2017-09-22T14:08:02-04:00",
--         "updated_at": "2017-09-22T14:08:02-04:00",
--         "width": 123,
--         "height": 456,
--         "src": "https:\/\/cdn.shopify.com\/s\/files\/1\/0006\/9093\/3842\/products\/ipod-nano-2.png?v=1506103682",
--         "variant_ids": [
--           808950810
--         ]
--       }
--     ],
--     "image": {
--       "id": 850703190,
--       "product_id": 632910392,
--       "position": 1,
--       "created_at": "2017-09-22T14:08:02-04:00",
--       "updated_at": "2017-09-22T14:08:02-04:00",
--       "width": 123,
--       "height": 456,
--       "src": "https:\/\/cdn.shopify.com\/s\/files\/1\/0006\/9093\/3842\/products\/ipod-nano.png?v=1506103682",
--       "variant_ids": [
--       ]
--     }
--   }
-- }

print("Example Completed.")