Swift
Swift
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 Swift Downloads
func chilkatTest() {
var success: Bool = false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
var consumerId: String? = "b68d2a72...."
var baseUrl: String? = "https://marketplace.walmartapis.com/v2/feeds"
// This is your Base64 encoded private key
var privateEncodedStr: String? = "MIICeAIBADANBgkqhkiG9w0BAQEFAA......"
var httpMethod: String? = "GET"
// We need a timestamp in decimal string form representing the number of milliseconds since Jan 01 1970 UTC.
let dt = CkoDateTime()!
// Set bLocal = true for a timestamp in the local timezone. Set bLocal = false for a UTC timestamp.
var bLocal: Bool = false
// This gets the timestamp in seconds, not milliseconds.
var timeStampVal: Int = dt.get(asUnixTime: bLocal)
// Build the string to sign.
let sbStringToSign = CkoStringBuilder()!
sbStringToSign.append(value: consumerId)
sbStringToSign.append(value: "\n")
sbStringToSign.append(value: baseUrl)
sbStringToSign.append(value: "\n")
sbStringToSign.append(value: httpMethod)
sbStringToSign.append(value: "\n")
sbStringToSign.appendInt(value: 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(value: "000\n")
let privKey = CkoPrivateKey()!
// 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(str: privateEncodedStr)
if success == false {
print("\(privKey.lastErrorText!)")
return
}
let rsa = CkoRsa()!
success = rsa.usePrivateKey(privKey: privKey)
if success == false {
print("\(rsa.lastErrorText!)")
return
}
// We want a base64 signature string.
rsa.encodingMode = "base64"
var signatureString: String? = rsa.signStringENC(str: sbStringToSign.getAsString(), hashAlg: "SHA256")
if rsa.lastMethodSuccess == false {
print("\(rsa.lastErrorText!)")
return
}
print("Signature String: \(signatureString!)")
}