Sample code for 30+ languages & platforms
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

Objective-C
#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);