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) Amazon SP-API Get Specific OrderSee more Amazon SP-API ExamplesGet a specific Amazon Seller order. For more information, see https://developer-docs.amazon.com/sp-api/docs/orders-api-v0-reference#getorders
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. ; Gets information for this order ID ; The order ID is something like "902-1845936-5435065" and it is the AmazonOrderId returned in the JSON when getting the list of orders. For example: ; { ; "payload": { ; "CreatedBefore": "1.569521782042E9", ; "Orders": [ ; { ; "AmazonOrderId": "902-1845936-5435065", ; "PurchaseDate": "1970-01-19T03:58:30Z", ; ... ; However, when using the sandbox, instead use the explicit keyword TEST_CASE_200 orderId.s = "TEST_CASE_200" 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") ; First get a restricted data token for the given order ID. ; This requires an LWA access token which cannot be more than 1 hour old. ; See Fetch SP-API LWA Access Token jsonLwaToken.i = CkJsonObject::ckCreate() If jsonLwaToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkJsonObject::ckLoadFile(jsonLwaToken,"qa_data/tokens/sp_api_lwa_token.json") If success = 0 Debug "Failed to load LWA access token." CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) ProcedureReturn EndIf ; Must use the non-sandbox domain for getting the RDT. rest.i = CkRest::ckCreate() If rest.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkRest::ckConnect(rest,"sellingpartnerapi-eu.amazon.com",443,1,1) If success = 0 Debug CkRest::ckLastErrorText(rest) CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) ProcedureReturn EndIf success = CkRest::ckSetAuthAws(rest,authAws) ; Add the x-amz-access-token request header. lwa_token.s = CkJsonObject::ckStringOf(jsonLwaToken,"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/{orderId}", ; "dataElements": ["buyerInfo", "shippingAddress"] ; } ; ] ; } sbPath.i = CkStringBuilder::ckCreate() If sbPath.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkStringBuilder::ckAppend(sbPath,"/orders/v0/orders/") CkStringBuilder::ckAppend(sbPath,orderId) jsonRc.i = CkJsonObject::ckCreate() If jsonRc.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateString(jsonRc,"restrictedResources[0].method","GET") CkJsonObject::ckUpdateString(jsonRc,"restrictedResources[0].path",CkStringBuilder::ckGetAsString(sbPath)) CkJsonObject::ckUpdateString(jsonRc,"restrictedResources[0].dataElements[0]","buyerInfo") CkJsonObject::ckUpdateString(jsonRc,"restrictedResources[0].dataElements[1]","shippingAddress") sbRequest.i = CkStringBuilder::ckCreate() If sbRequest.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckEmitSb(jsonRc,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) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) ProcedureReturn EndIf ; 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) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) ProcedureReturn EndIf ; Get the restricted data token. jsonResp.i = CkJsonObject::ckCreate() If jsonResp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoadSb(jsonResp,sbResponse) restrictedDataToken.s = CkJsonObject::ckStringOf(jsonResp,"restrictedDataToken") Debug "Restricted Data Token: " + restrictedDataToken ; ------------------------------------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------------------------------------ ; Now that we have the RDT, we can use it to get information about the order. ; ; Yes, the SP-API is horribly tedious and painful. You must use an RDT specifically tailored to each request requiring an RDT, ; the RDT must not be over an hour old, and if you need to get a new RDT you must get it using an LWA token that itself is not ; more than an hour old. If the LWA is more than an hour old, you must get a new one. Ughhh!!!!! ; ------------------------------------------------------------------------------------------------------------ ; Disconnect from the non-sandbox domain. This example will use the sandbox. ; (The RDT was obtained using the non-sandbox domain. For some reason, the sandbox domain does not work for getting the RDT.) CkRest::ckDisconnect(rest,100) success = CkRest::ckConnect(rest,"sandbox.sellingpartnerapi-eu.amazon.com",443,1,1) If success = 0 Debug CkRest::ckLastErrorText(rest) CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(jsonResp) ProcedureReturn EndIf success = CkRest::ckSetAuthAws(rest,authAws) CkRest::ckClearAllHeaders(rest) CkRest::ckAddHeader(rest,"x-amz-access-token",restrictedDataToken) CkRest::ckClearAllQueryParams(rest) CkRest::ckAddQueryParam(rest,"MarketplaceIds","ATVPDKIKX0DER") CkRest::ckClearAllPathParams(rest) CkRest::ckAddPathParam(rest,"{orderId}",orderId) uri = "/orders/v0/orders/{orderId}" success = CkRest::ckFullRequestNoBodySb(rest,"GET",uri,sbResponse) If success = 0 Debug CkRest::ckLastErrorText(rest) CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(jsonResp) ProcedureReturn EndIf ; Examine the response status. statusCode = CkRest::ckResponseStatusCode(rest) If statusCode <> 200 Debug "Response status text: " + CkRest::ckResponseStatusText(rest) Debug "Response body: " Debug CkStringBuilder::ckGetAsString(sbResponse) Debug "Failed." CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(jsonResp) ProcedureReturn EndIf Debug CkStringBuilder::ckGetAsString(sbResponse) ; If successful, gets a JSON response such as the following: ; { ; "payload": { ; "AmazonOrderId": "902-1845936-5435065", ; "PurchaseDate": "1970-01-19T03:58:30Z", ; "LastUpdateDate": "1970-01-19T03:58:32Z", ; "OrderStatus": "Unshipped", ; "FulfillmentChannel": "MFN", ; "SalesChannel": "Amazon.com", ; "ShipServiceLevel": "Std US D2D Dom", ; "OrderTotal": { ; "CurrencyCode": "USD", ; "Amount": "11.01" ; }, ; "NumberOfItemsShipped": 0, ; "NumberOfItemsUnshipped": 1, ; "PaymentMethod": "Other", ; "PaymentMethodDetails": [ ; "Standard" ; ], ; "IsReplacementOrder": false, ; "MarketplaceId": "ATVPDKIKX0DER", ; "ShipmentServiceLevelCategory": "Standard", ; "OrderType": "StandardOrder", ; "EarliestShipDate": "1970-01-19T03:59:27Z", ; "LatestShipDate": "1970-01-19T04:05:13Z", ; "EarliestDeliveryDate": "1970-01-19T04:06:39Z", ; "LatestDeliveryDate": "1970-01-19T04:15:17Z", ; "IsBusinessOrder": false, ; "IsPrime": false, ; "IsGlobalExpressEnabled": false, ; "IsPremiumOrder": false, ; "IsSoldByAB": false, ; "IsIBA": false, ; "DefaultShipFromLocationAddress": { ; "Name": "MFNIntegrationTestMerchant", ; "AddressLine1": "2201 WESTLAKE AVE", ; "City": "SEATTLE", ; "StateOrRegion": "WA", ; "PostalCode": "98121-2778", ; "CountryCode": "US", ; "Phone": "+1 480-386-0930 ext. 73824", ; "AddressType": "Commercial" ; }, ; "FulfillmentInstruction": { ; "FulfillmentSupplySourceId": "sampleSupplySourceId" ; }, ; "IsISPU": false, ; "IsAccessPointOrder": false, ; "AutomatedShippingSettings": { ; "HasAutomatedShippingSettings": false ; }, ; "EasyShipShipmentStatus": "PendingPickUp", ; "ElectronicInvoiceStatus": "NotRequired" ; } ; } ; Use this online tool to generate parsing code from sample JSON: ; Generate Parsing Code from JSON json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoadSb(json,sbResponse) strVal.s AmazonOrderId.s = CkJsonObject::ckStringOf(json,"payload.AmazonOrderId") PurchaseDate.s = CkJsonObject::ckStringOf(json,"payload.PurchaseDate") LastUpdateDate.s = CkJsonObject::ckStringOf(json,"payload.LastUpdateDate") OrderStatus.s = CkJsonObject::ckStringOf(json,"payload.OrderStatus") FulfillmentChannel.s = CkJsonObject::ckStringOf(json,"payload.FulfillmentChannel") SalesChannel.s = CkJsonObject::ckStringOf(json,"payload.SalesChannel") ShipServiceLevel.s = CkJsonObject::ckStringOf(json,"payload.ShipServiceLevel") CurrencyCode.s = CkJsonObject::ckStringOf(json,"payload.OrderTotal.CurrencyCode") Amount.s = CkJsonObject::ckStringOf(json,"payload.OrderTotal.Amount") NumberOfItemsShipped.i = CkJsonObject::ckIntOf(json,"payload.NumberOfItemsShipped") NumberOfItemsUnshipped.i = CkJsonObject::ckIntOf(json,"payload.NumberOfItemsUnshipped") PaymentMethod.s = CkJsonObject::ckStringOf(json,"payload.PaymentMethod") IsReplacementOrder.i = CkJsonObject::ckBoolOf(json,"payload.IsReplacementOrder") MarketplaceId.s = CkJsonObject::ckStringOf(json,"payload.MarketplaceId") ShipmentServiceLevelCategory.s = CkJsonObject::ckStringOf(json,"payload.ShipmentServiceLevelCategory") OrderType.s = CkJsonObject::ckStringOf(json,"payload.OrderType") EarliestShipDate.s = CkJsonObject::ckStringOf(json,"payload.EarliestShipDate") LatestShipDate.s = CkJsonObject::ckStringOf(json,"payload.LatestShipDate") EarliestDeliveryDate.s = CkJsonObject::ckStringOf(json,"payload.EarliestDeliveryDate") LatestDeliveryDate.s = CkJsonObject::ckStringOf(json,"payload.LatestDeliveryDate") IsBusinessOrder.i = CkJsonObject::ckBoolOf(json,"payload.IsBusinessOrder") IsPrime.i = CkJsonObject::ckBoolOf(json,"payload.IsPrime") IsGlobalExpressEnabled.i = CkJsonObject::ckBoolOf(json,"payload.IsGlobalExpressEnabled") IsPremiumOrder.i = CkJsonObject::ckBoolOf(json,"payload.IsPremiumOrder") IsSoldByAB.i = CkJsonObject::ckBoolOf(json,"payload.IsSoldByAB") IsIBA.i = CkJsonObject::ckBoolOf(json,"payload.IsIBA") Name.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.Name") AddressLine1.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.AddressLine1") City.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.City") StateOrRegion.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.StateOrRegion") PostalCode.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.PostalCode") CountryCode.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.CountryCode") Phone.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.Phone") AddressType.s = CkJsonObject::ckStringOf(json,"payload.DefaultShipFromLocationAddress.AddressType") FulfillmentSupplySourceId.s = CkJsonObject::ckStringOf(json,"payload.FulfillmentInstruction.FulfillmentSupplySourceId") IsISPU.i = CkJsonObject::ckBoolOf(json,"payload.IsISPU") IsAccessPointOrder.i = CkJsonObject::ckBoolOf(json,"payload.IsAccessPointOrder") HasAutomatedShippingSettings.i = CkJsonObject::ckBoolOf(json,"payload.AutomatedShippingSettings.HasAutomatedShippingSettings") EasyShipShipmentStatus.s = CkJsonObject::ckStringOf(json,"payload.EasyShipShipmentStatus") ElectronicInvoiceStatus.s = CkJsonObject::ckStringOf(json,"payload.ElectronicInvoiceStatus") i.i = 0 count_i.i = CkJsonObject::ckSizeOfArray(json,"payload.PaymentMethodDetails") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"payload.PaymentMethodDetails[i]") i = i + 1 Wend Debug "Success!" CkAuthAws::ckDispose(authAws) CkJsonObject::ckDispose(jsonLwaToken) CkRest::ckDispose(rest) CkStringBuilder::ckDispose(sbPath) CkJsonObject::ckDispose(jsonRc) CkStringBuilder::ckDispose(sbRequest) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(jsonResp) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.