using MarketplaceWebServiceOrders; using MarketplaceWebServiceOrders.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using NetLibrary.Log; namespace NetLibrary.OnlineTrade { public class AmazonApiNew { public string accessKeyId { get; set; } public string secretAccessKey { get; set; } public string merchantId { get; set; } public string marketplaceId { get; set; } public string country { get; set; } public string applicationName { get; set; } public string applicationVersion { get; set; } public AmazonApiNew() { applicationName = "AmazonAPIInterface"; applicationVersion = "1.0"; } // #region 读取订单列表 // public List GetOrders(DateTime? StartDate, DateTime? StopDate, string AccountName, out string ErrorMessage) // { // string ServiceURL = @"https://mws.amazonservices.com/Orders/2013-09-01?AWSAccessKeyId=0PB842EXAMPLE7N4ZTR2 // &Action=ListOrders // &MWSAuthToken=amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE // &MarketplaceId.Id.1=A1VC38T7YXB528 // &FulfillmentChannel.Channel.1=MFN // &PaymentMethod.1=COD // &PaymentMethod.2=Other // &OrderStatus.Status.1=Unshipped // &OrderStatus.Status.2=PendingAvailability // &SellerId=A2NEXAMPLETF53 // &Signature=ZQLpf8vEXAMPLE0iC265pf18n0%3D // &SignatureVersion=2 // &SignatureMethod=HmacSHA256 // &LastUpdatedAfter=2013-08-01T18%3A12%3A21 // &Timestamp=2013-09-05T18%3A12%3A21.687Z // &Version=2013-09-01"; // // string str = PostData(outdata, "https://wishpost.wish.com/api/v2/create_order"); // } // #endregion #region 读取FBA订单列表 public List GetFBAOrders(DateTime? StartDate, DateTime? StopDate, string AccountName, DateTime OrderDate, out string ErrorMessage) { ErrorMessage = ""; List ListModel = new List(); MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig(); #region 设置市场所在地借口地址 switch (country) { case "美国": config.ServiceURL = "https://mws.amazonservices.com/Orders/" + OrderDate.ToString("yyyy-MM-dd"); break; case "加拿大": config.ServiceURL = "https://mws.amazonservices.ca/Orders/" + OrderDate.ToString("yyyy-MM-dd"); break; case "欧洲": config.ServiceURL = "https://mws-eu.amazonservices.com/Orders/" + OrderDate.ToString("yyyy-MM-dd"); break; case "日本": config.ServiceURL = "https://mws.amazonservices.jp/Orders/" + OrderDate.ToString("yyyy-MM-dd"); break; case "中国": config.ServiceURL = "https://mws.amazonservices.com.cn/Orders/" + OrderDate.ToString("yyyy-MM-dd"); break; } #endregion MarketplaceWebServiceOrdersClient service = new MarketplaceWebServiceOrdersClient( applicationName, applicationVersion, accessKeyId, secretAccessKey, config); ListOrdersRequest OrdersRequest = new ListOrdersRequest(); OrdersRequest.SellerId = merchantId; OrdersRequest.LastUpdatedAfter = StartDate.Value;// System.DateTime.Now.AddDays(-15); if (StopDate != null) OrdersRequest.LastUpdatedBefore = StopDate.Value; #region 设置等待发货状态 MarketplaceIdList markplacelist = new MarketplaceIdList(); markplacelist.Id.Add(marketplaceId); OrdersRequest.MarketplaceId = markplacelist; List fce = new List { FulfillmentChannelEnum.AFN //等待发货 }; #endregion FulfillmentChannelList fcelist = new FulfillmentChannelList(); fcelist.Channel = fce; OrdersRequest.FulfillmentChannel = fcelist; ListOrdersResponse OrdersResponse = service.ListOrders(OrdersRequest); int i = 1; try { foreach (var item in OrdersResponse.ListOrdersResult.Orders.Order) { #region 转换 OrderModel model = new OrderModel(); model.OrderCode = item.AmazonOrderId; model.TotalPrice = Convert.ToDecimal(item.OrderTotal.Amount); model.MoneyCode = item.OrderTotal.CurrencyCode; model.OrderDate = item.PurchaseDate; model.BuyerID = ""; model.BuyerName = item.ShippingAddress.Name; model.BuyerCountry = item.ShippingAddress.County; model.BuyerAddr = item.ShippingAddress.AddressLine1; if (string.IsNullOrEmpty(item.ShippingAddress.AddressLine2) == false) model.BuyerAddr += "," + item.ShippingAddress.AddressLine2; if (string.IsNullOrEmpty(item.ShippingAddress.AddressLine3) == false) model.BuyerAddr += "," + item.ShippingAddress.AddressLine3; model.BuyerPhone = item.ShippingAddress.Phone; model.BuyerMobile = ""; model.BuyerMail = item.BuyerEmail; model.BuyerFax = ""; model.OrderRemark = ""; model.LeaveWord = ""; model.PayDate = null; model.OutOrderDate = null; ListModel.Add(model); #endregion } #region 采集分页订单 string nexttoken = OrdersResponse.ListOrdersResult.NextToken; while (nexttoken != null) { #region 延迟1分钟,避免被限制 if (i > 4) { System.Threading.Thread.Sleep(60000); } #endregion ListOrdersByNextTokenRequest nextrequest = new ListOrdersByNextTokenRequest(); nextrequest.NextToken = nexttoken; nextrequest.SellerId = merchantId; List nextorders = new List(); var nextresponse = service.ListOrdersByNextToken(nextrequest); foreach (var item in nextresponse.ListOrdersByNextTokenResult.Orders.Order) { #region 转换 OrderModel model = new OrderModel(); model.OrderCode = item.AmazonOrderId; model.TotalPrice = Convert.ToDecimal(item.OrderTotal.Amount); model.MoneyCode = item.OrderTotal.CurrencyCode; model.OrderDate = item.PurchaseDate; model.BuyerID = ""; model.BuyerName = item.ShippingAddress.Name; model.BuyerCountry = item.ShippingAddress.County; model.BuyerAddr = item.ShippingAddress.AddressLine1; model.BuyerPhone = item.ShippingAddress.Phone; model.BuyerMobile = ""; model.BuyerMail = item.BuyerEmail; model.BuyerFax = ""; model.BuyerProvince = item.ShippingAddress.StateOrRegion; model.BuyerCity = item.ShippingAddress.City; model.BuyerArea = item.ShippingAddress.County; model.OrderRemark = ""; model.LeaveWord = ""; model.PayDate = null; model.OutOrderDate = null; ListModel.Add(model); #endregion } nexttoken = nextresponse.ListOrdersByNextTokenResult.NextToken; i++; } #endregion } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } ListOrderItemsRequest OrderItemsRequest = new ListOrderItemsRequest(); OrderItemsRequest.SellerId = merchantId; #region 获取订单分配内容 i = 0; foreach (OrderModel model in ListModel) { try { i++; #region 延迟2秒,避免被限制 if (i > 10) { System.Threading.Thread.Sleep(2 * 1000); i = 0; } #endregion #region 获取OrderItems信息 OrderItemsRequest.AmazonOrderId = model.OrderCode; ListOrderItemsResponse OrderItemsResponse = service.ListOrderItems(OrderItemsRequest); foreach (var item2 in OrderItemsResponse.ListOrderItemsResult.OrderItems.OrderItem) { OrderDetailModel model2 = new OrderDetailModel(); model2.GoodsNum = Convert.ToInt32(item2.QuantityOrdered); model2.GoodsPrice = Convert.ToDecimal(item2.ItemPrice.Amount); model2.MoneyCode = item2.ItemPrice.CurrencyCode; model2.GoodsName = item2.ConditionNote; model2.GoodsSKU = item2.SellerSKU; model2.PostInfo = ""; model.ListModel.Add(model2); } string tk = OrderItemsResponse.ListOrderItemsResult.NextToken; while (tk != null) { #region 延迟2秒,避免被限制 if (i > 10) { System.Threading.Thread.Sleep(2 * 1000); i = 0; } #endregion ListOrderItemsByNextTokenRequest NextOrderItemsRequest = new ListOrderItemsByNextTokenRequest(); NextOrderItemsRequest.NextToken = tk; NextOrderItemsRequest.SellerId = merchantId; ListOrderItemsByNextTokenResponse OrderItemsByNextTokenRequest = service.ListOrderItemsByNextToken(NextOrderItemsRequest); foreach (var item2 in OrderItemsByNextTokenRequest.ListOrderItemsByNextTokenResult.OrderItems.OrderItem) { OrderDetailModel model2 = new OrderDetailModel(); model2.GoodsNum = Convert.ToInt32(item2.QuantityOrdered); model2.GoodsPrice = Convert.ToDecimal(item2.ItemPrice.Amount); model2.MoneyCode = item2.ItemPrice.CurrencyCode; model2.GoodsName = item2.ConditionNote; model2.GoodsSKU = item2.SellerSKU; model2.PostInfo = ""; model.ListModel.Add(model2); } } #endregion } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } } #endregion return ListModel; } #endregion } }