Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 连接到Amazon MWS_Amazon Web Services_Amazon Mws - Fatal编程技术网

Amazon web services 连接到Amazon MWS

Amazon web services 连接到Amazon MWS,amazon-web-services,amazon-mws,Amazon Web Services,Amazon Mws,我正在尝试连接到Amazon MWS API。我随身携带这些信息: 字符串accessKeyId=“”; 字符串secretAccessKey=“”; 字符串merchantId=“”; 字符串marketplaceId=“”; 我已经在vs2012 C#中创建了一个web表单,并且在单击按钮时添加了上述变量,但是如何添加对marketplacewebservice的引用?我想获得我的产品在那里的销售信息。我是否需要添加一些文件,他们是否提供了任何需要添加的文件/dll。 请给我一些建议 编辑:

我正在尝试连接到Amazon MWS API。我随身携带这些信息: 字符串accessKeyId=“”; 字符串secretAccessKey=“”; 字符串merchantId=“”; 字符串marketplaceId=“”; 我已经在vs2012 C#中创建了一个web表单,并且在单击按钮时添加了上述变量,但是如何添加对marketplacewebservice的引用?我想获得我的产品在那里的销售信息。我是否需要添加一些文件,他们是否提供了任何需要添加的文件/dll。 请给我一些建议

编辑:我已经下载了这个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);

    }
private void GetOrders()
{
MarketplaceWebServiceOrdersConfig=新的MarketplaceWebServiceOrdersConfig();
config.ServiceURL=”https://mws.amazonservices.com/Orders/2011-01-01";
MarketplaceWebServiceOrdersClient服务=新的MarketplaceWebServiceOrdersClient(accessKeyId、secretAccessKey、applicationName、applicationVersion、config);
ListOrdersRequest请求=新建ListOrdersRequest();
request.SellerId=SellerId;
List mpiList=新列表();
mpiList.Add(marketplaceId);
request.MarketplaceId=mpiList;
request.lastUpdateAfter=DateTime.UtcNow.AddDays(-1);
bool-retryRequest=true;
做
{
尝试
{
ListOrdersResponse响应=新建ListOrdersResponse();
响应=服务。列表订单(请求);
if(response.IsSetListOrdersResult())
{
if(response.ListOrdersResult.IsSetOrders())
{
foreach(响应中的订单。ListOrdersResult.Orders)
{
Response.Write(order.AmazonOrderId);
}
}
}
retryRequest=false;
}
捕获(MarketplaceWebServiceOrderException例外)
{
if(例如ErrorCode.Contains(“RequestThrottled”))
{
retryRequest=true;
系统。线程。线程。睡眠(60000);
}                  
}
}while(retryRequest==false);
}

这不会返回任何订单详细信息,事实上会出现错误。

使用Amazon.NET SDK。下载的部分教程和示例文件将指导您如何连接和执行所有这些“初始设置”。请查看下面的链接以下载SDK。完成教程后,我们可以帮助您解答更具体的问题

您将希望使用Orders或Reports API访问销售信息。从长远来看,您会希望使用reports API,因为使用Orders API获取大量数据非常困难,但是Orders 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

看起来您的代码的其余部分的格式非常好。我会在捕获上设置一个断点,然后查看到底发生了什么。如果服务异常未被限制,则您的例程将一直自由运行,直到您碰到节流帽为止,这就是您所看到的情况,但在您限制之前应该有多个捕捉。异常消息将提供有关问题所在的信息

此外,我会在任何条件之外的do while循环中放置一个
线程.Sleep
。如果没有某种睡眠来减缓例行程序的速度,您将很快超过允许的节流限制。仅供参考,处理节流可能是与Amazon有效沟通最困难的部分。我通常会允许油门打开,并执行如下操作:

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.
    }

}
试试看
{
response=\u service.GetReportListByNextToken(请求);
}
捕获(MarketplaceWebServiceException ex)
{
布尔成功=假;
for(int i=0;i<5&&!success;i++)
{
系统线程线程睡眠(3000);
尝试
{
response=\u service.GetReportListByNextToken(请求);
成功=真实;
}
捕获(MarketplaceWebServiceException newEx)
{
成功=错误;
}
}
如果(响应==null)
{
Console.WriteLine(“GetReportListByNextToken失败。超出了限制。”);
//不要抛出错误,因为可能有我们仍要处理的报告。
}
}
请记住,每次睡眠都取决于您正在执行的通话。此外,有时,我会有两个分离
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);
                }
            }
        }
}