Sample code for 30+ languages & platforms
Objective-C

effectconnect Read Orderlist

See more effectconnect Examples

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

Chilkat Objective-C Downloads

Objective-C
#import <NSString.h>
#import <CkoHttp.h>
#import <CkoDateTime.h>
#import <CkoXml.h>
#import <CkoStringBuilder.h>
#import <CkoCrypt2.h>
#import <CkoHttpResponse.h>

BOOL success = NO;

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

NSString *fullUri = @"https://submit.effectconnect.com/orderlist";
NSString *uri = @"/orderlist";
NSString *apiVersion = @"2.0";

CkoHttp *http = [[CkoHttp alloc] init];

// Use your effectconnect public key here..
[http SetRequestHeader: @"KEY" value: @"PUBLIC_KEY"];
[http SetRequestHeader: @"VERSION" value: apiVersion];
[http SetRequestHeader: @"URI" value: uri];
[http SetRequestHeader: @"RESPONSETYPE" value: @"XML"];
[http SetRequestHeader: @"RESPONSELANGUAGE" value: @"en"];

// Get the current date/time in timestamp format.
CkoDateTime *dt = [[CkoDateTime alloc] init];
[dt SetFromCurrentSystemTime];
NSString *timestamp = [dt GetAsTimestamp: YES];

[http SetRequestHeader: @"TIME" value: timestamp];
NSLog(@"%@%@",@"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

CkoXml *xml = [[CkoXml alloc] init];
xml.Tag = @"list";
[xml UpdateChildContent: @"filters|fromDateFilter|filterValue" value: @"2018-09-14T12:12:12+01:00"];
[xml UpdateChildContent: @"filters|toDateFilter|filterValue" value: @"2019-04-13T23:59:59+01:00"];
[xml UpdateChildContent: @"filters|hasStatusFilter|filterValue" value: @"paid"];
[xml UpdateChildContent: @"filters|hasTagFilter|filterValue|tagName" value: @"Test"];
[xml UpdateChildContent: @"filters|hasTagFilter|filterValue|exclude" value: @"false"];
xml.EmitCompact = YES;

CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init];
[xml GetXmlSb: sbXml];

// Build a string-to-sign and sign it using our effectconnect private key
CkoStringBuilder *sbStringToSign = [[CkoStringBuilder alloc] init];
[sbStringToSign AppendInt: sbXml.Length];
[sbStringToSign Append: @"POST"];
[sbStringToSign Append: uri];
[sbStringToSign Append: apiVersion];
[sbStringToSign Append: timestamp];

CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init];
crypt.MacAlgorithm = @"hmac";
crypt.HashAlgorithm = @"sha512";
crypt.EncodingMode = @"base64";
// Use your effectconnect private key here:
[crypt SetMacKeyString: @"PRIVATE_KEY"];
[http SetRequestHeader: @"SIGNATURE" value: [crypt MacStringENC: [sbStringToSign GetAsString]]];

// Send the POST..
CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpStr: @"POST" url: fullUri bodyStr: [xml GetXml] charset: @"utf-8" contentType: @"application/xml" response: resp];
if (success == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

NSLog(@"%@%d",@"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.
CkoXml *xmlResp = [[CkoXml alloc] init];
[xmlResp LoadXml: resp.BodyStr];

NSLog(@"%@",@"response body:");
NSLog(@"%@",[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];