Objective-C
Objective-C
effectconnect Product Update
See more effectconnect Examples
Use this call to update a product (f.e. stock or price) in EffectConnect.Chilkat Objective-C Downloads
#import <NSString.h>
#import <CkoHttp.h>
#import <CkoHttpRequest.h>
#import <CkoDateTime.h>
#import <CkoStringBuilder.h>
#import <CkoCrypt2.h>
#import <CkoHttpResponse.h>
#import <CkoXml.h>
BOOL success = NO;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
NSString *uri = @"/products";
NSString *apiVersion = @"2.0";
CkoHttp *http = [[CkoHttp alloc] init];
CkoHttpRequest *req = [[CkoHttpRequest alloc] init];
// Use your effectconnect public key here...
[req AddHeader: @"KEY" value: @"PUBLIC_KEY"];
[req AddHeader: @"VERSION" value: apiVersion];
[req AddHeader: @"URI" value: uri];
[req AddHeader: @"RESPONSETYPE" value: @"XML"];
[req AddHeader: @"RESPONSELANGUAGE" value: @"en"];
// Get the current date/time in timestamp format.
CkoDateTime *dt = [[CkoDateTime alloc] init];
[dt SetFromCurrentSystemTime];
NSString *timestamp = [dt GetAsTimestamp: YES];
[req AddHeader: @"TIME" value: timestamp];
NSLog(@"%@%@",@"timestamp = ",timestamp);
CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init];
success = [sbXml LoadFile: @"qa_data/xml/effectconnect/effconUpdate.xml" charset: @"utf-8"];
NSLog(@"%@%d",@"length = ",[sbXml.Length intValue]);
req.HttpVerb = @"PUT";
req.Path = uri;
req.ContentType = @"multipart/form-data";
success = [req AddStringForUpload: @"payload" filename: @"effconUpdate.xml" strData: [sbXml GetAsString] charset: @"utf-8"];
if (success == NO) {
NSLog(@"%@",req.LastErrorText);
return;
}
// Build a string-to-sign and sign it using our effectconnect private key
CkoStringBuilder *sbStringToSign = [[CkoStringBuilder alloc] init];
[sbStringToSign AppendInt: sbXml.Length];
[sbStringToSign Append: @"PUT"];
[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"];
[req AddHeader: @"SIGNATURE" value: [crypt MacStringENC: [sbStringToSign GetAsString]]];
CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpSReq: @"submit.effectconnect.com" port: [NSNumber numberWithInt: 443] ssl: YES request: req 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]);
// A sample response:
// <?xml version="1.0" encoding="utf-8"?>
// <ApiResponseContainer>
// <Request>
// <RequestType>Products</RequestType>
// <RequestAction>Update</RequestAction>
// <RequestVersion>2.0</RequestVersion>
// <RequestIdentifier/>
// <ProcessedAt>2019-04-18T15:37:32+02:00</ProcessedAt>
// </Request>
// <Response>
// <Result>Success</Result>
// <ProductsUpdateResponseContainer>
// <ProcessID><![CDATA[f81ngzD2S7gooFk3]]></ProcessID>
// </ProductsUpdateResponseContainer>
// </Response>
// </ApiResponseContainer>
//
NSString *tagPath = 0;
NSString *RequestType = 0;
NSString *RequestAction = 0;
NSString *RequestVersion = 0;
NSString *ProcessedAt = 0;
NSString *Result = 0;
NSString *ProcessID = 0;
RequestType = [xmlResp GetChildContent: @"Request|RequestType"];
RequestAction = [xmlResp GetChildContent: @"Request|RequestAction"];
RequestVersion = [xmlResp GetChildContent: @"Request|RequestVersion"];
ProcessedAt = [xmlResp GetChildContent: @"Request|ProcessedAt"];
Result = [xmlResp GetChildContent: @"Response|Result"];
ProcessID = [xmlResp GetChildContent: @"Response|ProductsUpdateResponseContainer|ProcessID"];