Sample code for 30+ languages & platforms
Xbase++

Create Restricted Data Token (RDT)

See more Amazon SP-API Examples

Returns a Restricted Data Token (RDT) for one or more restricted resources that you specify.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oAuthAws
LOCAL oRest
LOCAL nBTls
LOCAL nPort
LOCAL nBAutoReconnect
LOCAL oJsonToken
LOCAL cLwa_token
LOCAL oJson
LOCAL oSbRequest
LOCAL oSbResponse
LOCAL cUri
LOCAL nStatusCode
LOCAL oJsonResp
LOCAL nExpiresIn
LOCAL cRestrictedDataToken

nSuccess := 0

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oAuthAws := CreateObject("Chilkat.AuthAws")
oAuthAws:AccessKey := "AWS_ACCESS_KEY"
oAuthAws:SecretKey := "AWS_SECRET_KEY"
oAuthAws:ServiceName := "execute-api"
//  Use the region that is correct for your needs.
oAuthAws:Region := "eu-west-1"

oRest := CreateObject("Chilkat.Rest")
nBTls := 1
nPort := 443
nBAutoReconnect := 1
//  The sandbox endpoint (sandbox.sellingpartnerapi-eu.amazon.com) fails.
//  Use the production endpoint and see the note below.
nSuccess := oRest:Connect("sellingpartnerapi-eu.amazon.com", nPort, nBTls, nBAutoReconnect)
IF (nSuccess == 0)
    ? oRest:LastErrorText
    oAuthAws:destroy()
    oRest:destroy()
    RETURN
ENDIF

nSuccess := oRest:SetAuthAws(oAuthAws)

//  Load the previously obtained LWA access token.
//  See Fetch SP-API LWA Access Token
oJsonToken := CreateObject("Chilkat.JsonObject")
nSuccess := oJsonToken:LoadFile("qa_data/tokens/sp_api_lwa_token.json")
IF (nSuccess == 0)
    ? "Failed to load LWA access token."
    oAuthAws:destroy()
    oRest:destroy()
    oJsonToken:destroy()
    RETURN
ENDIF

//  Add the x-amz-access-token request header.
cLwa_token := oJsonToken:StringOf("access_token")
oRest:ClearAllHeaders()
oRest:AddHeader("x-amz-access-token", cLwa_token)

//  We're going to send a POST with the following JSON body:

//  {
//    "restrictedResources": [
//      {
//        "method": "GET",
//        "path": "/orders/v0/orders",
//        "dataElements": ["buyerInfo", "shippingAddress"]
//      }
//    ]
//  }

//  Use this online tool to generate code from sample JSON: 
//  Generate Code to Create JSON

oJson := CreateObject("Chilkat.JsonObject")
oJson:UpdateString("restrictedResources[0].method", "GET")
oJson:UpdateString("restrictedResources[0].path", "/orders/v0/orders")
oJson:UpdateString("restrictedResources[0].dataElements[0]", "buyerInfo")
oJson:UpdateString("restrictedResources[0].dataElements[1]", "shippingAddress")

oSbRequest := CreateObject("Chilkat.StringBuilder")
oJson:EmitSb(oSbRequest)

oSbResponse := CreateObject("Chilkat.StringBuilder")
cUri := "/tokens/2021-03-01/restrictedDataToken"
nSuccess := oRest:FullRequestSb("POST", cUri, oSbRequest, oSbResponse)
IF (nSuccess == 0)
    ? oRest:LastErrorText
    oAuthAws:destroy()
    oRest:destroy()
    oJsonToken:destroy()
    oJson:destroy()
    oSbRequest:destroy()
    oSbResponse:destroy()
    RETURN
ENDIF

//  ------------------------------------------------------------------------------------
//  Note: Using the sandbox endpoint, such as sandbox.sellingpartnerapi-eu.amazon.com
//  results in a response status code of 400 with the following error:
//  [{"code":"InvalidInput","message":"Could not match input arguments"}]
//  Getting a restricted data token seems to only work with the production endpoint.
//  ------------------------------------------------------------------------------------

//  Examine the response status.
nStatusCode := oRest:ResponseStatusCode
IF (nStatusCode != 200)
    ? "Response status code: " + Str(nStatusCode)
    ? "Response status text: " + oRest:ResponseStatusText
    ? "Response body: "
    ? oSbResponse:GetAsString()
    ? "Failed."
    oAuthAws:destroy()
    oRest:destroy()
    oJsonToken:destroy()
    oJson:destroy()
    oSbRequest:destroy()
    oSbResponse:destroy()
    RETURN
ENDIF

? oSbResponse:GetAsString()

//  If successful, gets a JSON response such as the following:

//  {
//    "expiresIn": 3600,
//    "restrictedDataToken": "Atz.sprdt|AYAB.....TQ="
//  }

//  Use this online tool to generate parsing code from sample JSON: 
//  Generate Parsing Code from JSON

oJsonResp := CreateObject("Chilkat.JsonObject")
oJsonResp:LoadSb(oSbResponse)

nExpiresIn := oJsonResp:IntOf("expiresIn")
cRestrictedDataToken := oJsonResp:StringOf("restrictedDataToken")

//  Save the RDT for subsequent use..
nSuccess := oJsonResp:WriteFile("qa_data/tokens/sp_api_rdt_token.json")

? "Success!"

oAuthAws:destroy()
oRest:destroy()
oJsonToken:destroy()
oJson:destroy()
oSbRequest:destroy()
oSbResponse:destroy()
oJsonResp:destroy()