Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Create Restricted Data Token (RDT)See more Amazon SP-API ExamplesReturns a Restricted Data Token (RDT) for one or more restricted resources that you specify. For more information, see https://developer-docs.amazon.com/sp-api/docs/tokens-api-v2021-03-01-reference#post-tokens2021-03-01restricteddatatoken
IncludeFile "CkStringBuilder.pb" IncludeFile "CkAuthAws.pb" IncludeFile "CkJsonObject.pb" IncludeFile "CkRest.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. authAws.i = CkAuthAws::ckCreate() If authAws.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY") CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY") CkAuthAws::setCkServiceName(authAws, "execute-api") ; Use the region that is correct for your needs. CkAuthAws::setCkRegion(authAws, "eu-west-1") rest.i = CkRest::ckCreate() If rest.i = 0 Debug "Failed to create object." ProcedureReturn EndIf bTls.i = 1 port.i = 443 bAutoReconnect.i = 1 ; The sandbox endpoint (sandbox.sellingpartnerapi-eu.amazon.com) fails. ; Use the production endpoint and see the note below. success.i = CkRest::ckConnect(rest,"sellingpartnerapi-eu.amazon.com",port,bTls,bAutoReconnect) If success = 0 Debug CkRest::ckLastErrorText(rest) CkAuthAws::ckDispose(authAws) CkRest::ckDispose(rest) ProcedureReturn EndIf success = CkRest::ckSetAuthAws(rest,authAws) ; Load the previously obtained LWA access token. ; See Fetch SP-API LWA Access Token jsonToken.i = CkJsonObject::ckCreate() If jsonToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/sp_api_lwa_token.json") If success = 0 Debug "Failed to load LWA access token." CkAuthAws::ckDispose(authAws) CkRest::ckDispose(rest) CkJsonObject::ckDispose(jsonToken) ProcedureReturn EndIf ; Add the x-amz-access-token request header. lwa_token.s = CkJsonObject::ckStringOf(jsonToken,"access_token") CkRest::ckClearAllHeaders(rest) CkRest::ckAddHeader(rest,"x-amz-access-token",lwa_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 json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateString(json,"restrictedResources[0].method","GET") CkJsonObject::ckUpdateString(json,"restrictedResources[0].path","/orders/v0/orders") CkJsonObject::ckUpdateString(json,"restrictedResources[0].dataElements[0]","buyerInfo") CkJsonObject::ckUpdateString(json,"restrictedResources[0].dataElements[1]","shippingAddress") sbRequest.i = CkStringBuilder::ckCreate() If sbRequest.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckEmitSb(json,sbRequest) sbResponse.i = CkStringBuilder::ckCreate() If sbResponse.i = 0 Debug "Failed to create object." ProcedureReturn EndIf uri.s = "/tokens/2021-03-01/restrictedDataToken" success = CkRest::ckFullRequestSb(rest,"POST",uri,sbRequest,sbResponse) If success = 0 Debug CkRest::ckLastErrorText(rest) CkAuthAws::ckDispose(authAws) CkRest::ckDispose(rest) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) ProcedureReturn 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. statusCode.i = CkRest::ckResponseStatusCode(rest) If statusCode <> 200 Debug "Response status code: " + Str(statusCode) Debug "Response status text: " + CkRest::ckResponseStatusText(rest) Debug "Response body: " Debug CkStringBuilder::ckGetAsString(sbResponse) Debug "Failed." CkAuthAws::ckDispose(authAws) CkRest::ckDispose(rest) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) ProcedureReturn EndIf Debug CkStringBuilder::ckGetAsString(sbResponse) ; 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 jsonResp.i = CkJsonObject::ckCreate() If jsonResp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoadSb(jsonResp,sbResponse) expiresIn.i = CkJsonObject::ckIntOf(jsonResp,"expiresIn") restrictedDataToken.s = CkJsonObject::ckStringOf(jsonResp,"restrictedDataToken") ; Save the RDT for subsequent use.. success = CkJsonObject::ckWriteFile(jsonResp,"qa_data/tokens/sp_api_rdt_token.json") Debug "Success!" CkAuthAws::ckDispose(authAws) CkRest::ckDispose(rest) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(jsonResp) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.