Sample code for 30+ languages & platforms
Tcl

Shopify Add a metafield to an existing product

See more Shopify Examples

Add a metafield to an existing product

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set rest [new_CkRest]

CkRest_SetAuthBasic $rest "SHOPIFY_PRIVATE_API_KEY" "SHOPIFY_PRIVATE_API_KEY"

set success [CkRest_Connect $rest "chilkat.myshopify.com" 443 1 1]
if {$success != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    exit
}

# The following code creates the JSON request body.
# The JSON created by this code is shown below.
set jsonReq [new_CkJsonObject]

CkJsonObject_UpdateNumber $jsonReq "product.id" "632910392"
CkJsonObject_UpdateString $jsonReq "product.metafields[0].key" "new"
CkJsonObject_UpdateString $jsonReq "product.metafields[0].value" "newvalue"
CkJsonObject_UpdateString $jsonReq "product.metafields[0].value_type" "string"
CkJsonObject_UpdateString $jsonReq "product.metafields[0].namespace" "global"

# The JSON request body created by the above code:

# {
#   "product": {
#     "id": 632910392,
#     "metafields": [
#       {
#         "key": "new",
#         "value": "newvalue",
#         "value_type": "string",
#         "namespace": "global"
#       }
#     ]
#   }
# }

set sbReq [new_CkStringBuilder]

CkJsonObject_EmitSb $jsonReq $sbReq

CkRest_AddHeader $rest "Content-Type" "application/json"

set sbJson [new_CkStringBuilder]

set success [CkRest_FullRequestSb $rest "PUT" "/admin/products/#{id}.json" $sbReq $sbJson]
if {$success != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    delete_CkJsonObject $jsonReq
    delete_CkStringBuilder $sbReq
    delete_CkStringBuilder $sbJson
    exit
}

if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
    puts "Received error response code: [CkRest_get_ResponseStatusCode $rest]"
    puts "Response body:"
    puts [CkStringBuilder_getAsString $sbJson]
    delete_CkRest $rest
    delete_CkJsonObject $jsonReq
    delete_CkStringBuilder $sbReq
    delete_CkStringBuilder $sbJson
    exit
}

set json [new_CkJsonObject]

CkJsonObject_LoadSb $json $sbJson

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

