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.

292 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MarketplaceWebServiceOrders;
using MarketplaceWebServiceOrders.Model;
using NetLibrary.Log;
using NetLibrary.OnlineTrade;
namespace TradeServer
{
public class AmazonNew
{
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 string MWSAuthToken { get; set; }
public AmazonNew()
{
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/2013-09-01";
break;
case "加拿大":
config.ServiceURL = "https://mws.amazonservices.ca/Orders/2013-09-01";
break;
case "欧洲":
config.ServiceURL = "https://mws-eu.amazonservices.com/Orders/2013-09-01";
break;
case "日本":
config.ServiceURL = "https://mws.amazonservices.jp/Orders/2013-09-01";
break;
case "中国":
config.ServiceURL = "https://mws.amazonservices.com.cn/Orders/2013-09-01";
break;
}
#endregion
//MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();
//config.ServiceURL = "https://mws.amazonservices.com/Orders/2013-09-01";
// MarketplaceWebServiceOrders.MarketplaceWebServiceOrders service = new MarketplaceWebServiceOrdersClient("AKIAIFTXDPZEJBIKCUMQ", "ituSmcpZ6v9JOLa13rdPm/94jp7ZzIY8ZTxbHiMG", "CSharpSampleCode", "1.0", config);
MarketplaceWebServiceOrders.MarketplaceWebServiceOrders service = new MarketplaceWebServiceOrdersClient(accessKeyId, secretAccessKey, "CSharpSampleCode", applicationVersion, config);
ListOrdersRequest request = new ListOrdersRequest();
// string sellerId = "AUK1LBRRMNKYN";
request.SellerId = merchantId;// sellerId;
//string mwsAuthToken = "amzn.mws.d8ad4919-990d-95ca-3a6c-b7c31dc44f99";
request.MWSAuthToken = MWSAuthToken;// mwsAuthToken;
//DateTime createdAfter = DateTime.Now.AddDays(-10);
// request.CreatedAfter = createdAfter;
//DateTime createdBefore = new DateTime();
//request.CreatedBefore = createdBefore;
DateTime lastUpdatedAfter = DateTime.Now.AddDays(-10);
request.LastUpdatedAfter = lastUpdatedAfter;
//DateTime lastUpdatedBefore = new DateTime();
//request.LastUpdatedBefore = lastUpdatedBefore;
List<string> orderStatus = new List<string>();
orderStatus.Add("Unshipped");
orderStatus.Add("PartiallyShipped");
request.OrderStatus = orderStatus;
List<string> marketplace = new List<string>();
// marketplaceId.Add("ATVPDKIKX0DER");
marketplace.Add(marketplaceId);
request.MarketplaceId = marketplace;
// ListOrdersRequest OrdersRequest = new ListOrdersRequest();
//OrdersRequest.MWSAuthToken = "amzn.mws.d8ad4919-990d-95ca-3a6c-b7c31dc44f99";
// OrdersRequest.SellerId = "AUK1LBRRMNKYN";
// OrdersRequest.CreatedAfter = System.DateTime.Now.AddDays(-15);
//// OrdersRequest.LastUpdatedAfter = System.DateTime.Now.AddDays(-15);
// // if (StopDate != null)
// // OrdersRequest.LastUpdatedBefore = StopDate.Value;
// #region 设置等待发货状态
// List<string> markplacelist = new List<string>();
// markplacelist.Add("ATVPDKIKX0DER");
// OrdersRequest.MarketplaceId = markplacelist;
// List<string> status = new List<string>();
// status.Add("Unshipped");
// status.Add("PartiallyShipped");
// OrdersRequest.OrderStatus = status;
// #endregion
ListOrdersResponse OrdersResponse = service.ListOrders(request);
int i = 1;
foreach (var item in OrdersResponse.ListOrdersResult.Orders)
{
#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)
{
#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)
{
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
}
}