Sample code for 30+ languages & platforms
Swift

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()

}