Sample code for 30+ languages & platforms
PureBasic

Shopify Add a metafield to an existing product

See more Shopify Examples

Add a metafield to an existing product

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkRest::ckSetAuthBasic(rest,"SHOPIFY_PRIVATE_API_KEY","SHOPIFY_PRIVATE_API_KEY")

    success = CkRest::ckConnect(rest,"chilkat.myshopify.com",443,1,1)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    ; The following code creates the JSON request body.
    ; The JSON created by this code is shown below.
    jsonReq.i = CkJsonObject::ckCreate()
    If jsonReq.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateNumber(jsonReq,"product.id","632910392")
    CkJsonObject::ckUpdateString(jsonReq,"product.metafields[0].key","new")
    CkJsonObject::ckUpdateString(jsonReq,"product.metafields[0].value","newvalue")
    CkJsonObject::ckUpdateString(jsonReq,"product.metafields[0].value_type","string")
    CkJsonObject::ckUpdateString(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"
    ;       }
    ;     ]
    ;   }
    ; }

    sbReq.i = CkStringBuilder::ckCreate()
    If sbReq.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckEmitSb(jsonReq,sbReq)

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

    sbJson.i = CkStringBuilder::ckCreate()
    If sbJson.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestSb(rest,"PUT","/admin/products/#{id}.json",sbReq,sbJson)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkJsonObject::ckDispose(jsonReq)
        CkStringBuilder::ckDispose(sbReq)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug "Received error response code: " + Str(CkRest::ckResponseStatusCode(rest))
        Debug "Response body:"
        Debug CkStringBuilder::ckGetAsString(sbJson)
        CkRest::ckDispose(rest)
        CkJsonObject::ckDispose(jsonReq)
        CkStringBuilder::ckDispose(sbReq)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(json,sbJson)

    ; The following code parses the JSON response.
    ; A sample JSON response is shown below the sample code.
    productId.i
    productTitle.s
    productBody_html.s
    productVendor.s
    productProduct_type.s
    productCreated_at.s
    productHandle.s
    productUpdated_at.s
    productPublished_at.s
    productTemplate_suffix.i
    productPublished_scope.s
    productTags.s
    productImageId.i
    productImageProduct_id.i
    productImagePosition.i
    productImageCreated_at.s
    productImageUpdated_at.s
    productImageWidth.i
    productImageHeight.i
    productImageSrc.s
    i.i
    count_i.i
    id.i
    product_id.i
    title.s
    price.s
    sku.s
    position.i
    grams.i
    inventory_policy.s
    compare_at_price.i
    fulfillment_service.s
    inventory_management.s
    option1.s
    option2.i
    option3.i
    created_at.s
    updated_at.s
    taxable.i
    barcode.s
    image_id.i
    inventory_quantity.i
    weight.i
    weight_unit.s
    old_inventory_quantity.i
    requires_shipping.i
    name.s
    j.i
    count_j.i
    strVal.s
    width.i
    height.i
    src.s
    intVal.i

    productId = CkJsonObject::ckIntOf(json,"product.id")
    productTitle = CkJsonObject::ckStringOf(json,"product.title")
    productBody_html = CkJsonObject::ckStringOf(json,"product.body_html")
    productVendor = CkJsonObject::ckStringOf(json,"product.vendor")
    productProduct_type = CkJsonObject::ckStringOf(json,"product.product_type")
    productCreated_at = CkJsonObject::ckStringOf(json,"product.created_at")
    productHandle = CkJsonObject::ckStringOf(json,"product.handle")
    productUpdated_at = CkJsonObject::ckStringOf(json,"product.updated_at")
    productPublished_at = CkJsonObject::ckStringOf(json,"product.published_at")
    productTemplate_suffix = CkJsonObject::ckIsNullOf(json,"product.template_suffix")
    productPublished_scope = CkJsonObject::ckStringOf(json,"product.published_scope")
    productTags = CkJsonObject::ckStringOf(json,"product.tags")
    productImageId = CkJsonObject::ckIntOf(json,"product.image.id")
    productImageProduct_id = CkJsonObject::ckIntOf(json,"product.image.product_id")
    productImagePosition = CkJsonObject::ckIntOf(json,"product.image.position")
    productImageCreated_at = CkJsonObject::ckStringOf(json,"product.image.created_at")
    productImageUpdated_at = CkJsonObject::ckStringOf(json,"product.image.updated_at")
    productImageWidth = CkJsonObject::ckIntOf(json,"product.image.width")
    productImageHeight = CkJsonObject::ckIntOf(json,"product.image.height")
    productImageSrc = CkJsonObject::ckStringOf(json,"product.image.src")
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"product.variants")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        id = CkJsonObject::ckIntOf(json,"product.variants[i].id")
        product_id = CkJsonObject::ckIntOf(json,"product.variants[i].product_id")
        title = CkJsonObject::ckStringOf(json,"product.variants[i].title")
        price = CkJsonObject::ckStringOf(json,"product.variants[i].price")
        sku = CkJsonObject::ckStringOf(json,"product.variants[i].sku")
        position = CkJsonObject::ckIntOf(json,"product.variants[i].position")
        grams = CkJsonObject::ckIntOf(json,"product.variants[i].grams")
        inventory_policy = CkJsonObject::ckStringOf(json,"product.variants[i].inventory_policy")
        compare_at_price = CkJsonObject::ckIsNullOf(json,"product.variants[i].compare_at_price")
        fulfillment_service = CkJsonObject::ckStringOf(json,"product.variants[i].fulfillment_service")
        inventory_management = CkJsonObject::ckStringOf(json,"product.variants[i].inventory_management")
        option1 = CkJsonObject::ckStringOf(json,"product.variants[i].option1")
        option2 = CkJsonObject::ckIsNullOf(json,"product.variants[i].option2")
        option3 = CkJsonObject::ckIsNullOf(json,"product.variants[i].option3")
        created_at = CkJsonObject::ckStringOf(json,"product.variants[i].created_at")
        updated_at = CkJsonObject::ckStringOf(json,"product.variants[i].updated_at")
        taxable = CkJsonObject::ckBoolOf(json,"product.variants[i].taxable")
        barcode = CkJsonObject::ckStringOf(json,"product.variants[i].barcode")
        image_id = CkJsonObject::ckIntOf(json,"product.variants[i].image_id")
        inventory_quantity = CkJsonObject::ckIntOf(json,"product.variants[i].inventory_quantity")
        weight = CkJsonObject::ckIntOf(json,"product.variants[i].weight")
        weight_unit = CkJsonObject::ckStringOf(json,"product.variants[i].weight_unit")
        old_inventory_quantity = CkJsonObject::ckIntOf(json,"product.variants[i].old_inventory_quantity")
        requires_shipping = CkJsonObject::ckBoolOf(json,"product.variants[i].requires_shipping")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"product.options")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        id = CkJsonObject::ckIntOf(json,"product.options[i].id")
        product_id = CkJsonObject::ckIntOf(json,"product.options[i].product_id")
        name = CkJsonObject::ckStringOf(json,"product.options[i].name")
        position = CkJsonObject::ckIntOf(json,"product.options[i].position")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(json,"product.options[i].values")
        While j < count_j
            CkJsonObject::setCkJ(json, j)
            strVal = CkJsonObject::ckStringOf(json,"product.options[i].values[j]")
            j = j + 1
        Wend
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"product.images")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        id = CkJsonObject::ckIntOf(json,"product.images[i].id")
        product_id = CkJsonObject::ckIntOf(json,"product.images[i].product_id")
        position = CkJsonObject::ckIntOf(json,"product.images[i].position")
        created_at = CkJsonObject::ckStringOf(json,"product.images[i].created_at")
        updated_at = CkJsonObject::ckStringOf(json,"product.images[i].updated_at")
        width = CkJsonObject::ckIntOf(json,"product.images[i].width")
        height = CkJsonObject::ckIntOf(json,"product.images[i].height")
        src = CkJsonObject::ckStringOf(json,"product.images[i].src")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(json,"product.images[i].variant_ids")
        While j < count_j
            CkJsonObject::setCkJ(json, j)
            intVal = CkJsonObject::ckIntOf(json,"product.images[i].variant_ids[j]")
            j = j + 1
        Wend
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"image.product.variant_ids")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        i = i + 1
    Wend

    ; 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": [
    ;       ]
    ;     }
    ;   }
    ; }

    Debug "Example Completed."


    CkRest::ckDispose(rest)
    CkJsonObject::ckDispose(jsonReq)
    CkStringBuilder::ckDispose(sbReq)
    CkStringBuilder::ckDispose(sbJson)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure