Swift
Swift
Add order to a ShippingEasy account
See more HTTP Misc Examples
Adds an order to a ShippingEasy account (calls the ShippingEasy REST API).Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First create the JSON for the order.
// See https://shippingeasy.readme.io/v1.0/docs/creating-a-signature
// for sample JSON.
// You may use the online tool at https://tools.chilkat.io/Default.cshtml to
// generate the following code by pasting sample JSON into the tool.
let json = CkoJsonObject()!
json.updateString(jsonPath: "order.external_order_identifier", value: "ABC-100")
json.updateString(jsonPath: "order.ordered_at", value: "2014-01-16 14:37:56 -0600")
json.updateString(jsonPath: "order.order_status", value: "awaiting_shipment")
json.updateString(jsonPath: "order.subtotal_including_tax", value: "10.00")
json.updateString(jsonPath: "order.total_including_tax", value: "10.00")
json.updateString(jsonPath: "order.total_excluding_tax", value: "10.00")
json.updateString(jsonPath: "order.discount_amount", value: "0.00")
json.updateString(jsonPath: "order.coupon_discount", value: "1.00")
json.updateString(jsonPath: "order.subtotal_including_tax", value: "0.00")
json.updateString(jsonPath: "order.subtotal_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.subtotal_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.subtotal_tax", value: "0.00")
json.updateString(jsonPath: "order.total_tax", value: "0")
json.updateString(jsonPath: "order.base_shipping_cost", value: "0.00")
json.updateString(jsonPath: "order.shipping_cost_including_tax", value: "0.00")
json.updateString(jsonPath: "order.shipping_cost_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.shipping_cost_tax", value: "0.00")
json.updateString(jsonPath: "order.base_handling_cost", value: "0.00")
json.updateString(jsonPath: "order.handling_cost_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.handling_cost_including_tax", value: "0.00")
json.updateString(jsonPath: "order.handling_cost_tax", value: "0.00")
json.updateString(jsonPath: "order.base_wrapping_cost", value: "0.00")
json.updateString(jsonPath: "order.wrapping_cost_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.wrapping_cost_including_tax", value: "0.00")
json.updateString(jsonPath: "order.wrapping_cost_tax", value: "0.00")
json.updateString(jsonPath: "order.notes", value: "Please send promptly.")
json.updateString(jsonPath: "order.billing_company", value: "Acme Inc.")
json.updateString(jsonPath: "order.billing_first_name", value: "Fred")
json.updateString(jsonPath: "order.billing_last_name", value: "Jones")
json.updateString(jsonPath: "order.billing_address", value: "1234 Street")
json.updateString(jsonPath: "order.billing_address2", value: "Suite 100")
json.updateString(jsonPath: "order.billing_city", value: "Austin")
json.updateString(jsonPath: "order.billing_state", value: "TX")
json.updateString(jsonPath: "order.billing_postal_code", value: "78701")
json.updateString(jsonPath: "order.billing_country", value: "USA")
json.updateString(jsonPath: "order.billing_phone_number", value: "512-123-1234")
json.updateString(jsonPath: "order.billing_email", value: "test@test.com")
json.updateString(jsonPath: "order.recipients[0].first_name", value: "Colin")
json.updateString(jsonPath: "order.recipients[0].last_name", value: "Homenick")
json.updateString(jsonPath: "order.recipients[0].company", value: "Wintheiser-Hickle")
json.updateString(jsonPath: "order.recipients[0].email", value: "charles.crona@okeefe.org")
json.updateString(jsonPath: "order.recipients[0].phone_number", value: "637-481-6505")
json.updateString(jsonPath: "order.recipients[0].residential", value: "true")
json.updateString(jsonPath: "order.recipients[0].address", value: "21937 Adelbert Springs")
json.updateString(jsonPath: "order.recipients[0].address2", value: "")
json.updateString(jsonPath: "order.recipients[0].province", value: "")
json.updateString(jsonPath: "order.recipients[0].state", value: "CT")
json.updateString(jsonPath: "order.recipients[0].city", value: "Terryfurt")
json.updateString(jsonPath: "order.recipients[0].postal_code", value: "93322")
json.updateString(jsonPath: "order.recipients[0].postal_code_plus_4", value: "1234")
json.updateString(jsonPath: "order.recipients[0].country", value: "Andorra")
json.updateString(jsonPath: "order.recipients[0].shipping_method", value: "Ground")
json.updateString(jsonPath: "order.recipients[0].base_cost", value: "10.00")
json.updateString(jsonPath: "order.recipients[0].cost_excluding_tax", value: "10.00")
json.updateString(jsonPath: "order.recipients[0].cost_tax", value: "0.00")
json.updateString(jsonPath: "order.recipients[0].base_handling_cost", value: "0.00")
json.updateString(jsonPath: "order.recipients[0].handling_cost_excluding_tax", value: "0.00")
json.updateString(jsonPath: "order.recipients[0].handling_cost_including_tax", value: "0.00")
json.updateString(jsonPath: "order.recipients[0].handling_cost_tax", value: "0.00")
json.updateString(jsonPath: "order.recipients[0].shipping_zone_id", value: "123")
json.updateString(jsonPath: "order.recipients[0].shipping_zone_name", value: "XYZ")
json.updateString(jsonPath: "order.recipients[0].items_total", value: "1")
json.updateString(jsonPath: "order.recipients[0].items_shipped", value: "0")
json.updateString(jsonPath: "order.recipients[0].line_items[0].item_name", value: "Pencil Holder")
json.updateString(jsonPath: "order.recipients[0].line_items[0].sku", value: "9876543")
json.updateString(jsonPath: "order.recipients[0].line_items[0].bin_picking_number", value: "7")
json.updateString(jsonPath: "order.recipients[0].line_items[0].unit_price", value: "1.30")
json.updateString(jsonPath: "order.recipients[0].line_items[0].total_excluding_tax", value: "1.30")
json.updateString(jsonPath: "order.recipients[0].line_items[0].weight_in_ounces", value: "10")
json.updateString(jsonPath: "order.recipients[0].line_items[0].product_options.pa_size", value: "large")
json.updateString(jsonPath: "order.recipients[0].line_items[0].product_options.Colour", value: "Blue")
json.updateString(jsonPath: "order.recipients[0].line_items[0].quantity", value: "1")
// Replace these values with your actual apiKey and apiSecret.
// (These are not valid values..)
var storeApiKey: String? = "569dc30d267f2c4d1f85f9920b2bf9f4"
var apiKey: String? = "f9a7c8ebdfd34beaf260d9b0296c7059"
var apiSecret: String? = "d3e9f8737d7196b1271a725f89e2156672bc1d900a25e6e0c1364e2f7a20f605"
// Our request will be sent to:
// https://app.shippingeasy.com/api/stores/:store_api_key/orders
// The path part of this request is: /api/stores/:store_api_key/orders
// See https://shippingeasy.readme.io/v1.0/docs/authentication-signing-requests
let sbSigStr = CkoStringBuilder()!
sbSigStr.append(value: "POST&/api/stores/")
sbSigStr.append(value: storeApiKey)
sbSigStr.append(value: "/orders&")
sbSigStr.append(value: "api_key=")
sbSigStr.append(value: apiKey)
sbSigStr.append(value: "&api_timestamp=")
let dt = CkoDateTime()!
dt.setFromCurrentSystemTime()
sbSigStr.append(value: dt.get(asUnixTimeStr: false))
sbSigStr.append(value: "&")
json.emitCompact = true
json.emitSb(sb: sbSigStr)
// Calculate the HMAC-SHA256 of the API Signature String using the API Secret as the HMAC key.
let crypt = CkoCrypt2()!
crypt.macAlgorithm = "hmac"
crypt.encodingMode = "hex"
crypt.setMacKeyString(key: apiSecret)
crypt.hashAlgorithm = "sha256"
let sbSignature = CkoStringBuilder()!
sbSignature.append(value: crypt.macStringENC(inText: sbSigStr.getAsString()))
sbSignature.toLowercase()
let sbUrl = CkoStringBuilder()!
sbUrl.append(value: "https://app.shippingeasy.com/api/stores/")
sbUrl.append(value: storeApiKey)
sbUrl.append(value: "/orders?")
sbUrl.append(value: "api_key=")
sbUrl.append(value: apiKey)
sbUrl.append(value: "&api_timestamp=")
sbUrl.append(value: dt.get(asUnixTimeStr: false))
sbUrl.append(value: "&api_signature=")
sbUrl.append(value: sbSignature.getAsString())
// Send a POST equivalent the following curl request:
// curl -H "Content-Type: application/json" --data @body.json "https://app.shippingeasy.com/api/stores/27aa472e16faa83dd13b7758d31974ed/orders?
// api_key=f9a7c8ebdfd34beaf260d9b0296c7059&
// api_timestamp=1401803554&
// api_signature=c65f43beed46e581939898a78acd10064cfa146845e97885ec02124d7ad648e4"
let http = CkoHttp()!
http.sessionLogFilename = "qa_output/shippingEasy.txt"
var url: String? = sbUrl.getAsString()
let resp = CkoHttpResponse()!
success = http.httpJson(verb: "POST", url: url, json: json, contentType: "application/json", response: resp)
if success == false {
print("\(http.lastErrorText!)")
return
}
print("response status code = \(resp.statusCode.intValue)")
print("response body:")
print("\(resp.bodyStr!)")
}