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 AmazonApi { 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 AmazonApi() { applicationName = "AmazonAPIInterface"; applicationVersion = "1.0"; } #region 读取订单列表 public List GetOrders(DateTime? StartDate, DateTime? StopDate, string AccountName, out string ErrorMessage) { ErrorMessage = ""; List ListModel = new List(); try { MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig(); #region 设置市场所在地借口地址 switch (country) { case "美国": config.ServiceURL = "https://mws.amazonservices.com/Orders/2011-01-01"; break; case "加拿大": config.ServiceURL = "https://mws.amazonservices.ca/Orders/2011-01-01"; break; case "欧洲": config.ServiceURL = "https://mws-eu.amazonservices.com/Orders/2011-01-01"; break; case "日本": config.ServiceURL = "https://mws.amazonservices.jp/Orders/2011-01-01"; break; case "中国": config.ServiceURL = "https://mws.amazonservices.com.cn/Orders/2011-01-01"; break; } #endregion MarketplaceWebServiceOrdersClient service = new MarketplaceWebServiceOrdersClient( applicationName, applicationVersion, accessKeyId, secretAccessKey, config); ListOrdersRequest OrdersRequest = new ListOrdersRequest(); OrdersRequest.SellerId = merchantId; OrdersRequest.LastUpdatedAfter =System.DateTime.Now.AddDays(-15); // if (StopDate != null) // OrdersRequest.LastUpdatedBefore = StopDate.Value; #region 设置等待发货状态 MarketplaceIdList markplacelist = new MarketplaceIdList(); markplacelist.Id.Add(marketplaceId); OrdersRequest.MarketplaceId = markplacelist; OrderStatusList statusList = new OrderStatusList(); List status = new List { OrderStatusEnum.Unshipped, //等待发货 OrderStatusEnum.PartiallyShipped //部分发货 }; statusList.Status = status; OrdersRequest.OrderStatus = statusList; #endregion ListOrdersResponse OrdersResponse = service.ListOrders(OrdersRequest); int i = 1; 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; if (country == "美国") model.OrderDate = model.OrderDate.Value.AddHours(8); model.BuyerID = ""; model.BuyerName = item.ShippingAddress.Name; model.BuyerCountry = item.ShippingAddress.CountryCode; 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; if (string.IsNullOrEmpty(item.ShippingAddress.County) == false) model.BuyerAddr += "," + item.ShippingAddress.County; model.BuyerPhone = item.ShippingAddress.Phone; model.BuyerProvince = item.ShippingAddress.StateOrRegion; model.BuyerCity = item.ShippingAddress.City; model.BuyerArea = item.ShippingAddress.District; model.BuyerMobile = ""; model.BuyerMail = item.BuyerEmail; model.BuyerFax = ""; model.BuyerZip = item.ShippingAddress.PostalCode; model.OrderRemark = ""; model.LeaveWord = ""; model.PayDate = item.LastUpdateDate; model.OutOrderDate = null; model.PostInfo = item.ShipServiceLevel; model.ListModel = new List(); 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; if (country == "美国") model.OrderDate = model.OrderDate.Value.AddHours(8); model.BuyerID = ""; model.BuyerName = item.ShippingAddress.Name; model.BuyerCountry = item.ShippingAddress.CountryCode; 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; if (string.IsNullOrEmpty(item.ShippingAddress.County) == false) model.BuyerAddr += "," + item.ShippingAddress.County; model.BuyerPhone = item.ShippingAddress.Phone; model.BuyerProvince = item.ShippingAddress.StateOrRegion; model.BuyerCity = item.ShippingAddress.City; model.BuyerArea = item.ShippingAddress.District; model.BuyerMobile = ""; model.BuyerMail = item.BuyerEmail; model.BuyerFax = ""; model.BuyerZip = item.ShippingAddress.PostalCode; model.OrderRemark = ""; model.LeaveWord = ""; model.PayDate = item.LastUpdateDate; model.OutOrderDate = null; model.PostInfo = item.ShipServiceLevel; model.ListModel = new List(); ListModel.Add(model); #endregion } nexttoken = nextresponse.ListOrdersByNextTokenResult.NextToken; i++; } #endregion ListOrderItemsRequest OrderItemsRequest = new ListOrderItemsRequest(); OrderItemsRequest.SellerId = merchantId; #region 获取订单分配内容 i = 0; foreach (OrderModel model in ListModel) { i++; #region 延迟2秒,避免被限制 if (i > 10) { System.Threading.Thread.Sleep(2 * 1000); i = 0; } #endregion try { #region 获取OrderItems信息 OrderItemsRequest.AmazonOrderId = model.OrderCode; ListOrderItemsResponse OrderItemsResponse = service.ListOrderItems(OrderItemsRequest); foreach (var item2 in OrderItemsResponse.ListOrderItemsResult.OrderItems.OrderItem) { if (item2.QuantityOrdered <= 0) continue; 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.Title; model2.GoodsSKU = item2.SellerSKU; model2.PostInfo = model.PostInfo; model2.OrderItemId = item2.OrderItemId; model.ListModel.Add(model2); } System.Threading.Thread.Sleep(1000); 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) { if (item2.QuantityOrdered <= 0) continue; 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.Title; model2.GoodsSKU = item2.SellerSKU; model2.PostInfo = model.PostInfo; model2.OrderItemId = item2.OrderItemId; model.ListModel.Add(model2); } } #endregion } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } } #endregion } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } return ListModel; } #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 } }