You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2578 lines
97 KiB
C#
2578 lines
97 KiB
C#
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<OrderModel> GetOrders(DateTime? StartDate,string FulfillmentChannel, List<Alibaba_OrderCode> olist, out string ErrorMessage)
|
|
{
|
|
if (olist == null)
|
|
olist = new List<Alibaba_OrderCode>();
|
|
List<OrderModel> ListModel = new List<OrderModel>();
|
|
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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true|| re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
AmazonResultObject model = JsonConvert.Deserialize<AmazonResultObject>(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<OrderDetailModel>();
|
|
|
|
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<OrderModel> GetOrdersNext(string nexttoken, List<Alibaba_OrderCode> olist, out string nexttoken2)
|
|
{
|
|
if (olist == null)
|
|
olist = new List<Alibaba_OrderCode>();
|
|
List<OrderModel> ListModel = new List<OrderModel>();
|
|
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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetOrders", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
AmazonResultObject model = JsonConvert.Deserialize<AmazonResultObject>(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<OrderDetailModel>();
|
|
|
|
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<AmazonAdressRootResult>(XmlContent);
|
|
if (model.HasError == true)
|
|
{
|
|
ErrorMessage = model.Message;
|
|
ErrorFollow.TraceWrite("GetOrdersAdress", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
AdressRoot model2 = JsonConvert.Deserialize<AdressRoot>(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<AmazonOrderItemResult>(XmlContent);
|
|
if (model.HasError == true)
|
|
{
|
|
ErrorMessage = model.Message;
|
|
ErrorFollow.TraceWrite("GetOrdersItem", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
OrderItemRoot model2 = JsonConvert.Deserialize<OrderItemRoot>(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<AMGoodsPM> GetProuctPM(List<AMGoodsPM> 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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetProuctPM", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
GoodsPMRoot model = JsonConvert.Deserialize<GoodsPMRoot>(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<AMGoodsPM> GetProductPM_New(List<AMGoodsPM> 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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetProuctPM", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
SyncAmazonCatalogModel model = JsonConvert.Deserialize<SyncAmazonCatalogModel>(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<Amzon_TrackBack> 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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("createFeedDocument", "", ErrorMessage);
|
|
return false;
|
|
}
|
|
|
|
feedDocumentRoot model = JsonConvert.Deserialize<feedDocumentRoot>(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<Amzon_TrackBack> 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);
|
|
//<?xml version="1.0" encoding="UTF-8"?><AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd"><Header><DocumentVersion>1.01</DocumentVersion><MerchantIdentifier>A3CHOODG4BN7N0</MerchantIdentifier></Header><MessageType>OrderFulfillment</MessageType><Message><MessageID>1</MessageID><OrderFulfillment><AmazonOrderID>111-6291990-2499443</AmazonOrderID><FulfillmentDate>2020-08-06T04:07:54+08:00</FulfillmentDate><FulfillmentData><CarrierCode>FedEx</CarrierCode><ShippingMethod>Standard</ShippingMethod><ShipperTrackingNumber>61290989349120195308</ShipperTrackingNumber></FulfillmentData><Item><AmazonOrderItemCode>46111329146458</AmazonOrderItemCode><Quantity>1</Quantity></Item></OrderFulfillment></Message></AmazonEnvelope>
|
|
var xml = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
|
xml.Append("<AmazonEnvelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"amzn-envelope.xsd\">");
|
|
xml.Append("<Header>");
|
|
xml.Append("<DocumentVersion>1.01</DocumentVersion>");
|
|
xml.AppendFormat("<MerchantIdentifier>{0}</MerchantIdentifier>", SellerId);
|
|
xml.Append("</Header>");
|
|
xml.Append("<MessageType>OrderFulfillment</MessageType>");
|
|
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("<Message>");
|
|
xml.Append("<MessageID>" + i + "</MessageID>");
|
|
xml.Append("<OrderFulfillment>");
|
|
xml.AppendFormat("<AmazonOrderID>{0}</AmazonOrderID>", omd.PlatOrderCode);
|
|
xml.AppendFormat("<FulfillmentDate>{0}T{1}+08:00</FulfillmentDate>", now.ToString("yyyy-MM-dd"), now.ToString("hh:mm:ss"));
|
|
xml.Append("<FulfillmentData>");
|
|
//xml.AppendFormat("<CarrierName>{0}</CarrierName>", omd.serviceName);
|
|
//xml.AppendFormat("<ShippingMethod>Standard</ShippingMethod>");
|
|
if (omd.serviceName != null && omd.serviceName.Contains("UPS"))
|
|
xml.AppendFormat("<CarrierCode>UPS</CarrierCode>");
|
|
else
|
|
xml.AppendFormat("<CarrierCode>FedEx</CarrierCode>");
|
|
xml.AppendFormat("<ShippingMethod>Standard</ShippingMethod>");
|
|
xml.AppendFormat("<ShipperTrackingNumber>{0}</ShipperTrackingNumber>", omd.TrackCode);
|
|
xml.Append("</FulfillmentData>");
|
|
xml.Append("<Item>");
|
|
xml.AppendFormat("<AmazonOrderItemCode>{0}</AmazonOrderItemCode>", md.GoodsDesc);
|
|
xml.Append("<Quantity>" + md.GoodsNum + "</Quantity>");
|
|
xml.Append("</Item>");
|
|
xml.Append("</OrderFulfillment>");
|
|
xml.Append("</Message>");
|
|
i++;
|
|
}
|
|
}
|
|
xml.Append("</AmazonEnvelope>");
|
|
|
|
FileContent = EncodeBase64("utf-8", xml.ToString());
|
|
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
|
|
var data = Encoding.UTF8.GetBytes(xml.ToString());
|
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
|
|
List<string> ListHeader = new List<string>();
|
|
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<AmazonResult>(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<string> 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<AMRepotResult> rlist = new List<AMRepotResult>();
|
|
#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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
RetuenReport model = JsonConvert.Deserialize<RetuenReport>(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<AMRepotResult> rlist = new List<AMRepotResult>();
|
|
#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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
RetuenReportDocumentId model = JsonConvert.Deserialize<RetuenReportDocumentId>(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<AMRepotResult> rlist = new List<AMRepotResult>();
|
|
#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<AmazonResult>(XmlContent);
|
|
if (re.HasError == true || re.ResultObject == null || re.ResultObject == "")
|
|
{
|
|
ErrorMessage = re.Message;
|
|
ErrorFollow.TraceWrite("GetGoodsReturnRequest", "", ErrorMessage);
|
|
return null;
|
|
}
|
|
|
|
RetuenReportDocumenturl model = JsonConvert.Deserialize<RetuenReportDocumenturl>(re.ResultObject);
|
|
|
|
if (model != null)
|
|
{
|
|
return model.url;
|
|
}
|
|
|
|
|
|
|
|
return "";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message);
|
|
return "";
|
|
}
|
|
|
|
}
|
|
|
|
public List<AMRepotOrders> GetGoodsReturnOrders(string url)
|
|
{
|
|
|
|
try
|
|
{
|
|
string ErrorMessage = "";
|
|
string ServiceURL = "";
|
|
List<AMRepotOrders> rlist = new List<AMRepotOrders>();
|
|
|
|
// 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> AMRepotOrdersDetail = new List<AMRepotOrdersDetail>();
|
|
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> AMRepotLabelsDetail = new List<AMRepotLabelsDetail>();
|
|
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
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string BuyerEmail { get; set; }
|
|
}
|
|
|
|
public class AutomatedShippingSettings
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? HasAutomatedShippingSettings { get; set; }
|
|
}
|
|
|
|
public class DefaultShipFromLocationAddress
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AddressLine2 { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string StateOrRegion { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AddressLine1 { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Phone { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string PostalCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string City { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CountryCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Name { get; set; }
|
|
}
|
|
|
|
public class AMShippingAddress
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string StateOrRegion { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string PostalCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string City { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CountryCode { get; set; }
|
|
}
|
|
|
|
public class OrderTotal
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Amount { get; set; }
|
|
}
|
|
|
|
public class OrdersItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public BuyerInfo BuyerInfo { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AmazonOrderId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string EarliestDeliveryDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string EarliestShipDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string SalesChannel { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public AutomatedShippingSettings AutomatedShippingSettings { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string OrderStatus { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int NumberOfItemsShipped { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string OrderType { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsPremiumOrder { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsPrime { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string FulfillmentChannel { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Int32? NumberOfItemsUnshipped { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsReplacementOrder { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsSoldByAB { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string LatestShipDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ShipServiceLevel { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public DefaultShipFromLocationAddress DefaultShipFromLocationAddress { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsISPU { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string MarketplaceId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string LatestDeliveryDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string PurchaseDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public AMShippingAddress ShippingAddress { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string PaymentMethod { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsBusinessOrder { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public OrderTotal OrderTotal { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<string> PaymentMethodDetails { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? IsGlobalExpressEnabled { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string LastUpdateDate { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ShipmentServiceLevelCategory { get; set; }
|
|
}
|
|
|
|
public class Payload
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<OrdersItem> Orders { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CreatedBefore { get; set; }
|
|
|
|
public string NextToken { get; set; }
|
|
}
|
|
|
|
public class AmazonResultObject
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Payload payload { get; set; }
|
|
}
|
|
public class AmazonResult
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? HasError { get; set; }
|
|
public string Message { get; set; }
|
|
public string ResultObject { get; set; }
|
|
|
|
}
|
|
|
|
//如果好用,请收藏地址,帮忙分享。
|
|
public class TaxCollection
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Model { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ResponsibleParty { get; set; }
|
|
}
|
|
|
|
public class ProductInfo
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string NumberOfItems { get; set; }
|
|
}
|
|
|
|
|
|
|
|
public class ItemTax
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Amount { get; set; }
|
|
}
|
|
|
|
public class ItemPrice
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Amount { get; set; }
|
|
}
|
|
|
|
public class PromotionDiscountTax
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Amount { get; set; }
|
|
}
|
|
|
|
public class PromotionDiscount
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Amount { get; set; }
|
|
}
|
|
|
|
public class OrderItemsItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public TaxCollection TaxCollection { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public ProductInfo ProductInfo { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public BuyerInfo BuyerInfo { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public ItemTax ItemTax { get; set; }
|
|
|
|
public ItemTax ShippingTax { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int QuantityShipped { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public ItemPrice ItemPrice { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ASIN { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string SellerSKU { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Title { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string IsGift { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ConditionSubtypeId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string IsTransparency { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int QuantityOrdered { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public PromotionDiscountTax PromotionDiscountTax { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ConditionId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public PromotionDiscount PromotionDiscount { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string OrderItemId { get; set; }
|
|
}
|
|
|
|
public class OrderItemPayload
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<OrderItemsItem> OrderItems { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AmazonOrderId { get; set; }
|
|
}
|
|
public class AmazonOrderItemResult
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? HasError { get; set; }
|
|
public string Message { get; set; }
|
|
public string ResultObject { get; set; }
|
|
|
|
}
|
|
public class OrderItemRoot
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public OrderItemPayload payload { get; set; }
|
|
}
|
|
//如果好用,请收藏地址,帮忙分享。
|
|
public class OrderShippingAddress
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string StateOrRegion { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AddressLine1 { get; set; }
|
|
public string AddressLine2 { get; set; }
|
|
public string AddressLine3 { get; set; }
|
|
public string County { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Phone { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string PostalCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string City { get; set; }
|
|
public string District { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CountryCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AddressType { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string Name { get; set; }
|
|
}
|
|
|
|
public class AdressPayload
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string AmazonOrderId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public OrderShippingAddress ShippingAddress { get; set; }
|
|
}
|
|
|
|
public class AdressRoot
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public AdressPayload payload { get; set; }
|
|
}
|
|
public class AmazonAdressRootResult
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Boolean? HasError { get; set; }
|
|
public string Message { get; set; }
|
|
public string ResultObject { get; set; }
|
|
|
|
}
|
|
|
|
|
|
//如果好用,请收藏地址,帮忙分享。
|
|
public class LandedPrice
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double Amount { get; set; }
|
|
}
|
|
|
|
public class ListingPrice
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double Amount { get; set; }
|
|
}
|
|
|
|
public class Shipping
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CurrencyCode { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int Amount { get; set; }
|
|
}
|
|
|
|
public class Price
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public LandedPrice LandedPrice { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public ListingPrice ListingPrice { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Shipping Shipping { get; set; }
|
|
}
|
|
|
|
public class CompetitivePricesItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string belongsToRequester { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string condition { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string subcondition { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Price Price { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string CompetitivePriceId { get; set; }
|
|
}
|
|
|
|
public class NumberOfOfferListingsItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string condition { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int Count { get; set; }
|
|
}
|
|
|
|
public class CompetitivePricing
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<CompetitivePricesItem> CompetitivePrices { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<NumberOfOfferListingsItem> NumberOfOfferListings { get; set; }
|
|
}
|
|
|
|
public class MarketplaceASIN
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string MarketplaceId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ASIN { get; set; }
|
|
}
|
|
|
|
public class Identifiers
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public MarketplaceASIN MarketplaceASIN { get; set; }
|
|
}
|
|
|
|
public class SalesRankingsItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ProductCategoryId { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int Rank { get; set; }
|
|
}
|
|
|
|
public class Product
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public CompetitivePricing CompetitivePricing { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Identifiers Identifiers { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<SalesRankingsItem> SalesRankings { get; set; }
|
|
}
|
|
|
|
public class PayloadItem
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string ASIN { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Product Product { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string status { get; set; }
|
|
}
|
|
|
|
public class GoodsPMRoot
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<PayloadItem> payload { get; set; }
|
|
}
|
|
public class feedDocumentRoot
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string feedDocumentId { get; set; }
|
|
public string url { get; set; }
|
|
}
|
|
|
|
public class RetuenReport
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string reportId { get; set; }
|
|
}
|
|
public class RetuenReportDocumentId
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string reportDocumentId { get; set; }
|
|
}
|
|
public class RetuenReportDocumenturl
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string url { get; set; }
|
|
}
|
|
|
|
|
|
public class SyncAmazonCatalogModel
|
|
{
|
|
public int numberOfResults { get; set; }
|
|
public List<SyncAmazonCatalog_Items> items { get; set; }
|
|
}
|
|
public class SyncAmazonCatalog_Items
|
|
{
|
|
public string asin { get; set; }
|
|
public List<SyncAmazonCatalog_Items_salesRanks> salesRanks { get; set; }
|
|
}
|
|
|
|
public class SyncAmazonCatalog_Items_salesRanks
|
|
{
|
|
public string marketplaceId { get; set; }
|
|
public List<SyncAmazonCatalog_Items_salesRanks_classificationRanks> classificationRanks { get; set; }
|
|
public List<SyncAmazonCatalog_Items_salesRanks_displayGroupRanks> displayGroupRanks { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 小类排名
|
|
/// </summary>
|
|
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; }
|
|
}
|
|
/// <summary>
|
|
/// 大类排名
|
|
/// </summary>
|
|
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; }
|
|
}
|
|
} |