using System; using System.Collections.Generic; using System.Linq; using System.Web; using NetLibrary.OnlineTrade; using System.Web.Script.Serialization; using System.Xml; using System.Xml.Linq; using System.Net; using System.Text; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; using Org.BouncyCastle.Crypto.Parameters; using System.IO; using NetLibrary.Log; using TradeData; using TradeModel; using NetLibrary.Data; using System.Data.Common; using System.Data; namespace TradeManageNew { public class WalmartApi { //public string Url = "http://api-gateway.walmart.com/v3/orders"; public string NAME = ""; public string TIMESTAMP = ""; public string AUTH_SIGNATURE = ""; public static string ConsumerId = "1db5f62b-2fd1-4a89-b26c-8f02470984a7"; public static string PrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALjEQj9vLHgRk+U296zqmBQgFthoJIdt2PaBGMsMtdjNORovoLb0Fs5Xtvg3Mq9Z8gOeXtgNtTLM5mpkSrZLWe3R95Ri6GO4/HiYDtE5i6+j82H8s5GqJlWEhBrp84jRt7yKL1fxixqDSnFhNWUeYA6vRXNYGAuw5OKXN4LKv0O1AgMBAAECgYAo6cyBn2yJadsF9pYBhDEIw9JLOURdeMWCUDPdQoNB7q+mTMWZvZMPPf0WGaLvkUs14eu+i8qD5Ttgc7TXiPfwgL1FhuFKrK2kaoxKrNbNRU0MmV9QcK3pxpW/yqUGlytvKzlvsjU7AKgdG0AjlzGfghI+dfUSXKcUKeysoWnIQQJBAO8mG7IXQ99lmPKQmZmXOn2C3n9phZJsym2TgTr6+3clJuZ8vIHkax5qOTpagBNozZeePi5CxTU/B5XWREFQ7DcCQQDFySz5hFNBT3H9QpIQ1BpVrOGluRSPbW8RTaFMGUVyhy7IhUExeCnJTTT82Ti90eEQAGOXAFAMjrJYA/yGNpFzAkEAj+ajZa9AJQ2SUesWsefgxyNXVN2fBTO3PuYyLdZWOCQ/2xMVrydOGZgbZXSNeqBmjaQnkFiXJ+oMW2n52j+iUwJAM4NTCGWzfWYgrTKicmmbtkbBunT66uQ4skwCv5wxX0PgJm+2bBj84SYPr+8vfRjlwlInnhOBxdOAlbXsFlSuCwJAPBDdFunkCSFrjIXrcId5RxKNuMmAB/plwszvbyumybJDl1ntwuyIrg6UUdY0UtQGxN2b1xUOBJWey95Rogo+Mw=="; public static string ChannelType = "0f3e4dd4-0514-4346-b39d-af0e00ea066d"; public static string ClientID = "bec89fab-b0c1-433d-95f4-606f14c7a6ab";// "f0205135-5435-4f92-9622-5872f60d0f5e"; public static string ClientSecret = "AKWVDtfuqPZqRVTNkK16795PTLhPlWH8M10kII0ZA-_dK2_g3Aa0ToC2EOystiWoZMVTQ4X8o9fzLWcXSDTvoSw";// "AOMXEInq-BnSoTn4WvvkLQKiIBzkCHckxb6-Dd8jyVaNEkGe8aUPd2QWPZSReWkgidPFUwVUhjIwcB_jWAIu7_g"; public static string ACCESS_TOKEN = ""; public static DateTime? GetTokenTime = null; public static Int32? ShopId = 0; public string Accept = ""; public string Host = ""; JavaScriptSerializer JsonConvert = null; // WM_SVC.NAME: Walmart Marketplace //WM_QOS.CORRELATION_ID: 123456abcdef //WM_SEC.TIMESTAMP: 1438147839 //WM_SEC.AUTH_SIGNATURE: 7QzL9PeRt0WSGbXNGGj4kSQ9L6PMBX/q+ovdy9bDQfvdhYs8NoEsjRX4fD7UNIHTddgkmSVqAqeIIHlaLcRIl0Y4DcJqQYHL27LiWlsm91nYodGssWTKsOq6dJfUHEy95M4zXFGWDDhbHYCor28SCV/g/JdEQybGkcX9Zj5aDyg= //WM_CONSUMER.ID: a20ac266-9add-4fc7-9392-fec303f5155c //WM_CONSUMER.CHANNEL.TYPE: 0f3e4dd4-0514-4346-b39d-af0e00ea //Accept: application/xml //Host: marketplace.walmartapis.com public WalmartApi() { } public static string GetCurrentTimestamp() { TimeSpan t = DateTime.UtcNow- new DateTime(1970, 1, 1); return ((long)t.TotalMilliseconds).ToString(); } public static string GetCurrentTimestamp2() { TimeSpan t = DateTime.UtcNow.AddHours(-15) - new DateTime(1970, 1, 1); return ((long)t.TotalMilliseconds).ToString(); } private string GetSignature(string Url, string Method, string timestamp) { var requestUri = Url; var httpMethod = Method;// "GET"; // Construct the string to sign string stringToSign = string.Join("\n", new List() { ConsumerId, requestUri, httpMethod, timestamp }) + "\n"; // extra newline symbol required for valid signature try { return SignData(stringToSign, PrivateKey); } catch (System.Exception ex) { //pop up this to the user of SDK return ""; // throw Base.Exception.SignatureException.Factory(creds.ConsumerId, requestUri, httpMethod, ex); } } internal static string SignData(string stringToBeSigned, string privateKey) { byte[] encodedKeyBytes = Convert.FromBase64String(privateKey); byte[] data = Encoding.UTF8.GetBytes(stringToBeSigned); AsymmetricKeyParameter asymmetricKeyParameter = PrivateKeyFactory.CreateKey(encodedKeyBytes); RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)asymmetricKeyParameter; ISigner signer = SignerUtilities.GetSigner("SHA-256withRSA"); signer.Init(true, rsaKeyParameters); var stringToSignInBytes = Encoding.UTF8.GetBytes(stringToBeSigned); signer.BlockUpdate(stringToSignInBytes, 0, stringToSignInBytes.Length); var signature = signer.GenerateSignature(); return Convert.ToBase64String(signature); } public static DateTime GetTime(string utc) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); startTime = startTime.AddMilliseconds(Convert.ToInt64(utc)); //startTime = startTime.AddHours(8);//转化为北京时间(北京时间=UTC时间+8小时 ) return startTime; } #region Walmart数据导入 public string ImportWalmart(DateTime? StartDate, DateTime? StopDate, List ListModel) { string error = ""; if (StartDate == null) StartDate = DateTime.Today.AddDays(-2); WalmartApi obj = new WalmartApi(); foreach (int ShopId in ListModel) { JC_Shop ShopModel = JC_ShopService.GetModel(ShopId); WalmartApi.ShopId = ShopModel.ShopId; WalmartApi.ACCESS_TOKEN = ShopModel.AccessToken; WalmartApi.ClientID = ShopModel.Appkey; WalmartApi.ClientSecret = ShopModel.DeveKey; WalmartApi.GetTokenTime = ShopModel.AccessTokenUpdateTime; //var list= GetWalmartOrder(StartDate, StopDate, out error); List ListOrderModel = obj.GetWalmartOrder(StartDate, StopDate, out error); if (ListOrderModel == null) ListOrderModel = new List(); if (string.IsNullOrEmpty(error) == false) return "导入订单失败:" + error; error = "导入订单:" + ListOrderModel.Count.ToString() + "条;"; API_OrderInfoService.SaveOrderModel(ShopModel.CompanyId, ShopId, ShopModel.ShopName, 6, 0, ListOrderModel); } return error; } #endregion #region Walmart数据导入 public string ImportWalmartFBA(DateTime? StartDate, DateTime? StopDate, List ListModel) { string error = ""; if (StartDate == null) StartDate = DateTime.Today.AddDays(-2); WalmartApi obj = new WalmartApi(); foreach (int ShopId in ListModel) { JC_Shop ShopModel = JC_ShopService.GetModel(ShopId); WalmartApi.ShopId = ShopModel.ShopId; WalmartApi.ACCESS_TOKEN = ShopModel.AccessToken; WalmartApi.ClientID = ShopModel.Appkey; WalmartApi.ClientSecret = ShopModel.DeveKey; WalmartApi.GetTokenTime = ShopModel.AccessTokenUpdateTime; //var list= GetWalmartOrder(StartDate, StopDate, out error); List ListOrderModel = obj.GetWalmartOrderFBA(StartDate, StopDate, out error); if (ListOrderModel == null) ListOrderModel = new List(); if (string.IsNullOrEmpty(error) == false) return "导入订单失败:" + error; error = "导入订单:" + ListOrderModel.Count.ToString() + "条;"; API_OrderInfoService.SaveOrderModel(ShopModel.CompanyId, ShopId, ShopModel.ShopName, 6, 0, ListOrderModel); } return error; } #endregion #region 读取订单 public List GetWalmartOrder(DateTime? StartTime, DateTime? StopTime, out string ErrorMessage) { try { if (GetTokenTime == null || GetTokenTime.Value< DateTime.Now)//过期 { string error = ""; GetToken(out error); } // string json =File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "yy.txt"); // // var m2 = jsonconvert.Deserialize(json); // int a = 0; JavaScriptSerializer jsonconvert = new JavaScriptSerializer(); string Url = "https://marketplace.walmartapis.com/v3/orders?createdStartDate=" + StartTime.Value.ToString("yyyy-MM-dd") + "&limit=50";// "https://marketplace.walmartapis.com/v3/ https://marketplace.walmartapis.com/v3/feeds?&limit=10&offset=0";// "https://api-gateway.walmart.com/v3/feeds"; string BaseUrl = Url; string jsonContent = GetWalmartOrderList(BaseUrl,"GET",Url, out ErrorMessage); // ErrorFollow.TraceWrite("GetWalmartOrder22", jsonContent, ErrorMessage); List list = new List(); if (jsonContent != "") { var wmd = jsonconvert.Deserialize(jsonContent); if (wmd.list.elements.order != null) { foreach (var md in wmd.list.elements.order) { if (md.customerOrderId == "6863320780341" || md.purchaseOrderId == "6863320780341") { string a = ""; } if (md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Canceled" && md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Shipped") list.Add(md); } } int Next = 0; string nextCursor = wmd.list.meta.nextCursor; if (nextCursor != null && nextCursor != "") { Next = 1; } while (Next == 1) { Url = "https://marketplace.walmartapis.com/v3/orders" + nextCursor; jsonContent = GetWalmartOrderList(Url,"GET", Url, out ErrorMessage); if (jsonContent != "") { wmd = jsonconvert.Deserialize(jsonContent); if (wmd != null && wmd.list.elements.order != null) { foreach (var md in wmd.list.elements.order) { if (md.customerOrderId == "6863320780341" || md.purchaseOrderId == "6863320780341") { string a = ""; } if (md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Canceled" && md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Shipped") list.Add(md); } } if (wmd == null || wmd.list == null || wmd.list.meta == null || wmd.list.meta.nextCursor == null || wmd.list.meta.nextCursor == "") { Next = 0; } else nextCursor = wmd.list.meta.nextCursor; } else Next = 0; } } List olsit = new List(); if (list != null) { int Num = list.Count; foreach(var ordermd in list) { OrderModel model = new OrderModel(); model.OrderCode = ordermd.purchaseOrderId.ToString(); //if (model.OrderCode == "17101714399VXNA") //{ // string a = "1"; //} decimal TotalPrice = 0; string MoneyCode = "USD"; if (ordermd.orderLines != null && ordermd.orderLines.orderLine!=null) { foreach (var orderLine in ordermd.orderLines.orderLine) { if (orderLine.charges != null && orderLine.charges.charge != null) { foreach (var charge in orderLine.charges.charge) { if (charge.chargeAmount != null && charge.chargeAmount.amount != null) { TotalPrice += charge.chargeAmount.amount.Value; } if (charge.chargeAmount != null && charge.chargeAmount.currency != null) MoneyCode = charge.chargeAmount.currency; } } } } model.TotalPrice = TotalPrice; model.MoneyCode = MoneyCode; if (ordermd.orderDate != null) model.OrderDate = GetTime(ordermd.orderDate); else model.OrderDate = DateTime.Now; model.BuyerID = ""; model.OrderState = 2; if (ordermd.shippingInfo != null && ordermd.shippingInfo.postalAddress != null) { model.BuyerName = ordermd.shippingInfo.postalAddress.name; model.BuyerZip = ordermd.shippingInfo.postalAddress.postalCode; // model.BuyerCountry = ordermd.shippingInfo.postalAddress.country; // if (model.BuyerCountryordermd.shippingInfo.postalAddress.country == null || ordermd.shippingInfo.postalAddress.country == "") model.BuyerCountry = "US"; model.BuyerProvince = ordermd.shippingInfo.postalAddress.state; model.BuyerCity = ordermd.shippingInfo.postalAddress.city; model.BuyerAddr = ordermd.shippingInfo.postalAddress.address1; if(ordermd.shippingInfo.postalAddress.address2!=null) model.BuyerAddr +=" "+ordermd.shippingInfo.postalAddress.address2; model.BuyerFax = ordermd.shippingInfo.postalAddress.addressType; } model.BuyerPhone = ""; model.BuyerPhone = ordermd.shippingInfo.phone; model.BuyerMobile = ""; model.BuyerMail = ordermd.customerEmailId; //model.logisticsAmount =ordermd.buyerInfo.logisticsAmount; model.OrderRemark = ""; //memo model.LeaveWord =""; model.PayDate = model.OrderDate; model.OutOrderDate = model.OrderDate.Value.AddDays(7); if (ordermd.orderLines != null && ordermd.orderLines.orderLine != null && ordermd.orderLines.orderLine[0].fulfillment != null) { if(ordermd.orderLines.orderLine[0].fulfillment.pickUpDateTime!=null) model.OutOrderDate = GetTime(ordermd.orderLines.orderLine[0].fulfillment.pickUpDateTime); model.PostInfo = ordermd.orderLines.orderLine[0].fulfillment.fulfillmentOption; } if (model.OrderDate != null && model.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OrderDate = DateTime.Now; } if (model.PayDate != null && model.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { model.PayDate = DateTime.Now; } if (model.OutOrderDate != null && model.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OutOrderDate = DateTime.Now.AddDays(7); } model.ListModel = new List(); if (ordermd.orderLines!=null&&ordermd.orderLines.orderLine != null) { foreach (var item2 in ordermd.orderLines.orderLine) { OrderDetailModel model2 = new OrderDetailModel(); // {"item_name":"Adjustable Kids Safety Harness Wrist Leash Anti-lost Link","item_sku":"\tZHI049","variation_discounted_price":"7.74","variation_id":320874188,"variation_name":"Blue, 250CM","item_id":418147192, // "variation_quantity_purchased":1,"variation_sku":"\tZHI049","variation_original_price":"8.60" model2.TypeDesc = ""; model2.productImgUrl = ""; model2.GoodsNum = 1; if (item2.orderLineQuantity != null && item2.orderLineQuantity .amount!= null) model2.GoodsNum = Convert.ToInt32(item2.orderLineQuantity.amount); // if (item2. != null) // model2.GoodsPrice = Convert.ToDecimal(item2.variation_original_price); model2.MoneyCode = ""; model2.GoodsName = item2.item.productName; model2.GoodsSKU = item2.item.sku; model2.PostInfo = ""; model.ListModel.Add(model2); } } olsit.Add(model); } } return olsit; } catch (Exception ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrder", "", ex.Message); return null; } } #endregion #region 读取订单 public List GetWalmartOrderFBA(DateTime? StartTime, DateTime? StopTime, out string ErrorMessage) { try { if (GetTokenTime == null || GetTokenTime.Value < DateTime.Now)//过期 { string error = ""; GetToken(out error); } // string json =File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "yy.txt"); // // var m2 = jsonconvert.Deserialize(json); // int a = 0; JavaScriptSerializer jsonconvert = new JavaScriptSerializer(); string Url = "https://marketplace.walmartapis.com/v3/orders?shipNodeType=WFSFulfilled&createdStartDate=" + StartTime.Value.ToString("yyyy-MM-dd") + "&limit=50";// "https://marketplace.walmartapis.com/v3/ https://marketplace.walmartapis.com/v3/feeds?&limit=10&offset=0";// "https://api-gateway.walmart.com/v3/feeds"; string BaseUrl = Url; string jsonContent = GetWalmartOrderList(BaseUrl, "GET", Url, out ErrorMessage); // ErrorFollow.TraceWrite("GetWalmartOrder22", jsonContent, ErrorMessage); List list = new List(); if (jsonContent != "") { var wmd = jsonconvert.Deserialize(jsonContent); if (wmd.list.elements.order != null) { foreach (var md in wmd.list.elements.order) { if (md.customerOrderId == "6863320780341" || md.purchaseOrderId == "6863320780341") { string a = ""; } if (md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Canceled") list.Add(md); } } int Next = 0; string nextCursor = wmd.list.meta.nextCursor; if (nextCursor != null && nextCursor != "") { Next = 1; } while (Next == 1) { Url = "https://marketplace.walmartapis.com/v3/orders" + nextCursor; jsonContent = GetWalmartOrderList(Url, "GET", Url, out ErrorMessage); if (jsonContent != "") { wmd = jsonconvert.Deserialize(jsonContent); if (wmd != null && wmd.list.elements.order != null) { foreach (var md in wmd.list.elements.order) { if (md.orderLines.orderLine[0].orderLineStatuses.orderLineStatus[0].status != "Canceled") list.Add(md); } } if (wmd == null || wmd.list == null || wmd.list.meta == null || wmd.list.meta.nextCursor == null || wmd.list.meta.nextCursor == "") { Next = 0; } else nextCursor = wmd.list.meta.nextCursor; } else Next = 0; } } List olsit = new List(); if (list != null) { int Num = list.Count; foreach (var ordermd in list) { OrderModel model = new OrderModel(); model.OrderCode = ordermd.purchaseOrderId.ToString(); //if (model.OrderCode == "17101714399VXNA") //{ // string a = "1"; //} decimal TotalPrice = 0; string MoneyCode = "USD"; if (ordermd.orderLines != null && ordermd.orderLines.orderLine != null) { foreach (var orderLine in ordermd.orderLines.orderLine) { if (orderLine.charges != null && orderLine.charges.charge != null) { foreach (var charge in orderLine.charges.charge) { if (charge.chargeAmount != null && charge.chargeAmount.amount != null) { TotalPrice += charge.chargeAmount.amount.Value; } if (charge.chargeAmount != null && charge.chargeAmount.currency != null) MoneyCode = charge.chargeAmount.currency; } } } } model.TotalPrice = TotalPrice; model.MoneyCode = MoneyCode; if (ordermd.orderDate != null) model.OrderDate = GetTime(ordermd.orderDate); else model.OrderDate = DateTime.Now; model.BuyerID = ""; model.OrderState = 2; if (ordermd.shippingInfo != null && ordermd.shippingInfo.postalAddress != null) { model.BuyerName = ordermd.shippingInfo.postalAddress.name; model.BuyerZip = ordermd.shippingInfo.postalAddress.postalCode; // model.BuyerCountry = ordermd.shippingInfo.postalAddress.country; // if (model.BuyerCountryordermd.shippingInfo.postalAddress.country == null || ordermd.shippingInfo.postalAddress.country == "") model.BuyerCountry = "US"; model.BuyerProvince = ordermd.shippingInfo.postalAddress.state; model.BuyerCity = ordermd.shippingInfo.postalAddress.city; model.BuyerAddr = ordermd.shippingInfo.postalAddress.address1; if (ordermd.shippingInfo.postalAddress.address2 != null) model.BuyerAddr += " " + ordermd.shippingInfo.postalAddress.address2; model.BuyerFax = ordermd.shippingInfo.postalAddress.addressType; } model.BuyerPhone = ""; model.BuyerPhone = ordermd.shippingInfo.phone; model.BuyerMobile = ""; model.BuyerMail = ordermd.customerEmailId; //model.logisticsAmount =ordermd.buyerInfo.logisticsAmount; model.OrderRemark = ""; //memo model.LeaveWord = ""; model.PayDate = model.OrderDate; model.OutOrderDate = model.OrderDate.Value.AddDays(7); if (ordermd.orderLines != null && ordermd.orderLines.orderLine != null && ordermd.orderLines.orderLine[0].fulfillment != null) { if (ordermd.orderLines.orderLine[0].fulfillment.pickUpDateTime != null) model.OutOrderDate = GetTime(ordermd.orderLines.orderLine[0].fulfillment.pickUpDateTime); model.PostInfo = ordermd.orderLines.orderLine[0].fulfillment.fulfillmentOption; } if (model.OrderDate != null && model.OrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OrderDate = DateTime.Now; } if (model.PayDate != null && model.PayDate.Value <= Convert.ToDateTime("1753-01-01")) { model.PayDate = DateTime.Now; } if (model.OutOrderDate != null && model.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01")) { model.OutOrderDate = DateTime.Now.AddDays(7); } model.ListModel = new List(); if (ordermd.orderLines != null && ordermd.orderLines.orderLine != null) { foreach (var item2 in ordermd.orderLines.orderLine) { OrderDetailModel model2 = new OrderDetailModel(); // {"item_name":"Adjustable Kids Safety Harness Wrist Leash Anti-lost Link","item_sku":"\tZHI049","variation_discounted_price":"7.74","variation_id":320874188,"variation_name":"Blue, 250CM","item_id":418147192, // "variation_quantity_purchased":1,"variation_sku":"\tZHI049","variation_original_price":"8.60" model2.TypeDesc = ""; model2.productImgUrl = ""; model2.GoodsNum = 1; if (item2.orderLineQuantity != null && item2.orderLineQuantity.amount != null) model2.GoodsNum = Convert.ToInt32(item2.orderLineQuantity.amount); // if (item2. != null) // model2.GoodsPrice = Convert.ToDecimal(item2.variation_original_price); model2.MoneyCode = ""; model2.GoodsName = item2.item.productName; model2.GoodsSKU = item2.item.sku; model2.PostInfo = ""; model.ListModel.Add(model2); } } olsit.Add(model); } } return olsit; } catch (Exception ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrder", "", ex.Message); return null; } } #endregion #region 读取订单 public string GetWalmartOrderList(string BaseUrl,string Method, string Url, out string ErrorMessage) { try { ErrorMessage = ""; // string timestamp = GetCurrentTimestamp(); // string signature = GetSignature(BaseUrl,"GET",timestamp); string CORRELATION_ID = Guid.NewGuid().ToString(); ErrorMessage = ""; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url); myRequest.Method = Method;// "GET"; //GET,POST myRequest.Accept = "application/json"; myRequest.ContentType = "application/json"; //myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; //myRequest.Headers["Accept"]= "application/json"; myRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace");//"Walmart Marketplace" myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); string au = Base64En(ClientID + ":" + ClientSecret); myRequest.Headers.Add("Authorization", "Basic " + au); //string token = "eyJraWQiOiI3ZWU0ZjdkNS0xYTk4LTRlODMtYjY2Yy02ZDUyOWU3MmJiZTYiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..JS39U7jLKZGFqiye.og4QC0xStzUVmzguCK6pUL0CgZOCzhGpR996BlbnXulH4_e39IlE-1JYHx1JJgptUya-pZdLpV3dmtK9paSoAf75sZ3OJ84vibY3OigSzkuXHmEoHMQaTlcK6ayzi-MJVgIeXtk3qvCu5261NyGLgRzOO4LBLrmpNMxVy7t0GUxJyQqquxPQw3e0cPAo6YS3NW7YbBOfoG8t0gs3WPQAryh0CvbhY8Bms7fgL7MwweMlf9ibdlPrmqasu0bOLmo9wdoHAAsEGPqcWQBfkBgq0JH1DjYowbPmV-L4F1z49-0rZI5AF-tppdJn9IEaPGv4CCMITHuQaT_Q0jxnwukSIipzul6iRMggYdlyza38QxSrhaD2MphYVjsmNRY3oZtpAHkKGJIwvRqHVB2Iw7aDIAWsnDUo-OENqeiqStHfBa4mPR27s3qdfVN6ef06KUo0Az0RebuN_m5sZ1iAe1Ffgg3ySolGI2es3LTonfH1uwIXL1YoIzh8kB8JNVynLSqPq4vtopbHlXXjTHOJ_vxDh6_CI3OHKnYMIlvGlHDIqAKSBqsA-udo2GDh7Y7wHfY3hQDDWwrJsDE3PcctsnXr5yrBil2qfUCJjU2JrZyCWF3c3dgYEIs-IL0Jb-lYCrJ0u9mt9mfDmGB-szSRO6c_IpGMT9Wb1IBrBhQIRm4Ro8fcsLifYMf6wKty51mT.v91A2BpgtRQGp7s3x2Vl_w"; myRequest.Headers.Add("WM_SEC.ACCESS_TOKEN", ACCESS_TOKEN); //myRequest.Headers.Add("WM_CONSUMER.ID", ConsumerId); //myRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", signature); //myRequest.Headers.Add("WM_SEC.TIMESTAMP", timestamp); //myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); //myRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", ChannelType); myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存 myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存 myRequest.Timeout = 3 * 60 * 1000; myRequest.ProtocolVersion = HttpVersion.Version11; //获得接口返回值 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); Stream myResponseStream = myResponse.GetResponseStream(); StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); string content = reader.ReadToEnd(); reader.Close(); myResponseStream.Close(); myResponse.Close(); return content; } catch (WebException ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrderList", Url, ex.Message); return ""; } } #endregion #region 读取订单 public string GetWalmartOrderList2(string BaseUrl, string Method, byte[] bytes, string Url, out string ErrorMessage) { try { ErrorMessage = ""; // string timestamp = GetCurrentTimestamp(); // string signature = GetSignature(BaseUrl,"POST", timestamp); string CORRELATION_ID = Guid.NewGuid().ToString(); ErrorMessage = ""; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url); myRequest.Method = Method;// "GET"; //GET,POST myRequest.Accept = "application/json"; myRequest.ContentType = "application/json"; //myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; //myRequest.Headers["Accept"]= "application/json"; myRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace"); // myRequest.Headers.Add("WM_CONSUMER.ID", ConsumerId); string au = Base64En(ClientID + ":" + ClientSecret); myRequest.Headers.Add("Authorization", "Basic " + au); // string token = "eyJraWQiOiI3ZWU0ZjdkNS0xYTk4LTRlODMtYjY2Yy02ZDUyOWU3MmJiZTYiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..JS39U7jLKZGFqiye.og4QC0xStzUVmzguCK6pUL0CgZOCzhGpR996BlbnXulH4_e39IlE-1JYHx1JJgptUya-pZdLpV3dmtK9paSoAf75sZ3OJ84vibY3OigSzkuXHmEoHMQaTlcK6ayzi-MJVgIeXtk3qvCu5261NyGLgRzOO4LBLrmpNMxVy7t0GUxJyQqquxPQw3e0cPAo6YS3NW7YbBOfoG8t0gs3WPQAryh0CvbhY8Bms7fgL7MwweMlf9ibdlPrmqasu0bOLmo9wdoHAAsEGPqcWQBfkBgq0JH1DjYowbPmV-L4F1z49-0rZI5AF-tppdJn9IEaPGv4CCMITHuQaT_Q0jxnwukSIipzul6iRMggYdlyza38QxSrhaD2MphYVjsmNRY3oZtpAHkKGJIwvRqHVB2Iw7aDIAWsnDUo-OENqeiqStHfBa4mPR27s3qdfVN6ef06KUo0Az0RebuN_m5sZ1iAe1Ffgg3ySolGI2es3LTonfH1uwIXL1YoIzh8kB8JNVynLSqPq4vtopbHlXXjTHOJ_vxDh6_CI3OHKnYMIlvGlHDIqAKSBqsA-udo2GDh7Y7wHfY3hQDDWwrJsDE3PcctsnXr5yrBil2qfUCJjU2JrZyCWF3c3dgYEIs-IL0Jb-lYCrJ0u9mt9mfDmGB-szSRO6c_IpGMT9Wb1IBrBhQIRm4Ro8fcsLifYMf6wKty51mT.v91A2BpgtRQGp7s3x2Vl_w"; myRequest.Headers.Add("WM_SEC.ACCESS_TOKEN", ACCESS_TOKEN); //myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); //myRequest.Headers.Add("WM_CONSUMER.ID", ConsumerId); //myRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", signature); //myRequest.Headers.Add("WM_SEC.TIMESTAMP", timestamp); //myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); //myRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", ChannelType); myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存 myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存 myRequest.Timeout = 3 * 60 * 1000; myRequest.ProtocolVersion = HttpVersion.Version11; 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(); } //获得接口返回值 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 (WebException ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrderList", Url, ex.Message); return ""; } } #endregion private string Base64En(string str) { byte[] inArray = System.Text.Encoding.UTF8.GetBytes(str); return Convert.ToBase64String(inArray); } #region 读取订单 public string GetWalmartOrderList3(string BaseUrl, string Method, byte[] bytes, string Url, out string ErrorMessage) { try { ErrorMessage = ""; string timestamp = GetCurrentTimestamp(); //string signature = GetSignature(BaseUrl, "POST", timestamp); string CORRELATION_ID = Guid.NewGuid().ToString(); ErrorMessage = ""; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url); myRequest.Method = Method;// "GET"; //GET,POST myRequest.Accept = "application/json"; myRequest.ContentType = "application/json"; //myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; //myRequest.Headers["Accept"]= "application/json"; myRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace"); // myRequest.Headers.Add("WM_CONSUMER.ID", ConsumerId); string au = Base64En(ClientID + ":" + ClientSecret); myRequest.Headers.Add("Authorization", "Basic " + au); myRequest.Headers.Add("WM_SEC.ACCESS_TOKEN",ACCESS_TOKEN); myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); // myRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", ChannelType); myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存 myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存 myRequest.Timeout = 3 * 60 * 1000; myRequest.ProtocolVersion = HttpVersion.Version11; 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(); } //获得接口返回值 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 (WebException ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrderList", Url, ex.Message); return ""; } } #endregion #region 确认订单 public int GetWalmartOrderSure(string orderid,out string ErrorMessage) { try { // string json =File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "yy.txt"); // // var m2 = jsonconvert.Deserialize(json); // int a = 0; JavaScriptSerializer jsonconvert = new JavaScriptSerializer();//https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/acknowledge string Url = "https://marketplace.walmartapis.com/v3/orders/" + orderid + "/acknowledge";// "https://marketplace.walmartapis.com/v3/feeds?&limit=10&offset=0";// "https://api-gateway.walmart.com/v3/feeds"; string BaseUrl = Url;// "https://marketplace.walmartapis.com/v3/orders/"; JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); WalmartOrderSure md = new WalmartOrderSure(); md.purchaseOrderId = orderid; string postmessage = JsonConvert.Serialize(md); //UTF8Encoding encoding = new UTF8Encoding(); byte[] data = Encoding.UTF8.GetBytes(postmessage); string jsonContent = GetWalmartOrderList2(BaseUrl, "POST", data, Url, out ErrorMessage); return 1; } catch (Exception ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrderSure", "", ex.Message); return 0; } } #endregion #region public string GetToken(out string ErrorMessage) { try { string postmessage = "grant_type=client_credentials"; //UTF8Encoding encoding = new UTF8Encoding(); byte[] bytes = Encoding.UTF8.GetBytes(postmessage); ErrorMessage = ""; string timestamp = GetCurrentTimestamp(); //string signature = GetSignature(BaseUrl, "POST", timestamp); string CORRELATION_ID = Guid.NewGuid().ToString(); ErrorMessage = ""; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("https://marketplace.walmartapis.com/v3/token"); myRequest.Method = "POST";// "GET"; //GET,POST myRequest.Accept = "application/json"; myRequest.ContentType = "application/x-www-form-urlencoded"; //myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; //myRequest.Headers["Accept"]= "application/json"; myRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace"); // myRequest.Headers.Add("WM_CONSUMER.ID", ConsumerId); string au = Base64En(ClientID+":"+ClientSecret); myRequest.Headers.Add("Authorization", "Basic " + au); //myRequest.Headers.Add("WM_SEC.ACCESS_TOKEN", PrivateKey); myRequest.Headers.Add("WM_QOS.CORRELATION_ID", CORRELATION_ID); // myRequest.Headers.Add("ContentType", "application/x-www-form-urlencoded"); // myRequest.Headers.Add("Accept", "application/xml"); // myRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", ChannelType); myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存 myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存 myRequest.Timeout = 3 * 60 * 1000; myRequest.ProtocolVersion = HttpVersion.Version11; 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(); } //获得接口返回值 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(); JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); WToken wmd = JsonConvert.Deserialize(content); if (wmd != null) { ACCESS_TOKEN=wmd.access_token; if(wmd.expires_in!=null) GetTokenTime = DateTime.Now.AddSeconds(wmd.expires_in.Value); UpdateShopToken(GetTokenTime.Value); } return ""; } catch (WebException ex) { ErrorMessage = ex.Message; //ErrorFollow.TraceWrite("GetWalmartOrderList", "", ex.Message); return ""; } } #endregion #region 订单发货 public int WalmartOrderPost(string orderid, string postmessage, out string ErrorMessage) { try { //GetToken(out ErrorMessage); // string json =File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "yy.txt"); // // var m2 = jsonconvert.Deserialize(json); // int a = 0; JavaScriptSerializer jsonconvert = new JavaScriptSerializer(); string Url = "https://marketplace.walmartapis.com/v3/orders/" + orderid.Trim() + "/shipping";// "https://marketplace.walmartapis.com/v3/feeds?&limit=10&offset=0";// "https://api-gateway.walmart.com/v3/feeds"; string BaseUrl = Url;// "https://marketplace.walmartapis.com/v3/orders/"; JavaScriptSerializer JsonConvert = new JavaScriptSerializer(); // WalmartOrderSure md = new WalmartOrderSure(); // md.purchaseOrderId = orderid; //string postmessage = JsonConvert.Serialize(md); //UTF8Encoding encoding = new UTF8Encoding(); byte[] data = Encoding.UTF8.GetBytes(postmessage); string jsonContent = GetWalmartOrderList3(BaseUrl, "POST", data, Url, out ErrorMessage); return 1; } catch (Exception ex) { ErrorMessage = ex.Message; ErrorFollow.TraceWrite("GetWalmartOrderSure", "", ex.Message); return 0; } } #endregion #region 修改tocken public void UpdateShopToken(DateTime AccessTokenUpdateTime) { string tsql = @" Update [JC_Shop] set [AccessToken]=@AccessToken,[AccessTokenUpdateTime]=@AccessTokenUpdateTime where ShopId=@ShopId "; Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetSqlStringCommand(tsql); db.AddInParameter(cmd, "@ShopId", DbType.Int32, ShopId); db.AddInParameter(cmd, "@AccessToken", DbType.String, ACCESS_TOKEN); db.AddInParameter(cmd, "@AccessTokenUpdateTime", DbType.String, AccessTokenUpdateTime); db.ExecuteNonQuery(cmd); } #endregion } // "order": { // "purchaseOrderId": "1577584045841", // "customerOrderId": "2751700075054", // "customerEmailId": "mgr@walmartlabs.com", // "orderDate": 1483552509000, // "shippingInfo": { // "phone": "6502248603", // "estimatedDeliveryDate": 1484636400000, // "estimatedShipDate": 1484204400000, // "methodCode": "Standard", // "postalAddress": { // "name": "Madhukara PGOMS", // "address1": "860 W Cal Ave", // "address2": "Seat # 860C.2.176", // "city": "Sunnyvale", // "state": "CA", // "postalCode": "94086", // "country": "USA", // "addressType": "RESIDENTIAL" // } // }, // "orderLines": { // "orderLine": [ // { // "lineNumber": "1", // "item": { // "productName": "Ocean Spray Cran-Cherry Juice Drink, 64 oz", // "sku": "FOOD_AND_BEVERAGE_LIMO_008" // }, // "charges": { // "charge": [ // { // "chargeType": "PRODUCT", // "chargeName": "ItemPrice", // "chargeAmount": { // "currency": "USD", // "amount": 12 // }, // "tax": { // "taxName": "Tax1", // "taxAmount": { // "currency": "USD", // "amount": 1.03 // } // } // }, // { // "chargeType": "SHIPPING", // "chargeName": "Shipping", // "chargeAmount": { // "currency": "USD", // "amount": 3 // }, // "tax": { // "taxName": "Tax2", // "taxAmount": { // "currency": "USD", // "amount": 0.24 // } // } // } // ] // }, // "orderLineQuantity": { // "unitOfMeasurement": "EACH", // "amount": "1" // }, // "statusDate": 1486407115000, // "orderLineStatuses": { // "orderLineStatus": [ // { // "status": "Shipped", // "statusQuantity": { // "unitOfMeasurement": "EACH", // "amount": "1" // }, // "cancellationReason": null, // "trackingInfo": { // "shipDateTime": 1485973673000, // "carrierName": { // "otherCarrier": null, // "carrier": "FedEx" // }, // "methodCode": "Standard", // "trackingNumber": "12333635111", // "trackingURL": "http://walmart.narvar.com/walmart/tracking/Fedex?&type=MP&seller_id=801&promise_date=01/17/2017&dzip=94086&tracking_numbers=12333635111" // } // } // ] // }, // "refund": { // "refundId": null, // "refundComments": null, // "refundCharges": { // "refundCharge": [ // { // "refundReason": "TaxExemptCustomer", // "charge": { // "chargeType": "PRODUCT", // "chargeName": "Tax Exempt", // "chargeAmount": { // "currency": "USD", // "amount": -0.1 // }, // "tax": null // } // }, // { // "refundReason": "TaxExemptCustomer", // "charge": { // "chargeType": "SHIPPING", // "chargeName": "Tax Exempt", // "chargeAmount": { // "currency": "USD", // "amount": -0.11 // }, // "tax": null // } // } // ] // } // } // } // ] // } // } //} public class WToken { public string access_token { get; set; } public Int32? expires_in { get; set; } } public class WalmartList { public Walmartmeta list { get; set; } } public class Walmartmeta { public WalmartCount meta { get; set; } public Walmartelements elements { get; set; } } public class WalmartCount { public Int32? totalCount { get; set; } public Int32? limit { get; set; } public string nextCursor { get; set; } } public class Walmartelements { public List order { get; set; } } #region 订单明细 public class WalmartOrderSure { public string purchaseOrderId { get; set; } } public class WalmartOrder { public string purchaseOrderId { get; set; } public string customerOrderId { get; set; } public string customerEmailId { get; set; } public string orderDate { get; set; } public WalmartshippingInfo shippingInfo { get; set; } public WalmartorderLine orderLines { get; set; } } public class WalmartshippingInfo { public string phone { get; set; } public string estimatedDeliveryDate { get; set; } public string estimatedShipDate { get; set; } public string methodCode { get; set; } public WalmartpostalAddress postalAddress { get; set; } } #endregion public class WalmartpostalAddress { public string name { get; set; } public string address1 { get; set; } public string address2 { get; set; } public string city { get; set; } public string state { get; set; } public string postalCode { get; set; } public string country { get; set; } public string addressType { get; set; } } public class WalmartorderLine { public List orderLine { get; set; } } public class WalmartorderLineList { public string lineNumber { get; set; } public Walmartitem item { get; set; } public Walmartcharges charges { get; set; } public WalmartorderLineQuantity orderLineQuantity { get; set; } public string statusDate { get; set; } public orderLineStatuses orderLineStatuses { get; set; } public Walmartfulfillment fulfillment { get; set; } } public class Walmartfulfillment { public string fulfillmentOption { get; set; } public string pickUpDateTime { get; set; } public string shipMethod { get; set; } public string offerId { get; set; } public string pickUpBy { get; set; } } public class Walmartitem { public string productName { get; set; } public string sku { get; set; } } public class Walmartcharges { public List charge { get; set; } } public class WalmartchargesList { public string chargeType { get; set; } public string chargeName { get; set; } public WalmartchargeAmount chargeAmount { get; set; } public Walmarttax tax { get; set; } } public class Walmartcharge { public string chargeType { get; set; } public string chargeName { get; set; } public WalmartchargeAmount chargeAmount { get; set; } public Walmarttax tax { get; set; } } public class WalmartchargeAmount { public string currency { get; set; } public Decimal? amount { get; set; } } public class Walmarttax { public string taxName { get; set; } public WalmartchargeAmount taxAmount { get; set; } } public class WalmartorderLineQuantity { public string unitOfMeasurement { get; set; } public Decimal? amount { get; set; } } public class orderLineStatuses { public List orderLineStatus { get; set; } } public class orderLineStatusList { public string status { get; set; } public statusQuantity statusQuantity { get; set; } public string cancellationReason { get; set; } public WalmarttrackingInfo trackingInfo { get; set; } public string methodCode { get; set; } public string trackingNumber { get; set; } public string trackingURL { get; set; } } public class WalmarttrackingInfo { public string shipDateTime { get; set; } public WalmartcarrierName carrierName { get; set; } } public class WalmartcarrierName { public string otherCarrier { get; set; } public string carrier { get; set; } } public class statusQuantity { public string unitOfMeasurement { get; set; } public Decimal? amount { get; set; } } public class FHorderShipment { public FHorderLines orderShipment { get; set; } } public class FHorderLines { public FHorderLines2 orderLines { get; set; } } public class FHorderLines2 { public List orderLine { get; set; } } public class FHorderLine { public string lineNumber { get; set; } public FHorderLineStatus2 orderLineStatuses { get; set; } } public class FHorderLineStatus2 { public List orderLineStatus { get; set; } } public class FHorderLineStatus { public string status { get; set; } public FHstatusQuantity statusQuantity { get; set; } public trackingInfo trackingInfo { get; set; } } public class FHstatusQuantity { public string unitOfMeasurement { get; set; } public string amount { get; set; } } public class trackingInfo { public string shipDateTime { get; set; } public fhcarrierName carrierName { get; set; } public string methodCode { get; set; } public string trackingNumber { get; set; } public string trackingURL { get; set; } } public class fhcarrierName { public string otherCarrier { get; set; } public string carrier { get; set; } } // "statusQuantity": { // "unitOfMeasurement": "EACH", // "amount": "1" // }, // "statusDate": 1486407115000, }