set productId [CkJsonObject_IntOf $json "product.id"]
set productTitle [CkJsonObject_stringOf $json "product.title"]
set productBody_html [CkJsonObject_stringOf $json "product.body_html"]
set productVendor [CkJsonObject_stringOf $json "product.vendor"]
set productProduct_type [CkJsonObject_stringOf $json "product.product_type"]
set productCreated_at [CkJsonObject_stringOf $json "product.created_at"]
set productHandle [CkJsonObject_stringOf $json "product.handle"]
set productUpdated_at [CkJsonObject_stringOf $json "product.updated_at"]
set productPublished_at [CkJsonObject_stringOf $json "product.published_at"]
set productTemplate_suffix [CkJsonObject_IsNullOf $json "product.template_suffix"]
set productPublished_scope [CkJsonObject_stringOf $json "product.published_scope"]
set productTags [CkJsonObject_stringOf $json "product.tags"]
set productImageId [CkJsonObject_IntOf $json "product.image.id"]
set productImageProduct_id [CkJsonObject_IntOf $json "product.image.product_id"]
set productImagePosition [CkJsonObject_IntOf $json "product.image.position"]
set productImageCreated_at [CkJsonObject_stringOf $json "product.image.created_at"]
set productImageUpdated_at [CkJsonObject_stringOf $json "product.image.updated_at"]
set productImageWidth [CkJsonObject_IntOf $json "product.image.width"]
set productImageHeight [CkJsonObject_IntOf $json "product.image.height"]
set productImageSrc [CkJsonObject_stringOf $json "product.image.src"]
set i 0
set count_i [CkJsonObject_SizeOfArray $json "product.variants"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set id [CkJsonObject_IntOf $json "product.variants[i].id"]
    set product_id [CkJsonObject_IntOf $json "product.variants[i].product_id"]
    set title [CkJsonObject_stringOf $json "product.variants[i].title"]
    set price [CkJsonObject_stringOf $json "product.variants[i].price"]
    set sku [CkJsonObject_stringOf $json "product.variants[i].sku"]
    set position [CkJsonObject_IntOf $json "product.variants[i].position"]
    set grams [CkJsonObject_IntOf $json "product.variants[i].grams"]
    set inventory_policy [CkJsonObject_stringOf $json "product.variants[i].inventory_policy"]
    set compare_at_price [CkJsonObject_IsNullOf $json "product.variants[i].compare_at_price"]
    set fulfillment_service [CkJsonObject_stringOf $json "product.variants[i].fulfillment_service"]
    set inventory_management [CkJsonObject_stringOf $json "product.variants[i].inventory_management"]
    set option1 [CkJsonObject_stringOf $json "product.variants[i].option1"]
    set option2 [CkJsonObject_IsNullOf $json "product.variants[i].option2"]
    set option3 [CkJsonObject_IsNullOf $json "product.variants[i].option3"]
    set created_at [CkJsonObject_stringOf $json "product.variants[i].created_at"]
    set updated_at [CkJsonObject_stringOf $json "product.variants[i].updated_at"]
    set taxable [CkJsonObject_BoolOf $json "product.variants[i].taxable"]
    set barcode [CkJsonObject_stringOf $json "product.variants[i].barcode"]
    set image_id [CkJsonObject_IntOf $json "product.variants[i].image_id"]
    set inventory_quantity [CkJsonObject_IntOf $json "product.variants[i].inventory_quantity"]
    set weight [CkJsonObject_IntOf $json "product.variants[i].weight"]
    set weight_unit [CkJsonObject_stringOf $json "product.variants[i].weight_unit"]
    set old_inventory_quantity [CkJsonObject_IntOf $json "product.variants[i].old_inventory_quantity"]
    set requires_shipping [CkJsonObject_BoolOf $json "product.variants[i].requires_shipping"]
    set i [expr $i + 1]
}
set i 0
set count_i [CkJsonObject_SizeOfArray $json "product.options"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set id [CkJsonObject_IntOf $json "product.options[i].id"]
    set product_id [CkJsonObject_IntOf $json "product.options[i].product_id"]
    set name [CkJsonObject_stringOf $json "product.options[i].name"]
    set position [CkJsonObject_IntOf $json "product.options[i].position"]
    set j 0
    set count_j [CkJsonObject_SizeOfArray $json "product.options[i].values"]
    while {$j < $count_j} {
        CkJsonObject_put_J $json $j
        set strVal [CkJsonObject_stringOf $json "product.options[i].values[j]"]
        set j [expr $j + 1]
    }
    set i [expr $i + 1]
}
set i 0
set count_i [CkJsonObject_SizeOfArray $json "product.images"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set id [CkJsonObject_IntOf $json "product.images[i].id"]
    set product_id [CkJsonObject_IntOf $json "product.images[i].product_id"]
    set position [CkJsonObject_IntOf $json "product.images[i].position"]
    set created_at [CkJsonObject_stringOf $json "product.images[i].created_at"]
    set updated_at [CkJsonObject_stringOf $json "product.images[i].updated_at"]
    set width [CkJsonObject_IntOf $json "product.images[i].width"]
    set height [CkJsonObject_IntOf $json "product.images[i].height"]
    set src [CkJsonObject_stringOf $json "product.images[i].src"]
    set j 0
    set count_j [CkJsonObject_SizeOfArray $json "product.images[i].variant_ids"]
    while {$j < $count_j} {
        CkJsonObject_put_J $json $j
        set intVal [CkJsonObject_IntOf $json "product.images[i].variant_ids[j]"]
        set j [expr $j + 1]
    }
    set i [expr $i + 1]
}
set i 0
set count_i [CkJsonObject_SizeOfArray $json "image.product.variant_ids"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set i [expr $i + 1]
}

# 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:57-04:00",
#     "published_at": "2007-12-31T19:00:00-05:00",
#     "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:57-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": [
#       ]
#     }
#   }
# }

puts "Example Completed."

delete_CkRest $rest
delete_CkJsonObject $jsonReq
delete_CkStringBuilder $sbReq
delete_CkStringBuilder $sbJson
delete_CkJsonObject $json