Objective-C
Objective-C
Walmart Partner API Authentication (Generate a Signature for a Request)
See more RSA Examples
Demonstrates how to generate a signature for a Walmart Partner REST API call.Chilkat Objective-C Downloads
#import <NSString.h>
#import <CkoDateTime.h>
#import <CkoStringBuilder.h>
#import <CkoPrivateKey.h>
#import <CkoRsa.h>
BOOL success = NO;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
NSString *consumerId = @"b68d2a72....";
NSString *baseUrl = @"https://marketplace.walmartapis.com/v2/feeds";
// This is your Base64 encoded private key
NSString *privateEncodedStr = @"MIICeAIBADANBgkqhkiG9w0BAQEFAA......";
NSString *httpMethod = @"GET";
// We need a timestamp in decimal string form representing the number of milliseconds since Jan 01 1970 UTC.
CkoDateTime *dt = [[CkoDateTime alloc] init];
// Set bLocal = YES for a timestamp in the local timezone. Set bLocal = NO for a UTC timestamp.
BOOL bLocal = NO;
// This gets the timestamp in seconds, not milliseconds.
int timeStampVal = [dt GetAsUnixTime: bLocal];
// Build the string to sign.
CkoStringBuilder *sbStringToSign = [[CkoStringBuilder alloc] init];
[sbStringToSign Append: consumerId];
[sbStringToSign Append: @"\n"];
[sbStringToSign Append: baseUrl];
[sbStringToSign Append: @"\n"];
[sbStringToSign Append: httpMethod];
[sbStringToSign Append: @"\n"];
[sbStringToSign AppendInt: [NSNumber numberWithInt: timeStampVal]];
// We add three zero's so that the timestamp value is in milliseconds.
// We don't care about accuracy down to less than a second.
// All the server cares about is that the request was signed at the current date/time
// within some reasonable margin of error (to account for systems having clocks
// that may be slightly different).
[sbStringToSign Append: @"000\n"];
CkoPrivateKey *privKey = [[CkoPrivateKey alloc] init];
// Load the private key into a private key object.
// Note: Technically the private key is not PEM because it lacks the header/footer strings
// used for PEM. However, the LoadPem method will still accept it and load it correctly.
success = [privKey LoadPem: privateEncodedStr];
if (success == NO) {
NSLog(@"%@",privKey.LastErrorText);
return;
}
CkoRsa *rsa = [[CkoRsa alloc] init];
success = [rsa UsePrivateKey: privKey];
if (success == NO) {
NSLog(@"%@",rsa.LastErrorText);
return;
}
// We want a base64 signature string.
rsa.EncodingMode = @"base64";
NSString *signatureString = [rsa SignStringENC: [sbStringToSign GetAsString] hashAlg: @"SHA256"];
if (rsa.LastMethodSuccess == NO) {
NSLog(@"%@",rsa.LastErrorText);
return;
}
NSLog(@"%@%@",@"Signature String: ",signatureString);