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 System.Xml; using ApiNew; using System.IO; using TradeManage.SysManage; namespace TradeManageNew { public class Amazon_SPApi { 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; } #region 读取订单列表 public List GetOrders(DateTime? StartDate,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://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; 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\":\"" + StartDate.Value.ToString("yyyy-MM-dd") + "T00: 00:00.000Z\",\"OrderStatuses\":\"Unshipped,PartiallyShipped\",\"FulfillmentChannels\":\"" + FulfillmentChannel + "\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; if (FulfillmentChannel == "AFN") body = "{\"CreatedAfter\":\"" + StartDate.Value.ToString("yyyy-MM-dd") + "T00: 00:00.000Z\",\"OrderStatuses\":\"Shipped\",\"FulfillmentChannels\":\"" + FulfillmentChannel + "\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; //if (NextToken != "") //{ // body = "{\"NextToken\":\"" + NextToken + "\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; //} 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(); AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true|| re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } AmazonResultObject model = JsonConvert.Deserialize(re.ResultObject); if (model != null && model.payload !=null&& model.payload.Orders != null) { foreach (var item in model.payload.Orders) { if (item.OrderStatus != null && item.OrderStatus == "Canceled") continue; if (item.OrderTotal == null || item.OrderTotal.Amount == null || item.OrderTotal.Amount == "") continue; OrderModel ordermd = new OrderModel(); ordermd.OrderCode = item.AmazonOrderId;//订单编号 if (ordermd.OrderCode == "112-6514054-6349010") { string a = ""; } ordermd.PlatOrderCode = item.AmazonOrderId;//OrderLineItemID if (ordermd.PlatOrderCode == null || ordermd.PlatOrderCode == "") continue; if (olist != null) { var amd = olist.Find(n => n.OrderCode == ordermd.PlatOrderCode); if (amd != null) continue; } ordermd.TotalPrice = Convert.ToDecimal(item.OrderTotal.Amount); ordermd.MoneyCode = "USD";//币种 if (item.PurchaseDate != null) ordermd.OrderDate = Convert.ToDateTime(item.PurchaseDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.FulfillmentChannel != null) ordermd.BuyerID = item.FulfillmentChannel; else ordermd.BuyerID = "MFN"; if (item.BuyerInfo != null && item.BuyerInfo.BuyerEmail != null) ordermd.BuyerMail = item.BuyerInfo.BuyerEmail; System.Threading.Thread.Sleep(500); var addrmd = GetOrdersAdress(ordermd.OrderCode); if (addrmd == null) { System.Threading.Thread.Sleep(1000); addrmd = GetOrdersAdress(ordermd.OrderCode); } if (addrmd != null) { ordermd.BuyerName = addrmd.ShippingAddress.Name; ordermd.BuyerCountry = addrmd.ShippingAddress.CountryCode; if(string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine1)==false) ordermd.BuyerAddr = addrmd.ShippingAddress.AddressLine1; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine2) == false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.AddressLine2; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine3) == false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.AddressLine3; if (string.IsNullOrEmpty(addrmd.ShippingAddress.County)== false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.County; if (!string.IsNullOrEmpty(addrmd.ShippingAddress.City)) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.City; if (string.IsNullOrEmpty(addrmd.ShippingAddress.Phone)== false) ordermd.BuyerPhone=addrmd.ShippingAddress.Phone; if (string.IsNullOrEmpty(addrmd.ShippingAddress.StateOrRegion) == false) ordermd.BuyerProvince = addrmd.ShippingAddress.StateOrRegion; if (string.IsNullOrEmpty(addrmd.ShippingAddress.City)== false) ordermd.BuyerCity = addrmd.ShippingAddress.City; if (string.IsNullOrEmpty(addrmd.ShippingAddress.District) == false) ordermd.BuyerArea = addrmd.ShippingAddress.District; ordermd.BuyerMobile = ""; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressType)== false) ordermd.BuyerFax = addrmd.ShippingAddress.AddressType; if (string.IsNullOrEmpty(addrmd.ShippingAddress.PostalCode)== false) ordermd.BuyerZip = addrmd.ShippingAddress.PostalCode; } if (ordermd.BuyerAddr == null || ordermd.BuyerAddr=="") { continue; } ordermd.OrderRemark = ""; ordermd.LeaveWord = ""; if (item.LastUpdateDate != null) ordermd.PayDate = Convert.ToDateTime(item.LastUpdateDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.LatestDeliveryDate != null) ordermd.OutOrderDate = Convert.ToDateTime(item.LatestDeliveryDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (ordermd.OrderDate != null && ordermd.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.OrderDate = DateTime.Now; } if (ordermd.PayDate != null && ordermd.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.PayDate = DateTime.Now; } if (ordermd.OutOrderDate != null && ordermd.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.OutOrderDate = DateTime.Now.AddDays(7); } ordermd.PostInfo = item.ShipServiceLevel; ordermd.ListModel = new List(); var glist = GetOrdersItem(ordermd.OrderCode); ordermd.escrowFee = 0; if (glist != null) { foreach (var item2 in glist.OrderItems) { OrderDetailModel gmodel = new OrderDetailModel(); gmodel.productImgUrl = item2.ASIN;//订单编号 if (item2.ItemTax != null && item2.ItemTax.Amount != null) ordermd.escrowFee += Convert.ToDecimal(item2.ItemTax.Amount); if (item2.ShippingTax != null && item2.ShippingTax.Amount != null) ordermd.escrowFee += Convert.ToDecimal(item2.ShippingTax.Amount); gmodel.GoodsNum = Convert.ToInt32(item2.QuantityOrdered); if (item2.ItemPrice != null && item2.ItemPrice.Amount != null) { gmodel.GoodsPrice = Convert.ToDecimal(item2.ItemPrice.Amount); gmodel.MoneyCode = item2.ItemPrice.CurrencyCode; } gmodel.GoodsName = item2.Title; gmodel.GoodsSKU = item2.SellerSKU; gmodel.PostInfo = ordermd.PostInfo; gmodel.OrderItemId = item2.OrderItemId; ordermd.ListModel.Add(gmodel); } // model.TotalPrice = model.TotalPrice - model.escrowFee; } ListModel.Add(ordermd); } } bool IsNext = false; string nexttoken = ""; if (model!=null&& model.payload.NextToken!=null&& model.payload.NextToken != "") { IsNext = true; nexttoken = model.payload.NextToken; } while (IsNext) { System.Threading.Thread.Sleep(3000); string nexttoken2 = ""; var list2 = GetOrdersNext(nexttoken, olist, out nexttoken2); if (list2 != null) { foreach (var md in list2) { ListModel.Add(md); } } if (nexttoken2==null||nexttoken2 == "") { IsNext = false; } else { nexttoken = nexttoken2; } } return ListModel; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return ListModel; } } public List GetOrdersNext(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://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; 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 = "{\"NextToken\":\"" + nexttoken + "\",\"MarketplaceIds\":\"" + MarketplaceId + "\"}"; //if (NextToken != "") //{ // body = "{\"NextToken\":\"" + NextToken + "\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; //} 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 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("GetOrders", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage); return null; } AmazonResultObject model = JsonConvert.Deserialize(re.ResultObject); if (model != null && model.payload != null && model.payload.Orders != null) { foreach (var item in model.payload.Orders) { if (item.OrderStatus != null && item.OrderStatus == "Canceled") continue; if (item.OrderTotal == null || item.OrderTotal.Amount == null || item.OrderTotal.Amount == "") continue; OrderModel ordermd = new OrderModel(); ordermd.OrderCode = item.AmazonOrderId;//订单编号 if (ordermd.OrderCode == "112-8452824-5762658"|| ordermd.OrderCode == "113-0294203-4944225") { string a = ""; } ordermd.PlatOrderCode = item.AmazonOrderId;//OrderLineItemID if (ordermd.PlatOrderCode == null || ordermd.PlatOrderCode == "") continue; if (olist != null) { var amd = olist.Find(n => n.OrderCode == ordermd.PlatOrderCode); if (amd != null) continue; } ordermd.TotalPrice = Convert.ToDecimal(item.OrderTotal.Amount); ordermd.MoneyCode = "USD";//币种 if (item.PurchaseDate != null) ordermd.OrderDate = Convert.ToDateTime(item.PurchaseDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.FulfillmentChannel != null) ordermd.BuyerID = item.FulfillmentChannel; else ordermd.BuyerID = "MFN"; if (item.BuyerInfo != null && item.BuyerInfo.BuyerEmail != null) ordermd.BuyerMail = item.BuyerInfo.BuyerEmail; System.Threading.Thread.Sleep(500); var addrmd = GetOrdersAdress(ordermd.OrderCode); if (addrmd == null) { System.Threading.Thread.Sleep(1000); addrmd = GetOrdersAdress(ordermd.OrderCode); } if (addrmd != null) { ordermd.BuyerName = addrmd.ShippingAddress.Name; ordermd.BuyerCountry = addrmd.ShippingAddress.CountryCode; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine1) == false) ordermd.BuyerAddr = addrmd.ShippingAddress.AddressLine1; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine2) == false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.AddressLine2; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressLine3) == false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.AddressLine3; if (string.IsNullOrEmpty(addrmd.ShippingAddress.County) == false) ordermd.BuyerAddr += " " + addrmd.ShippingAddress.County; if (string.IsNullOrEmpty(addrmd.ShippingAddress.Phone) == false) ordermd.BuyerPhone = addrmd.ShippingAddress.Phone; if (string.IsNullOrEmpty(addrmd.ShippingAddress.StateOrRegion) == false) ordermd.BuyerProvince = addrmd.ShippingAddress.StateOrRegion; if (string.IsNullOrEmpty(addrmd.ShippingAddress.City) == false) ordermd.BuyerCity = addrmd.ShippingAddress.City; if (string.IsNullOrEmpty(addrmd.ShippingAddress.District) == false) ordermd.BuyerArea = addrmd.ShippingAddress.District; ordermd.BuyerMobile = ""; if (string.IsNullOrEmpty(addrmd.ShippingAddress.AddressType) == false) ordermd.BuyerFax = addrmd.ShippingAddress.AddressType; if (string.IsNullOrEmpty(addrmd.ShippingAddress.PostalCode) == false) ordermd.BuyerZip = addrmd.ShippingAddress.PostalCode; } if (ordermd.BuyerAddr == null || ordermd.BuyerAddr == "") { continue; } ordermd.OrderRemark = ""; ordermd.LeaveWord = ""; if (item.LastUpdateDate != null) ordermd.PayDate = Convert.ToDateTime(item.LastUpdateDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (item.LatestDeliveryDate != null) ordermd.OutOrderDate = Convert.ToDateTime(item.LatestDeliveryDate.Substring(0, 18).Replace("T", " ")).AddHours(8); if (ordermd.OrderDate != null && ordermd.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.OrderDate = DateTime.Now; } if (ordermd.PayDate != null && ordermd.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.PayDate = DateTime.Now; } if (ordermd.OutOrderDate != null && ordermd.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { ordermd.OutOrderDate = DateTime.Now.AddDays(7); } ordermd.PostInfo = item.ShipServiceLevel; ordermd.ListModel = new List(); var glist = GetOrdersItem(ordermd.OrderCode); ordermd.escrowFee = 0; if (glist != null) { foreach (var item2 in glist.OrderItems) { OrderDetailModel gmodel = new OrderDetailModel(); gmodel.productImgUrl = item2.ASIN;//订单编号 if (item2.ItemTax != null && item2.ItemTax.Amount != null) ordermd.escrowFee += Convert.ToDecimal(item2.ItemTax.Amount); if (item2.ShippingTax != null && item2.ShippingTax.Amount != null) ordermd.escrowFee += Convert.ToDecimal(item2.ShippingTax.Amount); gmodel.GoodsNum = Convert.ToInt32(item2.QuantityOrdered); if (item2.ItemPrice != null && item2.ItemPrice.Amount != null) { gmodel.GoodsPrice = Convert.ToDecimal(item2.ItemPrice.Amount); gmodel.MoneyCode = item2.ItemPrice.CurrencyCode; } gmodel.GoodsName = item2.Title; gmodel.GoodsSKU = item2.SellerSKU; gmodel.PostInfo = ordermd.PostInfo; gmodel.OrderItemId = item2.OrderItemId; ordermd.ListModel.Add(gmodel); } // model.TotalPrice = model.TotalPrice - model.escrowFee; } ListModel.Add(ordermd); } } if (model != null && model.payload.NextToken != "") { nexttoken2 = model.payload.NextToken; } return ListModel; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); nexttoken2 = ""; return null; } } #endregion #region 读取订单详情 public OrderModel GetOrdersInfo(string orderid, out string 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; } #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion #endregion try { 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\":\"Unshipped,PartiallyShipped\",\"FulfillmentChannels\":\"MFN\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; // byte[] bytes = Encoding.Default.GetBytes(body); // string bb = Convert.ToBase64String(bytes); // str += "&BodyContent=" + bb; str += "&Command=/orders/v0/orders/" + orderid; 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(); return null; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } } #endregion #region 读取订单地址 public AdressPayload GetOrdersAdress(string orderid) { string ServiceURL = ""; string ErrorMessage = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion try { 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\":\"Unshipped,PartiallyShipped\",\"FulfillmentChannels\":\"MFN\",\"MarketplaceIds\":\"" + MarketplaceId + "\",\"MaxResultsPerPage\":50}"; // byte[] bytes = Encoding.Default.GetBytes(body); // string bb = Convert.ToBase64String(bytes); // str += "&BodyContent=" + bb; str += "&Command=/orders/v0/orders/"+orderid+"/address"; 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(); AmazonAdressRootResult model = JsonConvert.Deserialize(XmlContent); if (model.HasError == true) { ErrorMessage = model.Message; ErrorFollow.TraceWrite("GetOrdersAdress", "", ErrorMessage); return null; } AdressRoot model2 = JsonConvert.Deserialize(model.ResultObject); if (model2.payload!=null&& model2.payload!=null) return model2.payload; return null; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrdersAdress", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return null; } } #endregion #region 读取订单sku public OrderItemPayload GetOrdersItem(string orderid) { string ServiceURL = ""; #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; break; case "中国": ServiceURL = "https://mws.amazonservices.com.cn"; break; } #endregion try { string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; str += "&Command=/orders/v0/orders/"+ orderid + "/orderItems"; str += "&HttpMethod=Get"; 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("GetOrdersItem", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AmazonOrderItemResult model = JsonConvert.Deserialize(XmlContent); if (model.HasError == true) { ErrorMessage = model.Message; ErrorFollow.TraceWrite("GetOrdersItem", "", ErrorMessage); return null; } OrderItemRoot model2 = JsonConvert.Deserialize(model.ResultObject); if (model2 != null && model2.payload != null) { return model2.payload; } return null; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrdersItem", ex.StackTrace, ex.Message); // ErrorMessage = ex.Message; return null; } } #endregion #region 读取sku排名 public List GetProuctPM(List list, out string 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 try { string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string Asins = ""; foreach (var amd in list) { Asins += amd.ASIN + ","; } Asins = Asins.TrimEnd(','); string body = "{\"Asins\":\""+ Asins + "\",\"MarketplaceId\":\"" + MarketplaceId + "\",\"ItemType\":\"Asin\"}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/products/pricing/v0/competitivePrice"; 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("GetProuctPM", "", ErrorMessage); return null; } AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetProuctPM", "", ErrorMessage); return null; } GoodsPMRoot model = JsonConvert.Deserialize(re.ResultObject); if (model != null&& model.payload!=null) { foreach (var pmd in model.payload) { var gmd = list.Find(n => n.ASIN == pmd.ASIN); if (gmd!=null&&pmd.Product != null && pmd.Product.SalesRankings!=null) { int j= 0; foreach(var ppmd in pmd.Product.SalesRankings) { j++; if (ppmd.Rank.ToString() != "") { int rk = Convert.ToInt32(ppmd.Rank); if (j == 1) gmd.PM1 = rk; else if (gmd.PM2 == 0 || rk < gmd.PM2) gmd.PM2 = rk; string ProductCategoryId = ppmd.ProductCategoryId; } } } } } return list; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return list; } } #endregion #region 新接口获取亚马逊商品大小类排名,可与亚马逊网站上显示的排名一致 public List GetProductPM_New(List list,out string 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 try { string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string Asins = ""; foreach (var amd in list) { Asins += amd.ASIN + ","; } Asins = Asins.TrimEnd(','); string body = "{\"marketplaceIds\":\"" + MarketplaceId + "\",\"identifiers\":\"" + Asins + "\",\"identifiersType\":\"ASIN\",\"includedData\":\"salesRanks\"}"; byte[] bytes = Encoding.Default.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/catalog/2022-04-01/items"; 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("GetProuctPM", "", ErrorMessage); return null; } AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetProuctPM", "", ErrorMessage); return null; } SyncAmazonCatalogModel model = JsonConvert.Deserialize(re.ResultObject); if (model != null && model.items != null) { foreach(var _list in list) { var item = model.items.Where(r => r.asin == _list.ASIN).FirstOrDefault(); if(item!=null && item.salesRanks != null) { var samllRanks = item.salesRanks[0].classificationRanks; _list.PM2 = samllRanks != null && samllRanks.Count > 0 ? samllRanks[0].rank.Value : 0; var bigRanks = item.salesRanks[0].displayGroupRanks; _list.PM1 = bigRanks != null && bigRanks.Count > 0 ? bigRanks[0].rank.Value : 0; } } } return list; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return list; } } #endregion #region 填单 public bool createFeedDocument(List list, out string 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 try { JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"contentType\":\"text/xml;charset=UTF-8\"}"; byte[] bytes = Encoding.UTF8.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/feeds/2021-06-30/documents"; 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("createFeedDocument", "", ErrorMessage); return false; } AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("createFeedDocument", "", ErrorMessage); return false; } feedDocumentRoot model = JsonConvert.Deserialize(re.ResultObject); createPost(list, model.url, out ErrorMessage); if (ErrorMessage == "") { createFeedPost(model.feedDocumentId,out ErrorMessage); } if (ErrorMessage != "") { return false; } return true; } catch (Exception ex) { ErrorFollow.TraceWrite("createFeedDocument", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return false; } } public bool createPost(List list,string url, out string 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 try { string FileContent = ""; var now = ToUTCDatetime(DateTime.Now); //
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()); JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); var data = Encoding.UTF8.GetBytes(xml.ToString()); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11; List ListHeader = new List(); ListHeader.Add("Content-Type:text/xml;charset=UTF-8"); // head.Add("Content-Type:text/xml;charset=UTF-8"); string XmlContent = HttpRequest222(url, "Put", "text/xml;charset=UTF-8", null, HttpVersion.Version11, data, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetProuct", "", ErrorMessage); return false; } return true; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return false; } } public bool createFeedPost(string inputFeedDocumentId, out string 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 try { JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"feedType\":\"POST_ORDER_FULFILLMENT_DATA\",\"marketplaceIds\":[\"" + MarketplaceId + "\"],\"inputFeedDocumentId\":\"" + inputFeedDocumentId + "\"}"; byte[] bytes = Encoding.UTF8.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/feeds/2021-06-30/feeds"; 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("createFeed", "", ErrorMessage); return false; } AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("createFeed", "", ErrorMessage); return false; } return true; } catch (Exception ex) { ErrorFollow.TraceWrite("createFeedDocument", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return false; } } #endregion #region createFeedDocument public bool createFeed(string fid, out string 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 try { JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"feedType\":\"POST_ORDER_FULFILLMENT_DATA\",\"marketplaceIds\":[\"ATVPDKIKX0DER\"],\"inputFeedDocumentId\":\"" + fid + "\"}"; byte[] bytes = Encoding.UTF8.GetBytes(body); string bb = Convert.ToBase64String(bytes); str += "&BodyContent=" + bb; str += "&Command=/feeds/2021-06-30/feeds"; str += "&HttpMethod=Post"; // string url = "https://tortuga-prod-na.s3-external-1.amazonaws.com/%2FNinetyDays/amzn1.tortuga.3.69ffbc5e-f431-448b-a28e-1d516422434a.T2YYS8DSUOROZJ?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220403T114414Z&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Expires=300&X-Amz-Credential=AKIA5U6MO6RAILUODKJI%2F20220403%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=7f78cb20629b8d2d557e770ca5b924adf30c70c50cee56679d3a8dd92532351f"; 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("createFeedDocument", "", ErrorMessage); return false; } return true; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return false; } } public bool GetFeed(string fid, out string 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 try { JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); string url = "http://api.sumool.com/AmazonProxy/NewSendRequest"; string str = "EndPoint=" + ServiceURL; str += "&SumoolToKen=" + SumoolToKen; str += "&SellerId=" + SellerId; string body = "{\"feedType\":\"POST_ORDER_FULFILLMENT_DATA\",\"marketplaceIds\":[\"ATVPDKIKX0DER\"],\"inputFeedDocumentId\":\"" + fid + "\"}"; byte[] bytes = Encoding.UTF8.GetBytes(body); string bb = Convert.ToBase64String(bytes); // str += "&BodyContent=" + bb; str += "&Command=/feeds/2021-06-30/feeds/"+fid; str += "&HttpMethod=Get"; // string url = "https://tortuga-prod-na.s3-external-1.amazonaws.com/%2FNinetyDays/amzn1.tortuga.3.69ffbc5e-f431-448b-a28e-1d516422434a.T2YYS8DSUOROZJ?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220403T114414Z&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Expires=300&X-Amz-Credential=AKIA5U6MO6RAILUODKJI%2F20220403%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=7f78cb20629b8d2d557e770ca5b924adf30c70c50cee56679d3a8dd92532351f"; 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("createFeedDocument", "", ErrorMessage); return false; } return true; } catch (Exception ex) { ErrorFollow.TraceWrite("GetOrders", ex.StackTrace, ex.Message); ErrorMessage = ex.Message; return false; } } #endregion #region Http请求2 public static string HttpRequest222(string url, string Method, string ContentType, List ListHeader, Version ver, byte[] bytes, out string ErrorMessage) { try { ErrorMessage = ""; if (string.IsNullOrEmpty(ContentType) == true) ContentType = "application/x-www-form-urlencoded"; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); myRequest.Method = Method; //GET,POST myRequest.ContentType = ContentType; myRequest.KeepAlive = true; //myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; //myRequest.Headers.Add("Content-Type:text/xml;charset=UTF-8"); // myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存 // myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存 myRequest.Timeout = 3 * 60 * 1000; if (ver != null) myRequest.ProtocolVersion = ver; if (ListHeader != null) { foreach (var item in ListHeader) { myRequest.Headers.Add(item); } } if (bytes != null && bytes.Length > 0) { //myRequest.GetRequestStream().Write(bytes, 0, bytes.Length); Stream stream = myRequest.GetRequestStream(); stream.Write(bytes, 0, bytes.Length); stream.Close(); } else myRequest.ContentLength = 0; //获得接口返回值 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); Stream myResponseStream = myResponse.GetResponseStream(); StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); string content = reader.ReadToEnd(); reader.Close(); myResponseStream.Close(); myRequest.Abort(); myResponse.Close(); return content; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; } return ""; } #endregion 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 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; } #region 退货信息 public string GetGoodsReturnRequest(DateTime sdt, DateTime edt) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; 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\",\"dataStartTime\":\""+ sdt.ToString("yyyy-MM-dd") + "T00:00:00.000Z\",\"marketplaceIds\":[\"ATVPDKIKX0DER\"]}"; 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("GetGoodsReturnRequest", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage); return null; } RetuenReport model = JsonConvert.Deserialize(re.ResultObject); if (model != null) { return model.reportId; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return null; } } public string GetGoodsReturn(string reportId) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; 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\",\"dataStartTime\":\"" + sdt.ToString("yyyy - MM - dd") + "\",\"dataEndTime\":\"" + edt.ToString("yyyy - MM - dd") + "\",\"marketplaceIds\":[\"ATVPDKIKX0DER\"],}"; // 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("GetGoodsReturn", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage); return null; } RetuenReportDocumentId model = JsonConvert.Deserialize(re.ResultObject); if (model != null) { return model.reportDocumentId; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return ""; } } public string Getdocuments(string docid) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); #region 设置市场所在地借口地址 switch (country) { case "美国": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "加拿大": ServiceURL = "https://sellingpartnerapi-na.amazon.com"; break; case "欧洲": ServiceURL = "https://sellingpartnerapi-eu.amazon.com"; break; case "日本": ServiceURL = "https://sellingpartnerapi-fe.amazon.com"; 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\",\"dataStartTime\":\"" + sdt.ToString("yyyy - MM - dd") + "\",\"dataEndTime\":\"" + edt.ToString("yyyy - MM - dd") + "\",\"marketplaceIds\":[\"ATVPDKIKX0DER\"],}"; // byte[] bytes = Encoding.Default.GetBytes(body); // string bb = Convert.ToBase64String(bytes); // str += "&BodyContent=" + bb; str += "&Command=/reports/2021-06-30/documents/" + docid; 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("GetGoodsReturn", "", ErrorMessage); return null; } JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); AmazonResult re = JsonConvert.Deserialize(XmlContent); if (re.HasError == true || re.ResultObject == null || re.ResultObject == "") { ErrorMessage = re.Message; ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage); return null; } RetuenReportDocumenturl model = JsonConvert.Deserialize(re.ResultObject); if (model != null) { return model.url; } return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); return ""; } } public List GetGoodsReturnOrders(string url) { try { string ErrorMessage = ""; string ServiceURL = ""; List rlist = new List(); // var data = null; string XmlContent = CustomIO.HttpRequest2(url, "Get", "application/x-www-form-urlencoded; charset=UTF-8", null, HttpVersion.Version10, null, out ErrorMessage); if (ErrorMessage != "") { ErrorFollow.TraceWrite("GetGoodsReturnOrders", "", ErrorMessage); return null; } string xml2 = XmlContent.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; 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; } } #endregion } //如果好用,请收藏地址,帮忙分享。 public class BuyerInfo { /// /// /// public string BuyerEmail { get; set; } } public class AutomatedShippingSettings { /// /// /// public Boolean? HasAutomatedShippingSettings { get; set; } } public class DefaultShipFromLocationAddress { /// /// /// public string AddressLine2 { get; set; } /// /// /// public string StateOrRegion { get; set; } /// /// /// public string AddressLine1 { get; set; } /// /// /// public string Phone { get; set; } /// /// /// public string PostalCode { get; set; } /// /// /// public string City { get; set; } /// /// /// public string CountryCode { get; set; } /// /// /// public string Name { get; set; } } public class AMShippingAddress { /// /// /// public string StateOrRegion { get; set; } /// /// /// public string PostalCode { get; set; } /// /// /// public string City { get; set; } /// /// /// public string CountryCode { get; set; } } public class OrderTotal { /// /// /// public string CurrencyCode { get; set; } /// /// /// public string Amount { get; set; } } public class OrdersItem { /// /// /// public BuyerInfo BuyerInfo { get; set; } /// /// /// public string AmazonOrderId { get; set; } /// /// /// public string EarliestDeliveryDate { get; set; } /// /// /// public string EarliestShipDate { get; set; } /// /// /// public string SalesChannel { get; set; } /// /// /// public AutomatedShippingSettings AutomatedShippingSettings { get; set; } /// /// /// public string OrderStatus { get; set; } /// /// /// public int NumberOfItemsShipped { get; set; } /// /// /// public string OrderType { get; set; } /// /// /// public Boolean? IsPremiumOrder { get; set; } /// /// /// public Boolean? IsPrime { get; set; } /// /// /// public string FulfillmentChannel { get; set; } /// /// /// public Int32? NumberOfItemsUnshipped { get; set; } /// /// /// public Boolean? IsReplacementOrder { get; set; } /// /// /// public Boolean? IsSoldByAB { get; set; } /// /// /// public string LatestShipDate { get; set; } /// /// /// public string ShipServiceLevel { get; set; } /// /// /// public DefaultShipFromLocationAddress DefaultShipFromLocationAddress { get; set; } /// /// /// public Boolean? IsISPU { get; set; } /// /// /// public string MarketplaceId { get; set; } /// /// /// public string LatestDeliveryDate { get; set; } /// /// /// public string PurchaseDate { get; set; } /// /// /// public AMShippingAddress ShippingAddress { get; set; } /// /// /// public string PaymentMethod { get; set; } /// /// /// public Boolean? IsBusinessOrder { get; set; } /// /// /// public OrderTotal OrderTotal { get; set; } /// /// /// public List PaymentMethodDetails { get; set; } /// /// /// public Boolean? IsGlobalExpressEnabled { get; set; } /// /// /// public string LastUpdateDate { get; set; } /// /// /// public string ShipmentServiceLevelCategory { get; set; } } public class Payload { /// /// /// public List Orders { get; set; } /// /// /// public string CreatedBefore { get; set; } public string NextToken { get; set; } } public class AmazonResultObject { /// /// /// public Payload payload { get; set; } } public class AmazonResult { /// /// /// public Boolean? HasError { get; set; } public string Message { get; set; } public string ResultObject { get; set; } } //如果好用,请收藏地址,帮忙分享。 public class TaxCollection { /// /// /// public string Model { get; set; } /// /// /// public string ResponsibleParty { get; set; } } public class ProductInfo { /// /// /// public string NumberOfItems { get; set; } } public class ItemTax { /// /// /// public string CurrencyCode { get; set; } /// /// /// public string Amount { get; set; } } public class ItemPrice { /// /// /// public string CurrencyCode { get; set; } /// /// /// public string Amount { get; set; } } public class PromotionDiscountTax { /// /// /// public string CurrencyCode { get; set; } /// /// /// public string Amount { get; set; } } public class PromotionDiscount { /// /// /// public string CurrencyCode { get; set; } /// /// /// public string Amount { get; set; } } public class OrderItemsItem { /// /// /// public TaxCollection TaxCollection { get; set; } /// /// /// public ProductInfo ProductInfo { get; set; } /// /// /// public BuyerInfo BuyerInfo { get; set; } /// /// /// public ItemTax ItemTax { get; set; } public ItemTax ShippingTax { get; set; } /// /// /// public int QuantityShipped { get; set; } /// /// /// public ItemPrice ItemPrice { get; set; } /// /// /// public string ASIN { get; set; } /// /// /// public string SellerSKU { get; set; } /// /// /// public string Title { get; set; } /// /// /// public string IsGift { get; set; } /// /// /// public string ConditionSubtypeId { get; set; } /// /// /// public string IsTransparency { get; set; } /// /// /// public int QuantityOrdered { get; set; } /// /// /// public PromotionDiscountTax PromotionDiscountTax { get; set; } /// /// /// public string ConditionId { get; set; } /// /// /// public PromotionDiscount PromotionDiscount { get; set; } /// /// /// public string OrderItemId { get; set; } } public class OrderItemPayload { /// /// /// public List OrderItems { get; set; } /// /// /// public string AmazonOrderId { get; set; } } public class AmazonOrderItemResult { /// /// /// public Boolean? HasError { get; set; } public string Message { get; set; } public string ResultObject { get; set; } } public class OrderItemRoot { /// /// /// public OrderItemPayload payload { get; set; } } //如果好用,请收藏地址,帮忙分享。 public class OrderShippingAddress { /// /// /// public string StateOrRegion { get; set; } /// /// /// public string AddressLine1 { get; set; } public string AddressLine2 { get; set; } public string AddressLine3 { get; set; } public string County { get; set; } /// /// /// public string Phone { get; set; } /// /// /// public string PostalCode { get; set; } /// /// /// public string City { get; set; } public string District { get; set; } /// /// /// public string CountryCode { get; set; } /// /// /// public string AddressType { get; set; } /// /// /// public string Name { get; set; } } public class AdressPayload { /// /// /// public string AmazonOrderId { get; set; } /// /// /// public OrderShippingAddress ShippingAddress { get; set; } } public class AdressRoot { /// /// /// public AdressPayload payload { get; set; } } public class AmazonAdressRootResult { /// /// /// public Boolean? HasError { get; set; } public string Message { get; set; } public string ResultObject { get; set; } } //如果好用,请收藏地址,帮忙分享。 public class LandedPrice { /// /// /// public string CurrencyCode { get; set; } /// /// /// public double Amount { get; set; } } public class ListingPrice { /// /// /// public string CurrencyCode { get; set; } /// /// /// public double Amount { get; set; } } public class Shipping { /// /// /// public string CurrencyCode { get; set; } /// /// /// public int Amount { get; set; } } public class Price { /// /// /// public LandedPrice LandedPrice { get; set; } /// /// /// public ListingPrice ListingPrice { get; set; } /// /// /// public Shipping Shipping { get; set; } } public class CompetitivePricesItem { /// /// /// public string belongsToRequester { get; set; } /// /// /// public string condition { get; set; } /// /// /// public string subcondition { get; set; } /// /// /// public Price Price { get; set; } /// /// /// public string CompetitivePriceId { get; set; } } public class NumberOfOfferListingsItem { /// /// /// public string condition { get; set; } /// /// /// public int Count { get; set; } } public class CompetitivePricing { /// /// /// public List CompetitivePrices { get; set; } /// /// /// public List NumberOfOfferListings { get; set; } } public class MarketplaceASIN { /// /// /// public string MarketplaceId { get; set; } /// /// /// public string ASIN { get; set; } } public class Identifiers { /// /// /// public MarketplaceASIN MarketplaceASIN { get; set; } } public class SalesRankingsItem { /// /// /// public string ProductCategoryId { get; set; } /// /// /// public int Rank { get; set; } } public class Product { /// /// /// public CompetitivePricing CompetitivePricing { get; set; } /// /// /// public Identifiers Identifiers { get; set; } /// /// /// public List SalesRankings { get; set; } } public class PayloadItem { /// /// /// public string ASIN { get; set; } /// /// /// public Product Product { get; set; } /// /// /// public string status { get; set; } } public class GoodsPMRoot { /// /// /// public List payload { get; set; } } public class feedDocumentRoot { /// /// /// public string feedDocumentId { get; set; } public string url { get; set; } } public class RetuenReport { /// /// /// public string reportId { get; set; } } public class RetuenReportDocumentId { /// /// /// public string reportDocumentId { get; set; } } public class RetuenReportDocumenturl { /// /// /// public string url { get; set; } } public class SyncAmazonCatalogModel { public int numberOfResults { get; set; } public List items { get; set; } } public class SyncAmazonCatalog_Items { public string asin { get; set; } public List salesRanks { get; set; } } public class SyncAmazonCatalog_Items_salesRanks { public string marketplaceId { get; set; } public List classificationRanks { get; set; } public List displayGroupRanks { get; set; } } /// /// 小类排名 /// public class SyncAmazonCatalog_Items_salesRanks_classificationRanks { public string classificationId { get; set; } public string title { get; set; } public string link { get; set; } public int? rank { get; set; } } /// /// 大类排名 /// public class SyncAmazonCatalog_Items_salesRanks_displayGroupRanks { public string websiteDisplayGroup { get; set; } public string title { get; set; } public string link { get; set; } public int? rank { get; set; } } }