Reputation: 688
I'm trying to retrieve the Fees Estimate for a specific SKU using the Amazon MWS API. I have the Sample files and have read and read but I cannot figure out how to actually specify the SKU for submission.
I have the Sample file GetMyFeesEstimateSample.php working against the mock file, but that is the response file, isn't it?
Here is what I have, how do I specify the SellerSKU for the request?
<?php
/*******************************************************************************
* Copyright 2009-2016 Amazon Services. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
*
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at: http://aws.amazon.com/apache2.0
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*******************************************************************************
* PHP Version 5
* @category Amazon
* @package Marketplace Web Service Products
* @version 2011-10-01
* Library Version: 2016-06-01
* Generated: Fri Sep 16 11:49:32 PDT 2016
*/
/**
* Get My Fees Estimate Sample
*/
require_once('.config.inc.php');
/************************************************************************
* Instantiate Implementation of MarketplaceWebServiceProducts
*
* AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY constants
* are defined in the .config.inc.php located in the same
* directory as this sample
***********************************************************************/
// More endpoints are listed in the MWS Developer Guide
// North America:
//$serviceUrl = "https://mws.amazonservices.com/Products/2011-10-01";
// Europe
//$serviceUrl = "https://mws-eu.amazonservices.com/Products/2011-10-01";
// Japan
//$serviceUrl = "https://mws.amazonservices.jp/Products/2011-10-01";
// China
//$serviceUrl = "https://mws.amazonservices.com.cn/Products/2011-10-01";
$config = array (
'ServiceURL' => $serviceUrl,
'ProxyHost' => null,
'ProxyPort' => -1,
'ProxyUsername' => null,
'ProxyPassword' => null,
'MaxErrorRetry' => 3,
);
$service = new MarketplaceWebServiceProducts_Client(
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
APPLICATION_NAME,
APPLICATION_VERSION,
$config);
/************************************************************************
* Uncomment to try out Mock Service that simulates MarketplaceWebServiceProducts
* responses without calling MarketplaceWebServiceProducts service.
*
* Responses are loaded from local XML files. You can tweak XML files to
* experiment with various outputs during development
*
* XML files available under MarketplaceWebServiceProducts/Mock tree
*
***********************************************************************/
// $service = new MarketplaceWebServiceProducts_Mock();
/************************************************************************
* Setup request parameters and uncomment invoke to try out
* sample for Get My Fees Estimate Action
***********************************************************************/
// @TODO: set request. Action can be passed as MarketplaceWebServiceProducts_Model_GetMyFeesEstimate
$request = new MarketplaceWebServiceProducts_Model_GetMyFeesEstimateRequest();
$request->setSellerId(MERCHANT_ID);
// object or array of parameters
invokeGetMyFeesEstimate($service, $request);
/**
* Get Get My Fees Estimate Action Sample
* Gets competitive pricing and related information for a product identified by
* the MarketplaceId and ASIN.
*
* @param MarketplaceWebServiceProducts_Interface $service instance of MarketplaceWebServiceProducts_Interface
* @param mixed $request MarketplaceWebServiceProducts_Model_GetMyFeesEstimate or array of parameters
*/
function invokeGetMyFeesEstimate(MarketplaceWebServiceProducts_Interface $service, $request)
{
try {
$response = $service->GetMyFeesEstimate($request);
echo ("Service Response\n");
echo ("=============================================================================\n");
$dom = new DOMDocument();
$dom->loadXML($response->toXML());
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n");
} catch (MarketplaceWebServiceProducts_Exception $ex) {
echo("Caught Exception: " . $ex->getMessage() . "\n");
echo("Response Status Code: " . $ex->getStatusCode() . "\n");
echo("Error Code: " . $ex->getErrorCode() . "\n");
echo("Error Type: " . $ex->getErrorType() . "\n");
echo("Request ID: " . $ex->getRequestId() . "\n");
echo("XML: " . $ex->getXML() . "\n");
echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
}
}
I found this, but I still have no idea what to do. You'd think the Amazon Samples would include a Sample ASIN or SKU; https://docs.developer.amazonservices.com/en_US/products/Products_GetMyFeesEstimate.html
Upvotes: 2
Views: 2114
Reputation: 157
Was programming this yesterday and found out the solution, for more info regarding the FeesEstimateRequestElements:
http://docs.developer.amazonservices.com/en_US/products/Products_Datatypes.html#FeesEstimateRequest
Info about the operation GetMyFeesEstimate:
http://docs.developer.amazonservices.com/en_US/products/Products_GetMyFeesEstimate.html
GetMyFeesEstimateSample with some comments, this works:
<?php
require_once('.config.inc.php');
$serviceUrl = "https://mws.amazonservices.com/Products/2011-10-01";
$config = array (
'ServiceURL' => $serviceUrl,
'ProxyHost' => null,
'ProxyPort' => -1,
'ProxyUsername' => null,
'ProxyPassword' => null,
'MaxErrorRetry' => 3,
);
$service = new MarketplaceWebServiceProducts_Client(
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
APPLICATION_NAME,
APPLICATION_VERSION,
$config);
//First we set up all the list variables
$FeesEstimateRequest = new MarketplaceWebServiceProducts_Model_FeesEstimateRequest();
$FeesEstimateRequest->setMarketplaceId('ATVPDKIKX0DER'); // Amazon.com marketplace id
$FeesEstimateRequest->setIdType('SellerSKU'); // IdType values: ASIN, SellerSKU, SellerSKU in your case
$FeesEstimateRequest->setIdValue('XXXXXXXXXX'); // The value of the id you have entered
$FeesEstimateRequest->setIdentifier('request1'); // A identifier for the item you have requested, this is for your own use
$FeesEstimateRequest->setIsAmazonFulfilled(FALSE); // Fullfilled by Amazon? true if the offer is fulfilled by Amazon.
//To set up the $PriceToEstimateFees object we need two instances of the object MarketplaceWebServiceProducts_Model_MoneyType
//@ set up for both cases: Listing Price and Shipping Price
//New object MoneyType, setting up the currency and amount for listing price
$MoneyTypeListingPrice = new MarketplaceWebServiceProducts_Model_MoneyType();
$MoneyTypeListingPrice->setCurrencyCode('USD'); // String, the currency code of the price : USD in this example for amazon.com marketplace
$MoneyTypeListingPrice->setAmount('0.00'); // String, the price of the item
//New object MoneyType, setting up the currency and amount for shipping price
$MoneyTypeShipping = new MarketplaceWebServiceProducts_Model_MoneyType();
$MoneyTypeShipping->setCurrencyCode('USD'); // String, the currency code of the price : USD in this example for amazon.com marketplace
$MoneyTypeShipping->setAmount('0.00'); // String, the price of the item
//Setting up the prices: Listing Price and Shipping Price
$PriceToEstimateFees = new MarketplaceWebServiceProducts_Model_PriceToEstimateFees();
$PriceToEstimateFees->setListingPrice($MoneyTypeListingPrice);
$PriceToEstimateFees->setShipping($MoneyTypeShipping);
//Finally setting up the $PriceToEstimateFees object to the $FeesEstimateRequest object
$FeesEstimateRequest->setPriceToEstimateFees($PriceToEstimateFees); // The product price that the fee estimate is based on.
//setting up the final required parameter in the $FeesEstimateRequestList object
$FeesEstimateRequestList = new MarketplaceWebServiceProducts_Model_FeesEstimateRequestList();
$FeesEstimateRequestList->setFeesEstimateRequest($FeesEstimateRequest);
// Last step : sending the $FeesEstimateRequestList object into $request
$request = new MarketplaceWebServiceProducts_Model_GetMyFeesEstimateRequest();
$request->setSellerId(MERCHANT_ID);
$request->setFeesEstimateRequestList($FeesEstimateRequestList);
// object or array of parameters
invokeGetMyFeesEstimate($service, $request);
function invokeGetMyFeesEstimate(MarketplaceWebServiceProducts_Interface $service, $request)
{
try {
$response = $service->GetMyFeesEstimate($request);
echo ("Service Response\n");
echo ("=============================================================================\n");
$dom = new DOMDocument();
$dom->loadXML($response->toXML());
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n");
} catch (MarketplaceWebServiceProducts_Exception $ex) {
echo("Caught Exception: " . $ex->getMessage() . "\n");
echo("Response Status Code: " . $ex->getStatusCode() . "\n");
echo("Error Code: " . $ex->getErrorCode() . "\n");
echo("Error Type: " . $ex->getErrorType() . "\n");
echo("Request ID: " . $ex->getRequestId() . "\n");
echo("XML: " . $ex->getXML() . "\n");
echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
}
}
Upvotes: 5
Reputation: 11111
As part of your request, you submit a FeesEstimateRequestList
In that list, you specifiy the IdType
, which can be ASIN
or SellerSKU
. Then you give it a value in IdValue
. Note that there are other elements that are required. Check out the FeesEstimateRequest
for those elements right here https://docs.developer.amazonservices.com/en_US/products/Products_Datatypes.html#FeesEstimateRequest
Your POST above has an ASIN
defined instead of SellerSKU
for IdType
. Just change that to SellerSKU
like I mentioned above and you'll be set.
I use the C# SDK which has examples for all this. I would assume the PHP SDK would be the same, but maybe it's as complete. In any case, you need to submit a FeesEstimateRequestList
in your POST so MWS knows what you are looking for.
Upvotes: 2