【问题标题】:Listing orders and passing ISO 8601 date to Amazon MWS列出订单并将 ISO 8601 日期传递给亚马逊 MWS
【发布时间】:2012-07-19 14:29:51
【问题描述】:

从亚马逊 MWS 检索订单的最佳方式是什么?

我目前的代码如下...

MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();
config.ServiceURL = productsURL;

MarketplaceWebServiceOrders.MarketplaceWebServiceOrdersClient service = new MarketplaceWebServiceOrdersClient(appname, version, accesskeyID, secretkey, config);             

ListOrdersRequest request = new ListOrdersRequest();
request.MarketplaceId = new MarketplaceIdList();
request.MarketplaceId.Id = new List<string>(new string[] { marketids[0] });
request.SellerId = merchantID;
request.OrderStatus = new OrderStatusList() { Status = new List<OrderStatusEnum>() { OrderStatusEnum.Unshipped, OrderStatusEnum.PartiallyShipped } };
request.CreatedAfter = Convert.ToDateTime(dc.Settings.SingleOrDefault().lastOrdersRetrieved);

ListOrdersResponse response = service.ListOrders(request);

我在传递 ISO 日期时遇到问题,如果您发现代码有任何其他问题,请随时告诉我。

【问题讨论】:

    标签: asp.net amazon-mws


    【解决方案1】:

    如果您正在寻找在您提出请求的那一秒后创建的东西,它根本找不到任何东西,因为在亚马逊您只能抓取最后 2 分钟的订单数据。

    我在尝试从现在设置时间时遇到问题 - 5 分钟。在与亚马逊支持人员交谈后,他们提供了以下信息:“

    在 Orders API 中,如果您未指定结束时间(CreatedBefore 或 LastUpdatedBefore),它将假设现在(实际上,现在减去 2 分钟)。在它的回应中,它会告诉你它的确切时间 用作截止时间。”

    在您的情况下,您需要删除 CreatedAfter 请求并让亚马逊为您选择。

    如果您正在寻找 created after,您可以获取 Amazon 给出的响应时间并将其传递给您的 created after 参数。

    我现在列出订单的方法如下,请注意,这只会列出控制台的订单,但返回的数据都是一样的:

    public List<string> ListOrders(MarketplaceWebServiceOrders.MarketplaceWebServiceOrders    service, string merchantId, List<OrderStatusEnum> orderStatus)
        {
            List<string> salesOrderIds = new List<string>();
    
            ListOrdersRequest listOrdersRequest = new ListOrdersRequest();
    
            DateTime createdAfter = DateTime.Now.Add(new TimeSpan(-1, 0, 0));
            DateTime createdbefore = DateTime.Now.Add(new TimeSpan(0, -15, 0));
    
            listOrdersRequest.CreatedAfter = createdAfter;
            listOrdersRequest.CreatedBefore = createdbefore;
            listOrdersRequest.SellerId = merchantId;
            listOrdersRequest.OrderStatus = new OrderStatusList();
    
            foreach (OrderStatusEnum status in orderStatus)
            {
                listOrdersRequest.OrderStatus.Status.Add(status);
            }
    
            listOrdersRequest.FulfillmentChannel = new FulfillmentChannelList();
            listOrdersRequest.FulfillmentChannel.Channel = new List<FulfillmentChannelEnum>();
            listOrdersRequest.FulfillmentChannel.Channel.Add(FulfillmentChannelEnum.MFN);
    
    
            listOrdersRequest.MarketplaceId = new MarketplaceIdList();
            listOrdersRequest.MarketplaceId.Id = new List<string>();
            listOrdersRequest.MarketplaceId.Id.Add("yourID");
    
            ListOrdersResponse listOrdersResponse = service.ListOrders(listOrdersRequest);
    
            int i = 0;
    
            foreach (Order order in listOrdersResponse.ListOrdersResult.Orders.Order)
            {
                i++;
                Console.WriteLine("Amazon Order ID:             \t" + order.AmazonOrderId);
                Console.WriteLine("Buyer Name:                  \t" + order.BuyerName);
                Console.WriteLine("Buyer Email:                 \t" + order.BuyerEmail);
                Console.WriteLine("Fulfillment Channel:         \t" + order.FulfillmentChannel);
                Console.WriteLine("Order Status:                \t" + order.OrderStatus);
                Console.WriteLine("Order Total:                 \t" + order.OrderTotal);
                Console.WriteLine("Number of Items Shipped:     \t" + order.NumberOfItemsShipped);
                Console.WriteLine("Number of Items Unshipped:   \t" + order.NumberOfItemsUnshipped);
                Console.WriteLine("Purchase Date:               \t" + order.PurchaseDate);
                Console.WriteLine("===========================================================");
    
                salesOrderIds.Add(order.AmazonOrderId);
    
    
            }
    
            Console.WriteLine("We returned a total of {0} records. ", i);
            return salesOrderIds;
        }
    

    【讨论】:

    • atm 我设置的日期时间是上次更新的日期时间。我希望每 15 分钟左右检索一次所有订单。所以使用这个日期时间字段来设置它。如果 则基本上更新:)
    • 我在我的代码中放入了列出订单的代码,这样你就可以看到我现在是如何获取数据的 - 老实说,当其他一些优先项目出现时,我刚刚开始使用订单 API,所以我没有t 有机会确保这是以“实时”方式获得订单的正确方式,但希望它能让您到达您需要的地方
    • 非常感谢,我猜你正在制作一个控制台应用程序?
    • 我正在开发一个基于网络的应用程序。这个 API 快把我逼疯了,哈哈希望它更容易使用 tbh。
    • 不幸的是,C# api 似乎是事后才想到的。 Java API 有更好的文档记录,所以如果遇到障碍,请查看 Java 示例;大多数情况下,Java 和 C# 非常相似,足以让您知道该往哪里走。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多