Sample code for 30+ languages & platforms
Swift Requires Chilkat v11.0.0+

effectconnect Read Orderlist

See more effectconnect Examples

Get a set of orders filtered by the parameters in the XML payload.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    //  This example assumes the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    var fullUri: String? = "https://submit.effectconnect.com/orderlist"
    var uri: String? = "/orderlist"
    var apiVersion: String? = "2.0"

    let http = CkoHttp()!

    //  Use your effectconnect public key here..
    http.setRequestHeader(name: "KEY", value: "PUBLIC_KEY")
    http.setRequestHeader(name: "VERSION", value: apiVersion)
    http.setRequestHeader(name: "URI", value: uri)
    http.setRequestHeader(name: "RESPONSETYPE", value: "XML")
    http.setRequestHeader(name: "RESPONSELANGUAGE", value: "en")

    //  Get the current date/time in timestamp format.
    let dt = CkoDateTime()!
    dt.setFromCurrentSystemTime()
    var timestamp: String? = dt.get(asTimestamp: true)

    http.setRequestHeader(name: "TIME", value: timestamp)
    print("timestamp = \(timestamp!)")

    //  Create the following XML request body:
    //  <?xml version="1.0" encoding="utf-8"?>
    //  <list>
    //    <filters>
    //      <fromDateFilter>
    //        <filterValue>2018-09-14T12:12:12+01:00</filterValue>
    //      </fromDateFilter>
    //      <toDateFilter>
    //        <filterValue>2019-04-13T23:59:59+01:00</filterValue>
    //      </toDateFilter>
    //      <hasStatusFilter>
    //        <filterValue>paid</filterValue>
    //      </hasStatusFilter>
    //      <hasTagFilter>
    //        <filterValue>
    //          <tagName>Test</tagName>
    //          <exclude>false</exclude>
    //        </filterValue>
    //      </hasTagFilter>
    //    </filters>
    //  </list>

    //  Use this online tool to generate the code from sample XML: 
    //  Generate Code to Create XML

    let xml = CkoXml()!
    xml.tag = "list"
    xml.updateChildContent(tagPath: "filters|fromDateFilter|filterValue", value: "2018-09-14T12:12:12+01:00")
    xml.updateChildContent(tagPath: "filters|toDateFilter|filterValue", value: "2019-04-13T23:59:59+01:00")
    xml.updateChildContent(tagPath: "filters|hasStatusFilter|filterValue", value: "paid")
    xml.updateChildContent(tagPath: "filters|hasTagFilter|filterValue|tagName", value: "Test")
    xml.updateChildContent(tagPath: "filters|hasTagFilter|filterValue|exclude", value: "false")
    xml.emitCompact = true

    let sbXml = CkoStringBuilder()!
    xml.getSb(sb: sbXml)

    //  Build a string-to-sign and sign it using our effectconnect private key
    let sbStringToSign = CkoStringBuilder()!
    sbStringToSign.appendInt(value: sbXml.length.intValue)
    sbStringToSign.append(value: "POST")
    sbStringToSign.append(value: uri)
    sbStringToSign.append(value: apiVersion)
    sbStringToSign.append(value: timestamp)

    let crypt = CkoCrypt2()!
    crypt.macAlgorithm = "hmac"
    crypt.hashAlgorithm = "sha512"
    crypt.encodingMode = "base64"
    //  Use your effectconnect private key here:
    crypt.setMacKeyString(key: "PRIVATE_KEY")
    http.setRequestHeader(name: "SIGNATURE", value: crypt.macStringENC(inText: sbStringToSign.getAsString()))

    //  Send the POST..
    let resp = CkoHttpResponse()!
    success = http.httpStr(verb: "POST", url: fullUri, bodyStr: xml.getXml(), charset: "utf-8", contentType: "application/xml", response: resp)
    if success == false {
        print("\(http.lastErrorText!)")
        return
    }

    print("response status code = \(resp.statusCode.intValue)")

    //  Examine the response.  The response status code can be 200 for both errors and success.
    //  The success or error is based on the XML returned in the response body.
    let xmlResp = CkoXml()!
    xmlResp.load(xmlData: resp.bodyStr)

    print("response body:")
    print("\(xmlResp.getXml()!)")

    //  Remove previously set headers (unless we want the same headers for the next request,
    //  in which case we may remove or update individual headers by calling SetRequestHeader.
    http.clearHeaders()

}