Sample code for 30+ languages & platforms
Swift

Shopify Create a new product with multiple product variants

See more Shopify Examples

Create a new product with multiple product variants

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    let rest = CkoRest()!

    rest.setAuthBasic(username: "SHOPIFY_PRIVATE_API_KEY", password: "SHOPIFY_PRIVATE_API_KEY")

    success = rest.connect(hostname: "chilkat.myshopify.com", port: 443, tls: true, autoReconnect: true)
    if success != true {
        print("\(rest.lastErrorText!)")
        return
    }

    // The following code creates the JSON request body.
    // The JSON created by this code is shown below.
    let jsonReq = CkoJsonObject()!
    jsonReq.updateString(jsonPath: "product.title", value: "Burton Custom Freestyle 151")
    jsonReq.updateString(jsonPath: "product.body_html", value: "<strong>Good snowboard!</strong>")
    jsonReq.updateString(jsonPath: "product.vendor", value: "Burton")
    jsonReq.updateString(jsonPath: "product.product_type", value: "Snowboard")
    jsonReq.updateString(jsonPath: "product.variants[0].option1", value: "First")
    jsonReq.updateString(jsonPath: "product.variants[0].price", value: "10.00")
    jsonReq.updateString(jsonPath: "product.variants[0].sku", value: "123")
    jsonReq.updateString(jsonPath: "product.variants[1].option1", value: "Second")
    jsonReq.updateString(jsonPath: "product.variants[1].price", value: "20.00")
    jsonReq.updateString(jsonPath: "product.variants[1].sku", value: "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"
    //       }
    //     ]
    //   }
    // }

    let sbReq = CkoStringBuilder()!
    jsonReq.emitSb(sb: sbReq)

    rest.addHeader(name: "Content-Type", value: "application/json")

    let sbJson = CkoStringBuilder()!
    success = rest.fullRequestSb(httpVerb: "POST", uriPath: "/admin/products.json ", requestBody: sbReq, responseBody: sbJson)
    if success != true {
        print("\(rest.lastErrorText!)")
        return
    }

    if rest.responseStatusCode.intValue != 201 {
        print("Received error response code: \(rest.responseStatusCode.intValue)")
        print("Response body:")
        print("\(sbJson.getAsString()!)")
        return
    }

    let json = CkoJsonObject()!
    json.loadSb(sb: sbJson)

    // The following code parses the JSON response.
    // A sample JSON response is shown below the sample code.
    var productId: Int
    var productTitle: String?
    var productBody_html: String?
    var productVendor: String?
    var productProduct_type: String?
    var productCreated_at: String?
    var productHandle: String?
    var productUpdated_at: String?
    var productPublished_at: String?
    var productTemplate_suffix: Bool
    var productPublished_scope: String?
    var productTags: String?
    var productImage: Bool
    var i: Int
    var count_i: Int
    var id: Int
    var product_id: Int
    var title: String?
    var price: String?
    var sku: String?
    var position: Int
    var grams: Int
    var inventory_policy: String?
    var compare_at_price: Bool
    var fulfillment_service: String?
    var inventory_management: Bool
    var option1: String?
    var option2: Bool
    var option3: Bool
    var created_at: String?
    var updated_at: String?
    var taxable: Bool
    var barcode: Bool
    var image_id: Bool
    var inventory_quantity: Int
    var weight: Int
    var weight_unit: String?
    var old_inventory_quantity: Int
    var requires_shipping: Bool
    var name: String?
    var j: Int
    var count_j: Int
    var strVal: String?

    productId = json.int(of: "product.id").intValue
    productTitle = json.string(of: "product.title")
    productBody_html = json.string(of: "product.body_html")
    productVendor = json.string(of: "product.vendor")
    productProduct_type = json.string(of: "product.product_type")
    productCreated_at = json.string(of: "product.created_at")
    productHandle = json.string(of: "product.handle")
    productUpdated_at = json.string(of: "product.updated_at")
    productPublished_at = json.string(of: "product.published_at")
    productTemplate_suffix = json.isNull(of: "product.template_suffix")
    productPublished_scope = json.string(of: "product.published_scope")
    productTags = json.string(of: "product.tags")
    productImage = json.isNull(of: "product.image")
    i = 0
    count_i = json.size(ofArray: "product.variants").intValue
    while i < count_i {
        json.i = i
        id = json.int(of: "product.variants[i].id").intValue
        product_id = json.int(of: "product.variants[i].product_id").intValue
        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").intValue
        grams = json.int(of: "product.variants[i].grams").intValue
        inventory_policy = json.string(of: "product.variants[i].inventory_policy")
        compare_at_price = json.isNull(of: "product.variants[i].compare_at_price")
        fulfillment_service = json.string(of: "product.variants[i].fulfillment_service")
        inventory_management = json.isNull(of: "product.variants[i].inventory_management")
        option1 = json.string(of: "product.variants[i].option1")
        option2 = json.isNull(of: "product.variants[i].option2")
        option3 = json.isNull(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.isNull(of: "product.variants[i].barcode")
        image_id = json.isNull(of: "product.variants[i].image_id")
        inventory_quantity = json.int(of: "product.variants[i].inventory_quantity").intValue
        weight = json.int(of: "product.variants[i].weight").intValue
        weight_unit = json.string(of: "product.variants[i].weight_unit")
        old_inventory_quantity = json.int(of: "product.variants[i].old_inventory_quantity").intValue
        requires_shipping = json.bool(of: "product.variants[i].requires_shipping")
        i = i + 1
    }

    i = 0
    count_i = json.size(ofArray: "product.options").intValue
    while i < count_i {
        json.i = i
        id = json.int(of: "product.options[i].id").intValue
        product_id = json.int(of: "product.options[i].product_id").intValue
        name = json.string(of: "product.options[i].name")
        position = json.int(of: "product.options[i].position").intValue
        j = 0
        count_j = json.size(ofArray: "product.options[i].values").intValue
        while j < count_j {
            json.j = j
            strVal = json.string(of: "product.options[i].values[j]")
            j = j + 1
        }

        i = i + 1
    }

    i = 0
    count_i = json.size(ofArray: "product.images").intValue
    while i < count_i {
        json.i = i
        i = i + 1
    }

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

    print("Example Completed.")

}