using System; using System.Collections.Generic; using System.Linq; using System.Web; using NetLibrary.OnlineTrade; using System.Text; using NetLibrary; using System.Net; using System.Web.Script.Serialization; using System.Xml.Linq; using NetLibrary.Log; using ApiNew; using System.Xml; namespace TradeManageNew { public class AmazonNewApi { public string SellerId { get; set; } public string country { get; set; } public string MWSAuthToken { get; set; } public string SumoolToKen { get; set; } public string MarketplaceId { get; set; } // List olist = new List(); ///解码 #region 读取订单列表 public List GetOrdersNew(DateTime? StartDate, DateTime? StopDate, string FulfillmentChannel, List olist, out string ErrorMessage) { if (olist == null) olist = new List(); List ListModel = new List(); try { ErrorMessage = ""; if (StartDate == null) StartDate = DateTime.Today.AddDays(-3); string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"CreatedAfter\":\"2022-02-25T07: 27:29.289Z\",\"OrderStatuses\":\"Shipped\",\"FulfillmentChannels\":\"MFN\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":5}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb= Convert.ToBase64String(bytes); str += "&BodyContent="+bb; str += "&Command=/orders/v0/orders"; str += "&HttpMethod=Get"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } string xml = model2.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt = XElement.Parse(xml); XElement xel = xt.Element("ListOrdersResult").Element("Orders"); // \n \n string nexttoken = ""; if (xt.Element("ListOrdersResult") != null && xt.Element("ListOrdersResult").Element("NextToken") != null) nexttoken = xt.Element("ListOrdersResult").Element("NextToken").Value; // GetNext(nexttoken); foreach (XElement item in xel.Elements("Order")) { System.Threading.Thread.Sleep(1000); if (item.Element("Canceled") != null && item.Element("OrderStatus").Value == "Canceled") continue; if (item.Element("OrderTotal") == null || item.Element("OrderTotal").Element("Amount") == null || item.Element("OrderTotal").Element("Amount").Value == "") continue; OrderModel model = new OrderModel(); model.OrderCode = item.Element("AmazonOrderId").Value;//订单编号 if (model.OrderCode == "113-1276800-3025014") { string a = ""; } model.PlatOrderCode = item.Element("AmazonOrderId").Value;//OrderLineItemID if (model.PlatOrderCode == null || model.PlatOrderCode == "") continue; if (olist != null) { var amd = olist.Find(n => n.OrderCode == model.PlatOrderCode); if (amd != null) continue; } model.TotalPrice = Convert.ToDecimal(item.Element("OrderTotal").Element("Amount").Value); model.MoneyCode = "USD";//币种 if (item.Element("PurchaseDate") != null) model.OrderDate = Convert.ToDateTime(item.Element("PurchaseDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("FulfillmentChannel") != null) model.BuyerID = item.Element("FulfillmentChannel").Value; else model.BuyerID = "MFN"; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Name") != null) model.BuyerName = item.Element("ShippingAddress").Element("Name").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("CountryCode") != null && item.Element("ShippingAddress").Element("CountryCode").Value != "") model.BuyerCountry = item.Element("ShippingAddress").Element("CountryCode").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine1") != null && item.Element("ShippingAddress").Element("AddressLine1").Value != "") model.BuyerAddr = item.Element("ShippingAddress").Element("AddressLine1").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine2") != null && item.Element("ShippingAddress").Element("AddressLine2").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine2").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine3") != null && item.Element("ShippingAddress").Element("AddressLine3").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine3").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("County") != null && item.Element("ShippingAddress").Element("County").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("County").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Phone") != null && item.Element("ShippingAddress").Element("Phone").Value != "") model.BuyerPhone = item.Element("ShippingAddress").Element("Phone").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("StateOrRegion") != null) model.BuyerProvince = item.Element("ShippingAddress").Element("StateOrRegion").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("City") != null) model.BuyerCity = item.Element("ShippingAddress").Element("City").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("District") != null && item.Element("ShippingAddress").Element("District").Value != "") model.BuyerArea = item.Element("ShippingAddress").Element("District").Value; model.BuyerMobile = ""; if (item.Element("BuyerEmail") != null) model.BuyerMail = item.Element("BuyerEmail").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressType") != null) model.BuyerFax = item.Element("ShippingAddress").Element("AddressType").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("PostalCode") != null) model.BuyerZip = item.Element("ShippingAddress").Element("PostalCode").Value; model.OrderRemark = ""; model.LeaveWord = ""; if (item.Element("LastUpdateDate") != null) model.PayDate = Convert.ToDateTime(item.Element("LastUpdateDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("LatestDeliveryDate") != null) model.OutOrderDate = Convert.ToDateTime(item.Element("LatestDeliveryDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (model.OrderDate != null && model.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OrderDate = DateTime.Now; } if (model.PayDate != null && model.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { model.PayDate = DateTime.Now; } if (model.OutOrderDate != null && model.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OutOrderDate = DateTime.Now.AddDays(7); } model.PostInfo = item.Element("ShipServiceLevel").Value; model.ListModel = new List(); str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=ListOrderItems"; str += "&AmazonOrderId=" + model.PlatOrderCode; str += "&SignatureVersion=2"; str += "&Version=2013-09-01"; str += "&Command=/Orders/2013-09-01"; data = Encoding.UTF8.GetBytes(str); ErrorMessage = ""; string XmlContent2 = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); continue; } AMResult model3 = JsonConvert.Deserialize(XmlContent2); if (model3.HasError == true) { ErrorMessage = model3.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); continue; } string xml2 = model3.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt2 = XElement.Parse(xml2); XElement xel2 = xt2.Element("ListOrderItemsResult").Element("OrderItems"); model.escrowFee = 0; foreach (XElement item2 in xel2.Elements("OrderItem")) { OrderDetailModel gmodel = new OrderDetailModel(); gmodel.productImgUrl = item2.Element("ASIN").Value;//订单编号 if (item2.Element("ItemTax") != null && item2.Element("ItemTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ItemTax").Element("Amount").Value); if (item2.Element("ShippingTax") != null && item2.Element("ShippingTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ShippingTax").Element("Amount").Value); gmodel.GoodsNum = Convert.ToInt32(item2.Element("QuantityOrdered").Value); if (item2.Element("ItemPrice") != null && item2.Element("ItemPrice").Element("Amount") != null) { gmodel.GoodsPrice = Convert.ToDecimal(item2.Element("ItemPrice").Element("Amount").Value); gmodel.MoneyCode = item2.Element("ItemPrice").Element("CurrencyCode").Value; } gmodel.GoodsName = item2.Element("Title").Value; gmodel.GoodsSKU = item2.Element("SellerSKU").Value; gmodel.PostInfo = model.PostInfo; gmodel.OrderItemId = item2.Element("OrderItemId").Value; model.ListModel.Add(gmodel); } // model.TotalPrice = model.TotalPrice - model.escrowFee; ListModel.Add(model); } while (nexttoken != "") { string NextToken2 = ""; System.Threading.Thread.Sleep(5000); var nlist = GetNext(nexttoken, olist, out NextToken2); if (nlist != null) { foreach (var md in nlist) { ListModel.Add(md); } } nexttoken = NextToken2; } return ListModel; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ListModel; } } #endregion #region 创建报表 public string CreatRetuenReport(out string ErrorMessage) { List ListModel = new List(); try { ErrorMessage = ""; string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string stime = DateTime.Now.AddDays(-60).ToString("yyyy-MM-dd") + "T00: 00:00"; string etime = DateTime.Now.ToString("yyyy-MM-dd") + "T00: 00:00"; string body = "{\"reportType\":\"GET_XML_RETURNS_DATA_BY_RETURN_DATE\",\"marketplaceIds\":[\"" + MarketplaceId + "\"],\"dataStartTime\":\""+ stime+ "\",\"dataEndTime\":\"" + etime + "\"}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/reports/2021-06-30/reports"; str += "&HttpMethod=Post"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ""; } } #endregion #region 获取报表 public string GetRetuenReport(string reportId,out string ErrorMessage) { List ListModel = new List(); try { ErrorMessage = ""; string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"reportType\":\"GET_XML_RETURNS_DATA_BY_RETURN_DATE\",\"marketplaceIds\":[\"" + MarketplaceId + "\"]}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb = Convert.ToBase64String(bytes); // str += "&BodyContent=" + bb; str += "&Command=/reports/2021-06-30/reports/"+ reportId; str += "&HttpMethod=Get"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ""; } } #endregion #region 读取订单列表 public string GetSorts(out string ErrorMessage) { List ListModel = new List(); try { ErrorMessage = ""; string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body ="" ;// "{\"reportType\":\"GET_XML_BROWSE_TREE_DATA\",\"marketplaceIds\":[\"" + MarketplaceId + "\"]}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/reports/2021-06-30/documents/amzn1.spdoc.1.3.41aa9541-d277-4090-aafc-a8c5f6b522d5.T1P8HX91PAW6WL.400"; str += "&HttpMethod=Get"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ""; } } #endregion #region 读取订单列表 public List GetOrders(DateTime? StartDate, DateTime? StopDate, string FulfillmentChannel,List olist, out string ErrorMessage) { if (olist == null) olist = new List(); List ListModel = new List(); try { ErrorMessage = ""; if (StartDate == null) StartDate = DateTime.Today.AddDays(-3); string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=ListOrders"; str += "&LastUpdatedAfter=" + StartDate.Value.ToString("yyyy-MM-dd") + "T00:00:00"; str += "&SignatureVersion=2"; str += "&Version=2013-09-01"; if (FulfillmentChannel == "AFN") { str += "&OrderStatus.Status.1=Shipped"; } else { str += "&OrderStatus.Status.1=Unshipped"; str += "&OrderStatus.Status.2=PartiallyShipped"; } str += "&FulfillmentChannel.Channel.1=" + FulfillmentChannel;//MFN,AFN"; str += "&Command=/Orders/2013-09-01"; str += "&MarketplaceId.Id.1=" + MarketplaceId; str += "&MaxResultsPerPage=50"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } string xml = model2.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt = XElement.Parse(xml); XElement xel = xt.Element("ListOrdersResult").Element("Orders"); // \n \n string nexttoken = ""; if (xt.Element("ListOrdersResult")!= null&&xt.Element("ListOrdersResult").Element("NextToken")!= null) nexttoken=xt.Element("ListOrdersResult").Element("NextToken").Value; // GetNext(nexttoken); foreach (XElement item in xel.Elements("Order")) { System.Threading.Thread.Sleep(1000); if (item.Element("Canceled") != null && item.Element("OrderStatus").Value == "Canceled") continue; if (item.Element("OrderTotal") == null || item.Element("OrderTotal").Element("Amount") == null || item.Element("OrderTotal").Element("Amount").Value == "") continue; OrderModel model = new OrderModel(); model.OrderCode = item.Element("AmazonOrderId").Value;//订单编号 if (model.OrderCode == "113-1276800-3025014") { string a = ""; } model.PlatOrderCode = item.Element("AmazonOrderId").Value;//OrderLineItemID if (model.PlatOrderCode == null || model.PlatOrderCode == "") continue; if (olist != null) { var amd = olist.Find(n => n.OrderCode == model.PlatOrderCode); if (amd != null) continue; } model.TotalPrice = Convert.ToDecimal(item.Element("OrderTotal").Element("Amount").Value); model.MoneyCode = "USD";//币种 if (item.Element("PurchaseDate") != null) model.OrderDate = Convert.ToDateTime(item.Element("PurchaseDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("FulfillmentChannel") != null) model.BuyerID = item.Element("FulfillmentChannel").Value; else model.BuyerID = "MFN"; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Name") != null) model.BuyerName = item.Element("ShippingAddress").Element("Name").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("CountryCode") != null && item.Element("ShippingAddress").Element("CountryCode").Value != "") model.BuyerCountry = item.Element("ShippingAddress").Element("CountryCode").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine1") != null && item.Element("ShippingAddress").Element("AddressLine1").Value != "") model.BuyerAddr = item.Element("ShippingAddress").Element("AddressLine1").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine2") != null && item.Element("ShippingAddress").Element("AddressLine2").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine2").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine3") != null && item.Element("ShippingAddress").Element("AddressLine3").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine3").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("County") != null && item.Element("ShippingAddress").Element("County").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("County").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Phone") != null && item.Element("ShippingAddress").Element("Phone").Value != "") model.BuyerPhone = item.Element("ShippingAddress").Element("Phone").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("StateOrRegion") != null) model.BuyerProvince = item.Element("ShippingAddress").Element("StateOrRegion").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("City") != null) model.BuyerCity = item.Element("ShippingAddress").Element("City").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("District") != null && item.Element("ShippingAddress").Element("District").Value != "") model.BuyerArea = item.Element("ShippingAddress").Element("District").Value; model.BuyerMobile = ""; if (item.Element("BuyerEmail") != null) model.BuyerMail = item.Element("BuyerEmail").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressType") != null) model.BuyerFax = item.Element("ShippingAddress").Element("AddressType").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("PostalCode") != null) model.BuyerZip = item.Element("ShippingAddress").Element("PostalCode").Value; model.OrderRemark = ""; model.LeaveWord = ""; if (item.Element("LastUpdateDate") != null) model.PayDate = Convert.ToDateTime(item.Element("LastUpdateDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("LatestDeliveryDate") != null) model.OutOrderDate = Convert.ToDateTime(item.Element("LatestDeliveryDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (model.OrderDate != null && model.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OrderDate = DateTime.Now; } if (model.PayDate != null && model.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { model.PayDate = DateTime.Now; } if (model.OutOrderDate != null && model.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OutOrderDate = DateTime.Now.AddDays(7); } model.PostInfo = item.Element("ShipServiceLevel").Value; model.ListModel = new List(); str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=ListOrderItems"; str += "&AmazonOrderId=" + model.PlatOrderCode; str += "&SignatureVersion=2"; str += "&Version=2013-09-01"; str += "&Command=/Orders/2013-09-01"; data = Encoding.UTF8.GetBytes(str); ErrorMessage = ""; string XmlContent2 = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); continue; } AMResult model3 = JsonConvert.Deserialize(XmlContent2); if (model3.HasError == true) { ErrorMessage = model3.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); continue; } string xml2 = model3.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt2 = XElement.Parse(xml2); XElement xel2 = xt2.Element("ListOrderItemsResult").Element("OrderItems"); model.escrowFee = 0; foreach (XElement item2 in xel2.Elements("OrderItem")) { OrderDetailModel gmodel = new OrderDetailModel(); gmodel.productImgUrl = item2.Element("ASIN").Value;//订单编号 if (item2.Element("ItemTax") != null && item2.Element("ItemTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ItemTax").Element("Amount").Value); if (item2.Element("ShippingTax") != null && item2.Element("ShippingTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ShippingTax").Element("Amount").Value); gmodel.GoodsNum = Convert.ToInt32(item2.Element("QuantityOrdered").Value); if (item2.Element("ItemPrice") != null && item2.Element("ItemPrice").Element("Amount") != null) { gmodel.GoodsPrice = Convert.ToDecimal(item2.Element("ItemPrice").Element("Amount").Value); gmodel.MoneyCode = item2.Element("ItemPrice").Element("CurrencyCode").Value; } gmodel.GoodsName = item2.Element("Title").Value; gmodel.GoodsSKU = item2.Element("SellerSKU").Value; gmodel.PostInfo = model.PostInfo; gmodel.OrderItemId = item2.Element("OrderItemId").Value; model.ListModel.Add(gmodel); } // model.TotalPrice = model.TotalPrice - model.escrowFee; ListModel.Add(model); } while(nexttoken!="") { string NextToken2 = ""; System.Threading.Thread.Sleep(5000); var nlist = GetNext(nexttoken,olist, out NextToken2); if (nlist != null) { foreach (var md in nlist) { ListModel.Add(md); } } nexttoken = NextToken2; } return ListModel; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ListModel; } } #endregion public bool UploadAMOrder2(List list, out string error) { long resultId = 0; try { var now = ToUTCDatetime(DateTime.Now); string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string FileContent = ""; //
1.01A3CHOODG4BN7N0
OrderFulfillment1111-6291990-24994432020-08-06T04:07:54+08:00FedExStandard61290989349120195308461113291464581
var xml = new StringBuilder(""); xml.Append(""); xml.Append("
"); xml.Append("1.01"); xml.AppendFormat("{0}", SellerId); xml.Append("
"); xml.Append("OrderFulfillment"); int i = 1; foreach (var omd in list) { //if (omd.OrderDate != "" && DateTime.Now.AddHours(-8) <= Convert.ToDateTime(omd.OrderDate)) //{ // now = ToUTCDatetime(Convert.ToDateTime(omd.OrderDate).AddHours(3)); //} foreach (var md in omd.BackGoodsList) { xml.Append(""); xml.Append("" + i + ""); xml.Append(""); xml.AppendFormat("{0}", omd.PlatOrderCode); xml.AppendFormat("{0}T{1}+08:00", now.ToString("yyyy-MM-dd"), now.ToString("hh:mm:ss")); xml.Append(""); //xml.AppendFormat("{0}", omd.serviceName); //xml.AppendFormat("Standard"); if (omd.serviceName!=null&&omd.serviceName.Contains("UPS")) xml.AppendFormat("UPS"); else xml.AppendFormat("FedEx"); xml.AppendFormat("Standard"); xml.AppendFormat("{0}", omd.TrackCode); xml.Append(""); xml.Append(""); xml.AppendFormat("{0}", md.GoodsDesc); xml.Append("" + md.GoodsNum + ""); xml.Append(""); xml.Append(""); xml.Append(""); i++; } } xml.Append("
"); FileContent = EncodeBase64("utf-8", xml.ToString()); string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=SubmitFeed"; str += "&FileContent=" + FileContent; str += "&FeedType=_POST_ORDER_FULFILLMENT_DATA_"; str += "&Version=2009-01-01"; str += "&SignatureVersion=2"; str += "&ContentType=text/xml"; str += "&Command=/"; str += "&MarketplaceId.Id.1=" + MarketplaceId; // str += "&MaxResultsPerPage=2"; var data = Encoding.UTF8.GetBytes(str); string ErrorMessage = ""; string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetNext", "", ErrorMessage); error = ErrorMessage; return false; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model3 = JsonConvert.Deserialize(XmlContent); if (model3.HasError == true) { error = model3.Message; ErrorFollow.TraceWrite("GetNext", "", error); return false; } error = ""; return true; } catch (Exception ex) { error = ex.Message; ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return false; } } public List GetGoodsPM(List list) { try { string ErrorMessage = ""; string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=GetCompetitivePricingForASIN"; str += "&SignatureVersion=2"; str += "&Version=2011-10-01"; str += "&Command=/Products/2011-10-01"; str += "&MarketplaceId="+MarketplaceId; int i = 0; foreach (var md in list) { i++; str += "&ASINList.ASIN." + i.ToString() + "=" + md.ASIN; } // str += "&ASINList.ASIN.2=B005WKJWD4"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetGoodsPM", "", ErrorMessage); return list; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetGoodsPM", "", ErrorMessage); return list; } string xml2 = model2.ResultObject.Replace("xmlns=\"http://mws.amazonservices.com/schema/Products/2011-10-01\"", ""); XElement xt2 = XElement.Parse(xml2); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml2); XmlNodeList xnlNLFir = xmlDoc.SelectSingleNode("GetCompetitivePricingForASINResponse").SelectNodes("GetCompetitivePricingForASINResult");//得到根节点 if (xnlNLFir != null) { foreach (XmlNode xnl in xnlNLFir)//遍历devset { XmlNode xn = xnl.SelectSingleNode("Product").SelectSingleNode("SalesRankings"); XmlNode xn2 = xnl.SelectSingleNode("Product").SelectSingleNode("Identifiers").SelectSingleNode("MarketplaceASIN").SelectSingleNode("ASIN"); string asin = ""; if (xn2 != null) { asin = xn2.InnerText; } var gmd = list.Find(n => n.ASIN == asin); if (xn != null && gmd!=null) { XmlNodeList xnlNL = xn.SelectNodes("SalesRank");//得到根节点 if (xnlNL != null) { int j = 0; foreach (XmlNode xnl2 in xnlNL)//遍历devset { j++; var rank = xnl2.SelectSingleNode("Rank").InnerText; if (rank != null && rank.ToString() != "") { int rk = Convert.ToInt32(rank); if (j == 1) gmd.PM1 = rk; else if(gmd.PM2==0||rk < gmd.PM2) gmd.PM2 = rk; string ProductCategoryId = xnl2.SelectSingleNode("ProductCategoryId").InnerText; } } } } } } return list; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return list; } } public string GetGoodsReturnRequest(DateTime sdt, DateTime edt) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=https://mws.amazonservices.com"; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; // str += "&Acknowledged=false"; str += "&Action=RequestReport"; str += "&SignatureVersion=2"; str += "&Version=2009-01-01"; str += "&ReportType=_GET_XML_RETURNS_DATA_BY_RETURN_DATE_"; str += "&Command=/Reports/2009-01-01"; str += "&MarketplaceId.Id.1=ATVPDKIKX0DER"; str += "&StartDate=" + sdt.ToString("yyyy-MM-dd"); str += "&EndDate=" + edt.ToString("yyyy-MM-dd"); var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage); return null; } string xml2 = model2.ResultObject.Replace("xmlns=\"http://mws.amazonaws.com/doc/2009-01-01/\"", ""); XElement xt2 = XElement.Parse(xml2); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml2); XmlNode xnlNLFir = xmlDoc.SelectSingleNode("RequestReportResponse").SelectSingleNode("RequestReportResult").SelectSingleNode("ReportRequestInfo");//得到根节点 string ReportId = ""; if (xnlNLFir != null) { ReportId = xnlNLFir.SelectSingleNode("ReportRequestId").InnerText; } return ReportId; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return null; } } public List GetGoodsReturn(DateTime sdt,DateTime edt,string requestid) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=https://mws.amazonservices.com"; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; // str += "&Acknowledged=false"; str += "&Action=GetReportList"; str += "&ReportRequestIdList.Id.1="+ requestid; str += "&SignatureVersion=2"; str += "&Version=2009-01-01"; str += "&ReportTypeList.Type.1=_GET_XML_RETURNS_DATA_BY_RETURN_DATE_"; str += "&Command=/Reports/2009-01-01"; str += "&MarketplaceId.Id.1=ATVPDKIKX0DER"; // str += "&AvailableFromDate="+sdt.ToString("yyyy-MM-dd"); // str += "&AvailableToDate=" + edt.ToString("yyyy-MM-dd"); var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetGoodsReturn", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetGoodsReturn", "", ErrorMessage); return null; } string xml2 = model2.ResultObject.Replace("xmlns=\"http://mws.amazonaws.com/doc/2009-01-01/\"", ""); XElement xt2 = XElement.Parse(xml2); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml2); XmlNode xnlNLFir = xmlDoc.SelectSingleNode("GetReportListResponse").SelectSingleNode("GetReportListResult");//得到根节点 if (xnlNLFir != null) { XmlNodeList xnlNL = xnlNLFir.SelectNodes("ReportInfo");//得到根节点 if (xnlNL != null) { foreach (XmlNode xnl2 in xnlNL)//遍历devset { AMRepotResult rmd = new AMRepotResult(); string ReportId = xnl2.SelectSingleNode("ReportId").InnerText; rmd.ReportId = ReportId; rlist.Add(rmd); } } } return rlist; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return null; } } public List GetGoodsReturnOrders(string reportid) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=https://mws.amazonservices.com"; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=GetReport"; str += "&ReportId="+ reportid; str += "&SignatureVersion=2"; str += "&Version=2009-01-01"; str += "&Command=/Reports/2009-01-01"; str += "&MarketplaceId.Id.1=ATVPDKIKX0DER"; var data = Encoding.UTF8.GetBytes(str); string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetGoodsReturn", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetGoodsReturn", "", ErrorMessage); return null; } string xml2 = model2.ResultObject.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"amzn-envelope.xsd\"", ""); XElement xt2 = XElement.Parse(xml2); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml2); XmlNodeList xnlNLFir = xmlDoc.SelectSingleNode("AmazonEnvelope").SelectSingleNode("Message").SelectNodes("return_details");//得到根节点 if (xnlNLFir != null) { foreach (XmlNode xnl in xnlNLFir)//遍历devset { AMRepotOrders rmd = new AMRepotOrders(); string orderid = xnl.SelectSingleNode("order_id").InnerText; if (orderid == "113-2488895-8691467" || orderid == "113-0306824-0995429") { string a = ""; } string order_date = xnl.SelectSingleNode("order_date").InnerText; string return_request_status = xnl.SelectSingleNode("return_request_status").InnerText; string return_request_date = xnl.SelectSingleNode("return_request_date").InnerText; rmd.order_id = orderid; rmd.return_request_status = return_request_status; rmd.order_date = order_date; rmd.return_request_date = return_request_date; if (xnl != null) { XmlNodeList xnlNL = xnl.SelectNodes("item_details");//得到根节点 List AMRepotOrdersDetail = new List(); rmd.return_details = AMRepotOrdersDetail; if (xnlNL != null) { foreach (XmlNode xnl2 in xnlNL)//遍历devset { if (xnl2.SelectSingleNode("asin") != null) { string asin = xnl2.SelectSingleNode("asin").InnerText; string return_reason_code = xnl2.SelectSingleNode("return_reason_code").InnerText; string merchant_sku = xnl2.SelectSingleNode("merchant_sku").InnerText; string in_policy = xnl2.SelectSingleNode("in_policy").InnerText; int return_quantity = 1; if (xnl2.SelectSingleNode("return_quantity") != null && xnl2.SelectSingleNode("return_quantity").InnerText != "") return_quantity = Convert.ToInt32(xnl2.SelectSingleNode("return_quantity").InnerText); decimal refund_amount = 0; if (xnl2.SelectSingleNode("refund_amount") != null && xnl2.SelectSingleNode("refund_amount").InnerText != "") refund_amount = Convert.ToDecimal(xnl2.SelectSingleNode("refund_amount").InnerText); AMRepotOrdersDetail dmd = new AMRepotOrdersDetail(); dmd.asin = asin; dmd.return_reason_code = return_reason_code; dmd.merchant_sku = merchant_sku; dmd.return_quantity = return_quantity; dmd.refund_amount = refund_amount; dmd.in_policy = in_policy; AMRepotOrdersDetail.Add(dmd); } } } List AMRepotLabelsDetail = new List(); rmd.label_details = AMRepotLabelsDetail; XmlNodeList xnlNL2 = xnl.SelectNodes("label_details");//得到根节点 if (xnlNL2 != null) { foreach (XmlNode xnl2 in xnlNL2)//遍历devset { if (xnl2.SelectSingleNode("tracking_id") != null) { string tracking_id = xnl2.SelectSingleNode("tracking_id").InnerText; string return_carrier = xnl2.SelectSingleNode("return_carrier").InnerText; decimal label_cost = 0; if (xnl2.SelectSingleNode("label_cost") != null && xnl2.SelectSingleNode("label_cost").InnerText != "") label_cost = Convert.ToDecimal(xnl2.SelectSingleNode("label_cost").InnerText); AMRepotLabelsDetail lmd = new AMRepotLabelsDetail(); lmd.tracking_id = tracking_id; lmd.return_carrier = return_carrier; lmd.label_cost = label_cost; AMRepotLabelsDetail.Add(lmd); } else { string tracking_id = ""; string return_carrier = ""; decimal label_cost = 0; if (xnl2.SelectSingleNode("label_cost") != null && xnl2.SelectSingleNode("label_cost").InnerText != "") label_cost = Convert.ToDecimal(xnl2.SelectSingleNode("label_cost").InnerText); AMRepotLabelsDetail lmd = new AMRepotLabelsDetail(); lmd.tracking_id = tracking_id; lmd.return_carrier = return_carrier; lmd.label_cost = label_cost; AMRepotLabelsDetail.Add(lmd); } } } } rlist.Add(rmd); } } return rlist; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return null; } } ///编码 public static string EncodeBase64(string code_type, string code) { string encode = ""; byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code); try { encode = Convert.ToBase64String(bytes); } catch { encode = code; } return encode; } public DateTime ToUTCDatetime(DateTime datetime) { if (country == "美国" || country == "加拿大") { var d = datetime.AddHours(-12).ToString("yyyy-MM-dd HH:mm:ss"); return DateTime.Parse(d); } else if (country == "欧洲") { var d = datetime.AddHours(-7).ToString("yyyy-MM-dd HH:mm:ss"); return DateTime.Parse(d); } else if (country == "日本") { var d = datetime.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"); return DateTime.Parse(d); } else { var d = datetime.ToString("yyyy-MM-dd HH:mm:ss"); return DateTime.Parse(d); } } public List GetNext(string NextToken, List olist,out string NextToken2) { if (olist == null) olist = new List(); List ListModel = new List(); try { NextToken2 = ""; string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://mws.amazonservices.com"; break; case "加拿大": ServiceURL = "https://mws.amazonservices.ca"; break; case "欧洲": ServiceURL = "https://mws-eu.amazonservices.com"; break; case "日本": ServiceURL = "https://mws.amazonservices.jp"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion string url = "http://api.sumool.com/AmazonProxy/SendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=ListOrdersByNextToken"; str += "&SignatureVersion=2"; str += "&Version=2013-09-01"; str += "&NextToken=" + System.Web.HttpUtility.UrlEncode(NextToken, System.Text.Encoding.UTF8); //NextToken;//cuuXb/5rE5V/YYuZQbKv1QafEPREmauvizt1MIhPYZY5UeE2vqL5+q+3EeDVAX1m9bYwTOaLr1BRBUDTTfkLYd8ytOVgN7d/KyNtf5fepe1HnywimSSQDWsHD6/bUUR52L5dUFExSTmS68vI7Bqws+weLxD7b1CVfTtGOfGNtrwDY5vNcs9fDyeyat9X9kfV90Pt/dS9dfNe0zIeaOVNezxWEXvdeDL7jK/e/+Wa0s1twNzrtVnOxu6eFQOZqwUbuQlY5nzacE8wE7+t4NjazyEZY027dXAVTSGshRBy6ZQghiSCZ3PIKk1DNEBSp27+Ut7nFOOx+zdaHp4fabNqjZ2tUVsJ4RQh/IBQt3FQQzLmwHDeTLwt77nugIB18KqAgbNnl5xOfnEVIjQAQxp+3J+cRqVnyn3b4SR+oXPlG2k8wbiM2qCGeUNkGZHrEmwSvkpEs3nBE8XVgbG4EqTn56vqewKupVm5Cz/L15hZDT5OeKmHpMzOQw=="; str += "&Command=/Orders/2013-09-01"; str += "&MarketplaceId.Id.1="+MarketplaceId; // str += "&MaxResultsPerPage=2"; var data = Encoding.UTF8.GetBytes(str); string ErrorMessage = ""; string XmlContent = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetNext", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AMResult model2 = JsonConvert.Deserialize(XmlContent); if (model2.HasError == true) { ErrorMessage = model2.Message; ErrorFollow.TraceWrite("GetNext", "", ErrorMessage); return null; } string xml = model2.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt = XElement.Parse(xml); XElement xel = xt.Element("ListOrdersByNextTokenResult").Element("Orders"); // \n \n string nexttoken = ""; if (xt.Element("ListOrdersByNextTokenResult") != null && xt.Element("ListOrdersByNextTokenResult").Element("NextToken") != null && xt.Element("ListOrdersByNextTokenResult").Element("NextToken").Value != "") nexttoken = xt.Element("ListOrdersByNextTokenResult").Element("NextToken").Value; // GetNext(nexttoken); foreach (XElement item in xel.Elements("Order")) { System.Threading.Thread.Sleep(1000); if (item.Element("OrderStatus")!=null&&item.Element("OrderStatus").Value == "Canceled") continue; if (item.Element("OrderTotal") == null || item.Element("OrderTotal").Element("Amount") == null || item.Element("OrderTotal").Element("Amount").Value == "") continue; OrderModel model = new OrderModel(); model.OrderCode = item.Element("AmazonOrderId").Value;//订单编号 if (model.OrderCode == "113-1276800-3025014") { string a = ""; } model.PlatOrderCode = item.Element("AmazonOrderId").Value;//OrderLineItemID model.PlatOrderCode = item.Element("AmazonOrderId").Value;//OrderLineItemID if (model.PlatOrderCode == null || model.PlatOrderCode == "") continue; if (olist != null) { var amd = olist.Find(n => n.OrderCode == model.PlatOrderCode); if (amd != null) continue; } model.TotalPrice = Convert.ToDecimal(item.Element("OrderTotal").Element("Amount").Value); model.MoneyCode = "USD";//币种 if (item.Element("PurchaseDate") != null) model.OrderDate = Convert.ToDateTime(item.Element("PurchaseDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("FulfillmentChannel") != null) model.BuyerID = item.Element("FulfillmentChannel").Value; else model.BuyerID = "MFN"; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Name") != null) model.BuyerName = item.Element("ShippingAddress").Element("Name").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("CountryCode") != null && item.Element("ShippingAddress").Element("CountryCode").Value != "") model.BuyerCountry = item.Element("ShippingAddress").Element("CountryCode").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine1") != null && item.Element("ShippingAddress").Element("AddressLine1").Value != "") model.BuyerAddr = item.Element("ShippingAddress").Element("AddressLine1").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine2") != null && item.Element("ShippingAddress").Element("AddressLine2").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine2").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressLine3") != null && item.Element("ShippingAddress").Element("AddressLine3").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("AddressLine3").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("County") != null && item.Element("ShippingAddress").Element("County").Value != "") model.BuyerAddr += " " + item.Element("ShippingAddress").Element("County").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("Phone") != null && item.Element("ShippingAddress").Element("Phone").Value != "") model.BuyerPhone = item.Element("ShippingAddress").Element("Phone").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("StateOrRegion") != null) model.BuyerProvince = item.Element("ShippingAddress").Element("StateOrRegion").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("City") != null) model.BuyerCity = item.Element("ShippingAddress").Element("City").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("District") != null && item.Element("ShippingAddress").Element("District").Value != "") model.BuyerArea = item.Element("ShippingAddress").Element("District").Value; model.BuyerMobile = ""; if (item.Element("BuyerEmail") != null) model.BuyerMail = item.Element("BuyerEmail").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("AddressType") != null) model.BuyerFax = item.Element("ShippingAddress").Element("AddressType").Value; if (item.Element("ShippingAddress") != null && item.Element("ShippingAddress").Element("PostalCode") != null) model.BuyerZip = item.Element("ShippingAddress").Element("PostalCode").Value; model.OrderRemark = ""; model.LeaveWord = ""; if (item.Element("LastUpdateDate") != null) model.PayDate = Convert.ToDateTime(item.Element("LastUpdateDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.Element("LatestDeliveryDate") != null) model.OutOrderDate = Convert.ToDateTime(item.Element("LatestDeliveryDate").Value.Substring(0, 18).Replace("T", " ")).AddHours(8); if (model.OrderDate != null && model.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OrderDate = DateTime.Now; } if (model.PayDate != null && model.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { model.PayDate = DateTime.Now; } if (model.OutOrderDate != null && model.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OutOrderDate = DateTime.Now.AddDays(7); } model.PostInfo = item.Element("ShipServiceLevel").Value; model.ListModel = new List(); str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&MWSAuthToken=" + MWSAuthToken; str += "&Action=ListOrderItems"; str += "&AmazonOrderId=" + model.PlatOrderCode; str += "&SignatureVersion=2"; str += "&Version=2013-09-01"; str += "&Command=/Orders/2013-09-01"; data = Encoding.UTF8.GetBytes(str); ErrorMessage = ""; string XmlContent2 = CustomIO.HttpRequest2(url, "Post", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetNext", "", ErrorMessage); continue; } AMResult model3 = JsonConvert.Deserialize(XmlContent2); if (model3.HasError == true) { ErrorMessage = model3.Message; ErrorFollow.TraceWrite("GetNext", "", ErrorMessage); continue; } string xml2 = model3.ResultObject.Replace("xmlns=\"https://mws.amazonservices.com/Orders/2013-09-01\"", ""); XElement xt2 = XElement.Parse(xml2); XElement xel2 = xt2.Element("ListOrderItemsResult").Element("OrderItems"); model.escrowFee = 0; foreach (XElement item2 in xel2.Elements("OrderItem")) { OrderDetailModel gmodel = new OrderDetailModel(); gmodel.productImgUrl = item2.Element("ASIN").Value;//订单编号 if (item2.Element("ItemTax") != null && item2.Element("ItemTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ItemTax").Element("Amount").Value); if (item2.Element("ShippingTax") != null && item2.Element("ShippingTax").Element("Amount") != null) model.escrowFee += Convert.ToDecimal(item2.Element("ShippingTax").Element("Amount").Value); gmodel.GoodsNum = Convert.ToInt32(item2.Element("QuantityOrdered").Value); if (item2.Element("ItemPrice") != null && item2.Element("ItemPrice").Element("Amount") != null) { gmodel.GoodsPrice = Convert.ToDecimal(item2.Element("ItemPrice").Element("Amount").Value); gmodel.MoneyCode = item2.Element("ItemPrice").Element("CurrencyCode").Value; } gmodel.GoodsName = item2.Element("Title").Value; gmodel.GoodsSKU = item2.Element("SellerSKU").Value; gmodel.PostInfo = model.PostInfo; gmodel.OrderItemId = item2.Element("OrderItemId").Value; model.ListModel.Add(gmodel); } // model.TotalPrice = model.TotalPrice - model.escrowFee; ListModel.Add(model); } if (nexttoken != null && nexttoken != "") { NextToken2 = nexttoken; } return ListModel; } catch (Exception ex) { ErrorFollow.TraceWrite("GetNext", ex.StackTrace, ex.Message); NextToken2 = ""; return ListModel; } } } public class AMRepotResult { public string ReportId { get; set; } } public class AMRepotOrders { public string order_id { get; set; } public string order_date { get; set; } public string return_request_date { get; set; } public string return_request_status { get; set; } public List return_details { get; set; } public List label_details { get; set; } } public class AMRepotOrdersDetail { public string item_name { get; set; } public string asin { get; set; } public string return_reason_code { get; set; } public string merchant_sku { get; set; } public Int32? return_quantity { get; set; } public string resolution { get; set; } public decimal? refund_amount { get; set; } public string in_policy { get; set; } } public class AMRepotLabelsDetail { public string tracking_id { get; set; } public string return_carrier { get; set; } public decimal? label_cost { get; set; } } public class AMResult { public Boolean? HasError { get; set; } public string Message { get; set; } public string ResultObject { get; set; } } public class AMOrder { public string OrderStatus { get; set; } public string AmazonOrderId { get; set; } public string PurchaseDate { get; set; } public AMAddr ShippingAddress { get; set; } } public class AMAddr { public string Name { get; set; } public string AddressLine1 { get; set; } } public class AMGoodsPM { public Int32? ShopId { get; set; } public Int32? GoodsId { get; set; } public string ASIN { get; set; } public Int32? id { get; set; } public int PM1 { get; set; } public int PM2 { get; set; } } }