PHP ActiveX
PHP ActiveX
Amazon SP-API Get Specific Order
See more Amazon SP-API Examples
Get a specific Amazon Seller order.Chilkat PHP ActiveX Downloads
<?php
$success = 0;
// 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 = 'TEST_CASE_200';
$authAws = new COM("Chilkat.AuthAws");
$authAws->AccessKey = 'AWS_ACCESS_KEY';
$authAws->SecretKey = 'AWS_SECRET_KEY';
$authAws->ServiceName = 'execute-api';
// Use the region that is correct for your needs.
$authAws->Region = '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 = new COM("Chilkat.JsonObject");
$success = $jsonLwaToken->LoadFile('qa_data/tokens/sp_api_lwa_token.json');
if ($success == 0) {
print 'Failed to load LWA access token.' . "\n";
exit;
}
// Must use the non-sandbox domain for getting the RDT.
$rest = new COM("Chilkat.Rest");
$success = $rest->Connect('sellingpartnerapi-eu.amazon.com',443,1,1);
if ($success == 0) {
print $rest->LastErrorText . "\n";
exit;
}
$success = $rest->SetAuthAws($authAws);
// Add the x-amz-access-token request header.
$lwa_token = $jsonLwaToken->stringOf('access_token');
$rest->ClearAllHeaders();
$rest->AddHeader('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 = new COM("Chilkat.StringBuilder");
$sbPath->Append('/orders/v0/orders/');
$sbPath->Append($orderId);
$jsonRc = new COM("Chilkat.JsonObject");
$jsonRc->UpdateString('restrictedResources[0].method','GET');
$jsonRc->UpdateString('restrictedResources[0].path',$sbPath->getAsString());
$jsonRc->UpdateString('restrictedResources[0].dataElements[0]','buyerInfo');
$jsonRc->UpdateString('restrictedResources[0].dataElements[1]','shippingAddress');
$sbRequest = new COM("Chilkat.StringBuilder");
$jsonRc->EmitSb($sbRequest);
$sbResponse = new COM("Chilkat.StringBuilder");
$uri = '/tokens/2021-03-01/restrictedDataToken';
$success = $rest->FullRequestSb('POST',$uri,$sbRequest,$sbResponse);
if ($success == 0) {
print $rest->LastErrorText . "\n";
exit;
}
// Examine the response status.
$statusCode = $rest->ResponseStatusCode;
if ($statusCode != 200) {
print 'Response status code: ' . $statusCode . "\n";
print 'Response status text: ' . $rest->ResponseStatusText . "\n";
print 'Response body: ' . "\n";
print $sbResponse->getAsString() . "\n";
print 'Failed.' . "\n";
exit;
}
// Get the restricted data token.
$jsonResp = new COM("Chilkat.JsonObject");
$jsonResp->LoadSb($sbResponse);
$restrictedDataToken = $jsonResp->stringOf('restrictedDataToken');
print 'Restricted Data Token: ' . $restrictedDataToken . "\n";
// ------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------
// 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.)
$rest->Disconnect(100);
$success = $rest->Connect('sandbox.sellingpartnerapi-eu.amazon.com',443,1,1);
if ($success == 0) {
print $rest->LastErrorText . "\n";
exit;
}
$success = $rest->SetAuthAws($authAws);
$rest->ClearAllHeaders();
$rest->AddHeader('x-amz-access-token',$restrictedDataToken);
$rest->ClearAllQueryParams();
$rest->AddQueryParam('MarketplaceIds','ATVPDKIKX0DER');
$rest->ClearAllPathParams();
$rest->AddPathParam('{orderId}',$orderId);
$uri = '/orders/v0/orders/{orderId}';
$success = $rest->FullRequestNoBodySb('GET',$uri,$sbResponse);
if ($success == 0) {
print $rest->LastErrorText . "\n";
exit;
}
// Examine the response status.
$statusCode = $rest->ResponseStatusCode;
if ($statusCode != 200) {
print 'Response status text: ' . $rest->ResponseStatusText . "\n";
print 'Response body: ' . "\n";
print $sbResponse->getAsString() . "\n";
print 'Failed.' . "\n";
exit;
}
print $sbResponse->getAsString() . "\n";
// 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 = new COM("Chilkat.JsonObject");
$json->LoadSb($sbResponse);
$AmazonOrderId = $json->stringOf('payload.AmazonOrderId');
$PurchaseDate = $json->stringOf('payload.PurchaseDate');
$LastUpdateDate = $json->stringOf('payload.LastUpdateDate');
$OrderStatus = $json->stringOf('payload.OrderStatus');
$FulfillmentChannel = $json->stringOf('payload.FulfillmentChannel');
$SalesChannel = $json->stringOf('payload.SalesChannel');
$ShipServiceLevel = $json->stringOf('payload.ShipServiceLevel');
$CurrencyCode = $json->stringOf('payload.OrderTotal.CurrencyCode');
$Amount = $json->stringOf('payload.OrderTotal.Amount');
$NumberOfItemsShipped = $json->IntOf('payload.NumberOfItemsShipped');
$NumberOfItemsUnshipped = $json->IntOf('payload.NumberOfItemsUnshipped');
$PaymentMethod = $json->stringOf('payload.PaymentMethod');
$IsReplacementOrder = $json->BoolOf('payload.IsReplacementOrder');
$MarketplaceId = $json->stringOf('payload.MarketplaceId');
$ShipmentServiceLevelCategory = $json->stringOf('payload.ShipmentServiceLevelCategory');
$OrderType = $json->stringOf('payload.OrderType');
$EarliestShipDate = $json->stringOf('payload.EarliestShipDate');
$LatestShipDate = $json->stringOf('payload.LatestShipDate');
$EarliestDeliveryDate = $json->stringOf('payload.EarliestDeliveryDate');
$LatestDeliveryDate = $json->stringOf('payload.LatestDeliveryDate');
$IsBusinessOrder = $json->BoolOf('payload.IsBusinessOrder');
$IsPrime = $json->BoolOf('payload.IsPrime');
$IsGlobalExpressEnabled = $json->BoolOf('payload.IsGlobalExpressEnabled');
$IsPremiumOrder = $json->BoolOf('payload.IsPremiumOrder');
$IsSoldByAB = $json->BoolOf('payload.IsSoldByAB');
$IsIBA = $json->BoolOf('payload.IsIBA');
$Name = $json->stringOf('payload.DefaultShipFromLocationAddress.Name');
$AddressLine1 = $json->stringOf('payload.DefaultShipFromLocationAddress.AddressLine1');
$City = $json->stringOf('payload.DefaultShipFromLocationAddress.City');
$StateOrRegion = $json->stringOf('payload.DefaultShipFromLocationAddress.StateOrRegion');
$PostalCode = $json->stringOf('payload.DefaultShipFromLocationAddress.PostalCode');
$CountryCode = $json->stringOf('payload.DefaultShipFromLocationAddress.CountryCode');
$Phone = $json->stringOf('payload.DefaultShipFromLocationAddress.Phone');
$AddressType = $json->stringOf('payload.DefaultShipFromLocationAddress.AddressType');
$FulfillmentSupplySourceId = $json->stringOf('payload.FulfillmentInstruction.FulfillmentSupplySourceId');
$IsISPU = $json->BoolOf('payload.IsISPU');
$IsAccessPointOrder = $json->BoolOf('payload.IsAccessPointOrder');
$HasAutomatedShippingSettings = $json->BoolOf('payload.AutomatedShippingSettings.HasAutomatedShippingSettings');
$EasyShipShipmentStatus = $json->stringOf('payload.EasyShipShipmentStatus');
$ElectronicInvoiceStatus = $json->stringOf('payload.ElectronicInvoiceStatus');
$i = 0;
$count_i = $json->SizeOfArray('payload.PaymentMethodDetails');
while ($i < $count_i) {
$json->I = $i;
$strVal = $json->stringOf('payload.PaymentMethodDetails[i]');
$i = $i + 1;
}
print 'Success!' . "\n";
?>