Visual FoxPro
Visual FoxPro
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 Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL lcConsumerId
LOCAL lcBaseUrl
LOCAL lcPrivateEncodedStr
LOCAL lcHttpMethod
LOCAL loDt
LOCAL lnBLocal
LOCAL lnTimeStampVal
LOCAL loSbStringToSign
LOCAL loPrivKey
LOCAL loRsa
LOCAL lcSignatureString
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
lcConsumerId = "b68d2a72...."
lcBaseUrl = "https://marketplace.walmartapis.com/v2/feeds"
* This is your Base64 encoded private key
lcPrivateEncodedStr = "MIICeAIBADANBgkqhkiG9w0BAQEFAA......"
lcHttpMethod = "GET"
* We need a timestamp in decimal string form representing the number of milliseconds since Jan 01 1970 UTC.
loDt = CreateObject('Chilkat.CkDateTime')
* Set bLocal = 1 for a timestamp in the local timezone. Set bLocal = 0 for a UTC timestamp.
lnBLocal = 0
* This gets the timestamp in seconds, not milliseconds.
lnTimeStampVal = loDt.GetAsUnixTime(lnBLocal)
* Build the string to sign.
loSbStringToSign = CreateObject('Chilkat.StringBuilder')
loSbStringToSign.Append(lcConsumerId)
loSbStringToSign.Append(CHR(10))
loSbStringToSign.Append(lcBaseUrl)
loSbStringToSign.Append(CHR(10))
loSbStringToSign.Append(lcHttpMethod)
loSbStringToSign.Append(CHR(10))
loSbStringToSign.AppendInt(lnTimeStampVal)
* 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).
loSbStringToSign.Append("000" + CHR(10))
loPrivKey = CreateObject('Chilkat.PrivateKey')
* 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.
lnSuccess = loPrivKey.LoadPem(lcPrivateEncodedStr)
IF (lnSuccess = 0) THEN
? loPrivKey.LastErrorText
RELEASE loDt
RELEASE loSbStringToSign
RELEASE loPrivKey
CANCEL
ENDIF
loRsa = CreateObject('Chilkat.Rsa')
lnSuccess = loRsa.UsePrivateKey(loPrivKey)
IF (lnSuccess = 0) THEN
? loRsa.LastErrorText
RELEASE loDt
RELEASE loSbStringToSign
RELEASE loPrivKey
RELEASE loRsa
CANCEL
ENDIF
* We want a base64 signature string.
loRsa.EncodingMode = "base64"
lcSignatureString = loRsa.SignStringENC(loSbStringToSign.GetAsString(),"SHA256")
IF (loRsa.LastMethodSuccess = 0) THEN
? loRsa.LastErrorText
RELEASE loDt
RELEASE loSbStringToSign
RELEASE loPrivKey
RELEASE loRsa
CANCEL
ENDIF
? "Signature String: " + lcSignatureString
RELEASE loDt
RELEASE loSbStringToSign
RELEASE loPrivKey
RELEASE loRsa