You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
476 lines
23 KiB
C#
476 lines
23 KiB
C#
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<OrderModel> GetOrders(DateTime? StartDate, DateTime? StopDate, string AccountName, out string ErrorMessage)
|
|
{
|
|
ErrorMessage = "";
|
|
List<OrderModel> ListModel = new List<OrderModel>();
|
|
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<OrderStatusEnum> status = new List<OrderStatusEnum>
|
|
{ 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<OrderDetailModel>();
|
|
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<Order> nextorders = new List<Order>();
|
|
|
|
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<OrderDetailModel>();
|
|
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<OrderModel> GetFBAOrders(DateTime? StartDate, DateTime? StopDate, string AccountName, DateTime OrderDate, out string ErrorMessage)
|
|
{
|
|
ErrorMessage = "";
|
|
List<OrderModel> ListModel = new List<OrderModel>();
|
|
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<FulfillmentChannelEnum> fce = new List<FulfillmentChannelEnum>
|
|
{ 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<Order> nextorders = new List<Order>();
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
}
|