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.

595 lines
26 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using NetLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using NetLibrary.Data;
using System.Data.Common;
using System.Data;
namespace NetLibrary.OnlineTrade
{
public class WishApi
{
public string client_id { get; set; }
public string client_secret { get; set; }
public string code { get; set; }
public string grant_type { get; set; }
public string redirect_uri { get; set; }
public Int32 ShopId { get; set; }
public string DeveKey { get; set; }
public string RefreshToken { get; set; }
public string AccessToken { get; set; }
public DateTime? AccessTokenUpdateTime { get; set; }
public DateTime? RefreshTokenSaveTime { get; set; }
JavaScriptSerializer JsonConvert = null;
public WishApi()
{
//验证服务器证书回调自动验证
ServicePointManager.ServerCertificateValidationCallback += ValidateServerCertificate;
JsonConvert = new JavaScriptSerializer();
}
private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
public List<OrderModel> GetOrders(string Token, out string ErrorMessage)
{
ErrorMessage = "";
string URL = "https://merchant.wish.com/api/v1/order/get-fulfill?start=0&limit=50&key=" + Token;
string ErrMessage = "";
string XmlContent = CustomIO.HttpRequest2(URL, "GET", "text/html", null, System.Net.HttpVersion.Version10, null, out ErrMessage);
if (string.IsNullOrEmpty(ErrMessage) == false)
{
ErrorMessage = ErrMessage;
return null;
}
WishOrderResult Model = JsonConvert.Deserialize<WishOrderResult>(XmlContent);
if (string.IsNullOrEmpty(Model.message) == false)
{
ErrorMessage = Model.message;
return null;
}
List<OrderModel> ListModel = new List<OrderModel>();
foreach (var item in Model.data)
{
OrderModel model = item.Order.ToOrderModel();
ListModel.Add(model);
}
if (Model.paging != null && string.IsNullOrEmpty(Model.paging.next) == false)
{
while (true)
{
XmlContent = CustomIO.HttpRequest(Model.paging.next, "POST", out ErrMessage);
if (string.IsNullOrEmpty(ErrMessage) == false)
{
ErrorMessage = ErrMessage;
return null;
}
Model = JsonConvert.Deserialize<WishOrderResult>(XmlContent);
if (string.IsNullOrEmpty(Model.message) == false)
{
ErrorMessage = Model.message;
return null;
}
foreach (var item in Model.data)
{
OrderModel model = item.Order.ToOrderModel();
ListModel.Add(model);
}
if (Model.data == null || Model.paging == null || Model.data.Count < 50) break;
}
}
return ListModel;
}
public List<OrderModel> GetOrdersNew(out string ErrorMessage)
{
//if (RefreshToken == null || RefreshToken == "")
//{
// GetToken(out ErrorMessage);
//}
//else
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddDays(-29))
{
GetReshToken(out ErrorMessage);
}
ErrorMessage = "";
string URL = "https://merchant.wish.com/api/v2/order/get-fulfill?access_token=" + AccessToken + "&start=0&count=50";
string ErrMessage = "";
string XmlContent = CustomIO.HttpRequest2(URL, "GET", "text/html", null, System.Net.HttpVersion.Version10, null, out ErrMessage);
if (string.IsNullOrEmpty(ErrMessage) == false)
{
ErrorMessage = ErrMessage;
return null;
}
WishOrderResult Model = JsonConvert.Deserialize<WishOrderResult>(XmlContent);
if (string.IsNullOrEmpty(Model.message) == false)
{
ErrorMessage = Model.message;
return null;
}
List<OrderModel> ListModel = new List<OrderModel>();
foreach (var item in Model.data)
{
OrderModel model = item.Order.ToOrderModel();
ListModel.Add(model);
}
if (Model.paging != null && string.IsNullOrEmpty(Model.paging.next) == false)
{
while (true)
{
XmlContent = CustomIO.HttpRequest(Model.paging.next, "POST", out ErrMessage);
if (string.IsNullOrEmpty(ErrMessage) == false)
{
ErrorMessage = ErrMessage;
return null;
}
Model = JsonConvert.Deserialize<WishOrderResult>(XmlContent);
if (string.IsNullOrEmpty(Model.message) == false)
{
ErrorMessage = Model.message;
return null;
}
foreach (var item in Model.data)
{
OrderModel model = item.Order.ToOrderModel();
ListModel.Add(model);
}
if (Model.data == null || Model.paging == null || Model.data.Count < 50) break;
}
}
return ListModel;
}
public bool UpTrackTOWish(string key, string orderno, string ysfs, string trackno, string ship_note)
{
try
{
//string key = "";
// var checkkey = cl.Where(o => o.group == group);
// if (checkkey.Count() == 0) return false;
// key = checkkey.First().key;
string result = GetBack(key, orderno, ysfs, trackno, ship_note);
if (result.Contains("success"))
return true;
else return false;
}
catch
{
return false;
}
}
private string GetBack(string key, string orderno, string ysfs, string trackno, string ship_note)
{
string URL = "";
if (ship_note == "")
{
URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
}
else URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key + "&ship_note=" + ship_note;
//string URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "text/html";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
request.Headers.Add("Accept-Language: zh-CN");
request.Headers["Pragma"] = "no-cache"; //禁用缓存
request.Headers["Cache-Control"] = "no-cache"; //禁用缓存
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string josn = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
response.Close();
return josn;
}
public string ModifyTrackTOWish2(string key, string orderno, string ysfs, string trackno, string ship_note)
{
try
{
// string key = "";
//var checkkey = cl.Where(o => o.group == group);
// if (checkkey.Count() == 0) return false;
// key = checkkey.First().key;
if (ysfs == "DeYou")
ysfs = "DHL";
if (ysfs == "China Post Air Mail")
ysfs = "ChinaAirPost";
if (ysfs == "EUB")
ysfs = "EPacket";
if (ysfs == "SF Express")
ysfs = "SFExpress";
string result = GetModifyBackNew(key, orderno, ysfs, trackno, ship_note);
if (result.Contains("success"))
return "OK";
else return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
public bool ModifyTrackTOWish(string key, string orderno, string ysfs, string trackno, string ship_note)
{
try
{
// string key = "";
//var checkkey = cl.Where(o => o.group == group);
// if (checkkey.Count() == 0) return false;
// key = checkkey.First().key;
if (ysfs == "DeYou")
ysfs = "DHL";
if (ysfs == "China Post Air Mail")
ysfs = "ChinaAirPost";
if (ysfs == "EUB")
ysfs = "EPacket";
if (ysfs == "SF Express")
ysfs = "SFExpress";
string result = GetModifyBack(key, orderno, ysfs, trackno, ship_note);
if (result.Contains("success"))
return true;
else return false;
}
catch (Exception ex)
{
return false;
}
}
private string GetModifyBack(string key, string orderno, string ysfs, string trackno, string ship_note)
{
string URL = "";
if (ship_note == "")
{
URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
}
else URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key + "&ship_note=" + ship_note;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "text/html";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
request.Headers.Add("Accept-Language: zh-CN");
request.Headers["Pragma"] = "no-cache"; //禁用缓存
request.Headers["Cache-Control"] = "no-cache"; //禁用缓存
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string josn = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
response.Close();
return josn;
}
private string GetModifyBackNew(string access_token, string orderno, string ysfs, string trackno, string ship_note)
{
string URL = "";
//if (ship_note == "")
//{
// URL = "https://china-merchant.wish.com/api/v2/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&origin_country_code=CN&access_token=" + access_token;
//}
//else URL = "https://china-merchant.wish.com/api/v2/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&origin_country_code=CN&key=" + access_token + "&ship_note=" + ship_note;
if (ship_note == "")
{
URL = "https://merchant.wish.com/api/v2/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&origin_country_code=CN&access_token=" + access_token;
}
else URL = "https://merchant.wish.com/api/v2/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&origin_country_code=CN&key=" + access_token + "&ship_note=" + ship_note;
string ErrMessage = "";
string XmlContent = CustomIO.HttpRequest2(URL, "Post", null, null, System.Net.HttpVersion.Version10, null, out ErrMessage);
if (ErrMessage != "") return ErrMessage;
return XmlContent;
}
private string GetModify(string key, string orderno, string ysfs, string trackno, string ship_note)
{
string URL = "";
if (ship_note == "")
{
URL = "https://merchant.wish.com/api/v1/order/modify-tracking?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
}
else URL = "https://merchant.wish.com/api/v1/order/modify-tracking?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key + "&ship_note=" + ship_note;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "text/html";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
request.Headers.Add("Accept-Language: zh-CN");
request.Headers["Pragma"] = "no-cache"; //禁用缓存
request.Headers["Cache-Control"] = "no-cache"; //禁用缓存
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string josn = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
response.Close();
return josn;
}
public string GetOneOrder(string key, string orderno)
{
string URL = "https://merchant.wish.com/api/v1/order?" + "id=" + orderno + "&key=" + key;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "text/html";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
request.Headers.Add("Accept-Language: zh-CN");
request.Headers["Pragma"] = "no-cache"; //禁用缓存
request.Headers["Cache-Control"] = "no-cache"; //禁用缓存
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string josn = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
response.Close();
return josn;
}
//private string GetBack(string key, string orderno, string ysfs, string trackno, string ship_note)
//{
// string URL = "";
// if (ship_note == "")
// {
// URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
// }
// else URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key + "&ship_note=" + ship_note;
// //string URL = "https://merchant.wish.com/api/v1/order/fulfill-one?tracking_provider=" + ysfs + "&tracking_number=" + trackno + "&id=" + orderno + "&key=" + key;
// HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
// request.Method = "POST";
// request.ContentType = "text/html";
// request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
// request.Headers.Add("Accept-Language: zh-CN");
// request.Headers["Pragma"] = "no-cache"; //禁用缓存
// request.Headers["Cache-Control"] = "no-cache"; //禁用缓存
// HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Stream myResponseStream = response.GetResponseStream();
// StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
// string josn = myStreamReader.ReadToEnd();
// myStreamReader.Close();
// myResponseStream.Close();
// response.Close();
// return josn;
//}
#region 当长时令牌超过25天那么重新请求
public string GetToken(out string ErrorMessage)
{
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("client_id", client_id);
paramDic.Add("client_secret", client_secret);
paramDic.Add("code", code);
paramDic.Add("grant_type", grant_type);
paramDic.Add("redirect_uri", redirect_uri);
string URL = "https://merchant.wish.com/api/v2/oauth/access_token?client_id=" + client_id + "&client_secret=" + client_secret + "&code=" + code + "&grant_type=" + grant_type + "&redirect_uri=" + redirect_uri;
//URL += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return ErrorMessage;
//RequestNum++;
WishOrderResult2 Model = JsonConvert.Deserialize<WishOrderResult2>(XmlContent);
if (Model.code == 0)
{
AccessToken = Model.data.access_token;
RefreshToken = Model.data.refresh_token;
RefreshTokenSaveTime = DateTime.Now;
AccessTokenUpdateTime = DateTime.Now;
UpdateShopToken();
return Model.data.access_token;
}
else
{
ErrorMessage = Model.message;
}
// RefreshToken = matchtemp1.Groups[1].Value;
// RefreshTokenSaveTime = DateTime.Now;
// AccessTokenUpdateTime = DateTime.Now;
return ErrorMessage;
}
#endregion
#region 当长时令牌超过25天那么重新请求
public void GetReshToken(out string ErrorMessage)
{
string URL = "https://merchant.wish.com/api/v2/oauth/refresh_token?client_id=" + client_id + "&client_secret=" + client_secret + "&refresh_token=" + RefreshToken + "&grant_type=refresh_token";
//URL += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
WishOrderResult2 Model = JsonConvert.Deserialize<WishOrderResult2>(XmlContent);
if (Model.code == 0)
{
AccessToken = Model.data.access_token;
RefreshToken = Model.data.refresh_token;
RefreshTokenSaveTime = DateTime.Now;
AccessTokenUpdateTime = DateTime.Now;
UpdateShopToken();
}
else
{
ErrorMessage = Model.message;
}
}
#endregion
#region 修改tocken
public void UpdateShopToken()
{
string tsql = @"
Update [JC_Shop] set [RefreshToken]=@RefreshToken,[AccessToken]=@AccessToken,[RefreshTokenSaveTime]=@RefreshTokenSaveTime,[AccessTokenUpdateTime]=@AccessTokenUpdateTime,ReUrl=@ReUrl where ShopId=@ShopId
";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@ShopId", DbType.Int32, ShopId);
db.AddInParameter(cmd, "@RefreshToken", DbType.String, RefreshToken);
db.AddInParameter(cmd, "@AccessToken", DbType.String, AccessToken);
db.AddInParameter(cmd, "@RefreshTokenSaveTime", DbType.DateTime, RefreshTokenSaveTime);
db.AddInParameter(cmd, "@AccessTokenUpdateTime", DbType.DateTime, AccessTokenUpdateTime);
db.AddInParameter(cmd, "@ReUrl", DbType.String, redirect_uri);
db.ExecuteNonQuery(cmd);
}
#endregion
}
public class WishOrderResult2
{
public string message { get; set; }
public int code { get; set; }
public WishOrder2 data { get; set; }
}
public class WishOrder2
{
public string access_token { get; set; }
public string refresh_token { get; set; }
public int expires_in { get; set; }
public int expiry_time { get; set; }
}
public class WishOrderResult
{
public string message { get; set; }
public int code { get; set; }
public List<WishOrder> data { get; set; }
public WishPaging paging { get; set; }
}
public class WishOrder
{
public WishOrder_Order Order { get; set; }
}
public class WishOrder_Order
{
public string sku { get; set; }
public string buyer_id { get; set; }
public string last_updated { get; set; }
public string product_id { get; set; }
public string order_time { get; set; }
public string quantity { get; set; }
public string color { get; set; }
public string price { get; set; }
public string shipping_cost { get; set; }
public string shipping { get; set; }
public WishOrder_ShippingDetail ShippingDetail { get; set; }
public string order_id { get; set; }
public string state { get; set; }
public string cost { get; set; }
public string variant_id { get; set; }
public string order_total { get; set; }
public string days_to_fulfill { get; set; }
public string product_image_url { get; set; }
public string product_name { get; set; }
public string transaction_id { get; set; }
public string size { get; set; }
public DateTime? GetDateTime(string dt)
{
if (string.IsNullOrEmpty(dt) == true) return null;
dt = dt.Replace("T", " ");
dt = dt.Remove(dt.Length - 1);
return Convert.ToDateTime(dt);
}
#region 转换成统一的订单对象
public OrderModel ToOrderModel()
{
OrderModel model = new OrderModel();
model.OrderCode = this.order_id;
model.TotalPrice = Convert.ToDecimal(this.order_total);
model.MoneyCode = null;
model.OrderDate = this.GetDateTime(this.order_time);
model.BuyerID = this.buyer_id;
model.BuyerName = this.ShippingDetail.name;
model.BuyerCountry = this.ShippingDetail.country;
model.BuyerAddr = this.ShippingDetail.street_address1;
if (this.ShippingDetail.street_address2 != null && this.ShippingDetail.street_address2 != "")
model.BuyerAddr += " " + this.ShippingDetail.street_address2;
model.BuyerPhone = this.ShippingDetail.phone_number;
model.BuyerMobile = "";
model.BuyerMail = "";
model.BuyerFax = "";
model.BuyerZip = this.ShippingDetail.zipcode;
model.BuyerProvince = this.ShippingDetail.state;
model.BuyerCity = this.ShippingDetail.city;
model.BuyerArea = "";
model.OrderRemark = ""; //memo
model.LeaveWord = "";
model.PayDate = this.GetDateTime(this.last_updated);
model.OutOrderDate = null;
model.ListModel = new List<OrderDetailModel>();
OrderDetailModel model2 = new OrderDetailModel();
model2.GoodsNum = Convert.ToInt32(this.quantity);
model2.GoodsPrice = Convert.ToDecimal(this.price);
model2.MoneyCode = null;
model2.GoodsName = this.product_name;
model2.GoodsSKU = this.sku;
model2.PostInfo = ""; //快递信息
model.ListModel.Add(model2);
return model;
}
#endregion
}
public class WishOrder_ShippingDetail
{
public string phone_number { get; set; }
public string city { get; set; }
public string state { get; set; }
public string name { get; set; }
public string country { get; set; }
public string zipcode { get; set; }
public string street_address1 { get; set; }
public string street_address2 { get; set; }
}
public class WishPaging
{
public string next { get; set; }
}
}