Lua Requires Chilkat v11.0.0+
Lua
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 Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local consumerId = "b68d2a72...."
local baseUrl = "https://marketplace.walmartapis.com/v2/feeds"
-- This is your Base64 encoded private key
local privateEncodedStr = "MIICeAIBADANBgkqhkiG9w0BAQEFAA......"
local httpMethod = "GET"
-- We need a timestamp in decimal string form representing the number of milliseconds since Jan 01 1970 UTC.
local dt = chilkat.DateTime.new()
-- Set bLocal = true for a timestamp in the local timezone. Set bLocal = false for a UTC timestamp.
local bLocal = false
-- This gets the timestamp in seconds, not milliseconds.
local timeStampVal = dt:get_as_unix_time(bLocal)
-- Build the string to sign.
local sbStringToSign = chilkat.StringBuilder.new()
sbStringToSign:append(consumerId)
sbStringToSign:append("\n")
sbStringToSign:append(baseUrl)
sbStringToSign:append("\n")
sbStringToSign:append(httpMethod)
sbStringToSign:append("\n")
sbStringToSign:append_int(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")
local privKey = chilkat.PrivateKey.new()
-- 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.
local success = privKey:load_pem(privateEncodedStr)
if not success then
print(privKey.last_error_text)
return
end
local rsa = chilkat.Rsa.new()
success = rsa:use_private_key(privKey)
if not success then
print(rsa.last_error_text)
return
end
-- We want a base64 signature string.
rsa.encoding_mode = "base64"
local signatureString = rsa:sign_string_enc(sbStringToSign:get_as_string(), "SHA256")
if not rsa.last_method_success then
print(rsa.last_error_text)
return
end
print("Signature String: " .. signatureString)