连接到亚马逊MWS
我正在尝试连接到亚马逊MWS API。我有这些信息与我: String accessKeyId =“”; String secretAccessKey =“”; String merchantId =“”; String marketplaceId =“”; 我在vs2012 C#中创建了一个web表单,并在按钮点击时添加了上述变量,但是如何添加对marketplacewebservice的引用?我想要了解我那里列出的产品的销售信息。我是否需要添加一些文件,是否有任何由他们提供的需要添加的文件/ dll。 请指教。连接到亚马逊MWS
编辑:我已经下载了这个MWSOrdersCSharpClientLibrary-2013-09-01。 V293335039并从dist文件夹中添加了两个dll的引用。以下是获取订单详细信息的其他代码:
private void GetOrders()
{
MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();
config.ServiceURL = "https://mws.amazonservices.com/Orders/2011-01-01";
MarketplaceWebServiceOrdersClient service = new MarketplaceWebServiceOrdersClient(accessKeyId, secretAccessKey, applicationName, applicationVersion, config);
ListOrdersRequest request = new ListOrdersRequest();
request.SellerId = sellerID;
List<string> mpiList = new List<string>();
mpiList.Add(marketplaceId);
request.MarketplaceId = mpiList;
request.LastUpdatedAfter = DateTime.UtcNow.AddDays(-1);
bool retryRequest = true;
do
{
try
{
ListOrdersResponse response = new ListOrdersResponse();
response = service.ListOrders(request);
if (response.IsSetListOrdersResult())
{
if (response.ListOrdersResult.IsSetOrders())
{
foreach (Order order in response.ListOrdersResult.Orders)
{
Response.Write(order.AmazonOrderId);
}
}
}
retryRequest = false;
}
catch (MarketplaceWebServiceOrdersException ex)
{
if (ex.ErrorCode.Contains("RequestThrottled"))
{
retryRequest = true;
System.Threading.Thread.Sleep(60000);
}
}
} while (retryRequest == false);
}
这不会返回任何订单明细,实际上会进入节流错误。
使用Amazon .NET SDK。下载有一些教程和示例文件,它们将指导您如何连接并执行所有这些“初始设置”。查看下面的链接以下载SDK。一旦你完成了教程,我们可以帮助你解决更具体的问题。
您将需要使用订单或报告API来访问销售信息。长期来看,您会希望使用报告API,因为使用Orders API很难获取大量数据,但订购API在您初始时更容易学习。所以..我会开始使用Orders API,然后在您对系统工作方式有所了解之后再转到Reports API。
下载C#的客户端库,并检查了SRC/MarketplaceWebServiceOrders/MarketplaceWebServiceOrdersSample.cs
在上述文件中,你可能会想尝试InvokeGetOrder()
只需在您的相关项添加到accessKey
,secretKey
,将你的SellerID添加到InvokeGetOrder()函数中,如果有的话,添加一个mwsAuthToken。 (如果您没有身份验证令牌,则可能已经过时,只需从代码中删除mwsAuthToken行)。
完成所有工作后,您只需提供一个amazonOrderID,该函数将检索与该订单相关的详细信息。 InvokeListOrders()
是开始学习的另一个好功能。
编辑
一旦你的示例程序的窍门,你可以添加所提供的DLL到您的自定义项目,任何样本来源的你可能需要添加,以帮助构建各种在函数调用中使用的对象。
编辑
我看行..的第一件事是你的serviceURL不正确。对于直播网站,请使用https://mws.amazonservices.com
看来您的代码的其余部分格式完好。我会在捕获物上设置一个断点,并确切知道发生了什么。如果服务异常没有被限制,你的例程将会自由旋转,直到你点击节流帽,这是你所看到的情况,但是在节流之前应该有多个节拍。 Exception.Message
将提供有关问题的信息。
此外,我会将Thread.Sleep
置于任何条件之外的do-while循环中。如果没有某种睡眠来减缓日常工作,你将很快超过允许的限制范围。简单地说,处理节流可能是有效沟通亚马逊的最难的部分。我通常实际上允许发生油门,像下面做一些事情:
try
{
response = _service.GetReportListByNextToken(request);
}
catch (MarketplaceWebServiceException ex)
{
bool success = false;
for (int i = 0; i < 5 && !success; i++)
{
System.Threading.Thread.Sleep(3000);
try
{
response = _service.GetReportListByNextToken(request);
success = true;
}
catch (MarketplaceWebServiceException newEx)
{
success = false;
}
}
if (response == null)
{
Console.WriteLine("GetReportListByNextToken failed. Exceeded Throttling limits.");
//Don't throw an error, since there may be reports that we still want to process.
}
}
请记住,每个睡眠是依赖于您正在执行呼叫。此外,有时候,我会根据错误是否与节流有关而进行两次单独睡眠。
编辑
它看起来像下面这样(集成到你原来的代码示例)
private void GetOrders()
{
MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();
config.ServiceURL = "https://mws.amazonservices.com/";
MarketplaceWebServiceOrdersClient service = new MarketplaceWebServiceOrdersClient(accessKeyId, secretAccessKey, applicationName, applicationVersion, config);
ListOrdersRequest request = new ListOrdersRequest();
request.SellerId = sellerID;
List<string> mpiList = new List<string>();
mpiList.Add(marketplaceId);
request.MarketplaceId = mpiList;
request.LastUpdatedAfter = DateTime.UtcNow.AddDays(-1);
bool retryRequest = true;
ListOrdersResponse response = new ListOrdersResponse();
try
{
response = service.ListOrders(request);
}
catch (MarketplaceWebServiceException ex)
{
bool success = false;
for (int i = 0; i < 5 && !success; i++)
{
System.Threading.Thread.Sleep(30000);
try
{
response = service.ListOrders(request);
success = true;
}
catch (MarketplaceWebServiceException newEx)
{
success = false;
}
}
if (response == null)
{
Console.WriteLine("ListOrders failed. Exceeded Throttling limits.");
//Don't throw an error, since there may be reports that we still want to process.
}
}
if (response.IsSetListOrdersResult())
{
if (response.ListOrdersResult.IsSetOrders())
{
foreach (Order order in response.ListOrdersResult.Orders)
{
Response.Write(order.AmazonOrderId);
}
}
}
}
这是你需要实现什么大致的轮廓。基本上你把try-catch放在任何函数调用周围,这个函数调用会向amazon发出请求,并将sleep函数调整为函数调用的限制要求。我把30秒的睡眠时间放到了捕获中,因为这次调用有60秒的刷新时间,而且我们基本上有6个周期来允许调用不被阻塞,所以它应该在最多2个函数调用中进行调节,然后去通过成功。取决于您的应用程序,这可能需要调整到接近60秒或降低,这取决于您需要程序的响应程度(想想如果在刷新之前1秒钟进行节流,那么您可以有最长的等待时间如果你使用15秒钟,你的最长等待时间约为1.25分钟,你必须平衡这一点,因为你不想让亚马逊满足要求(和一些电话有小时限制,所以你真的不想达到这个限制)
感谢Nate M的回复我已经下载了他们的c#api的命令,并在我的代码中添加了dll,然后我创建了一个函数已经添加了上面的内容,但仍然无法看到任何订单信息 – user1254053
查看您的代码,并会稍后与您取得联系 –
Nate M,谢谢,请分享您的f ull代码 - 我需要把这个你上面写的这个尝试放在哪里。 – user1254053