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

Visual FoxPro
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