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.

3812 lines
173 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.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
using System.Net;
using System.IO;
using NetLibrary.Data;
using System.Data.Common;
using System.Data;
using NetLibrary.Log;
namespace NetLibrary.OnlineTrade
{
public class AlibabaApi
{
public string Url = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.findOrderListQuery/";
public string Appkey { 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; }
public string GroupName { get; set; }
public string Code { get; set; }
public int RequestNum = 0;
public int Num = 0;
JavaScriptSerializer JsonConvert = null;
public AlibabaApi()
{
JsonConvert = new JavaScriptSerializer();
this.Appkey = "4777502";
this.DeveKey = "QQEkGZe0G93";
}
#region 签名函数
public string Sign(string urlPath, Dictionary<string, string> paramDic, string devekey)
{
byte[] signatureKey = Encoding.UTF8.GetBytes(devekey);
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + kv.Value);
}
list.Sort();
string tmp = urlPath;
foreach (string kvstr in list)
{
tmp = tmp + kvstr;
}
//HMAC-SHA1
HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
byte[] hash = hmacsha1.Hash;
//TO HEX
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
#endregion
#region 授权签名_不使用
string GetSignName()
{
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("grant_type", "refresh_token");
paramDic.Add("client_id", Appkey);
paramDic.Add("client_secret", DeveKey);
paramDic.Add("refresh_token", RefreshToken);
string rUrl = "https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/refreshToken/" + Appkey + "?";
string signature = Sign("param2/1/system.oauth2/refreshToken/" + Appkey, paramDic, DeveKey);
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + "=" + kv.Value);
}
list.Sort();
foreach (string kvstr in list)
{
rUrl = rUrl + kvstr + "&";
}
rUrl = rUrl + "_aop_signature=" + signature;
return rUrl;
}
#endregion
#region 获取权限令牌_不使用
string GetAccessToken()
{
string AccessToken = "";
string signatureUrl = GetSignName();
signatureUrl = "https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/refreshToken/4777502?client_id=4777502&client_secret=QQEkGZe0G93&grant_type=refresh_token&refresh_token=55cd0af4-0a2e-482e-85fc-f660bf95825e&_aop_signature=4BDE5E758525958BC95C447BB3DD459F1E8EBF7C";
string ErrorMessage = "";
string XmlContent = CustomIO.HttpRequest(signatureUrl, "POST", out ErrorMessage);
RequestNum++;
Regex re = new Regex(@"""access_token"":""(?'1'[^""]+)""");
Match matchtemp = re.Match(XmlContent);
AccessToken = matchtemp.Groups[1].ToString();
return AccessToken;
}
#endregion
#region 返回速卖通首次开通API调用首次用户授权Url
public string GetAuthUrl()
{
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("client_id", Appkey);
paramDic.Add("site", "aliexpress");
//redirect_uri: 用户完成授权之后,回跳到第三方的地址
paramDic.Add("redirect_uri", "http://gw.api.alibaba.com/auth/authCode.htm");
string redirect_uri = "http://gw.api.alibaba.com/auth/authCode.htm";
//state可选app自定义参数回跳到redirect_uri时会原样返回
//paramDic.Add("state", "aliexpress");
//string url = "http://gw.api.alibaba.com/auth/authorize.htm?";
//API api = new API();
string signature = sign(paramDic, DeveKey);
string url = "http://authhz.alibaba.com/auth/authorize.htm?client_id=" + Appkey + "&site=aliexpress&redirect_uri=" + redirect_uri + "&_aop_signature=" + signature;
//List<string> list = new List<string>();
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// list.Add(kv.Key + "=" + kv.Value);
//}
//list.Sort();
//foreach (string kvstr in list)
//{
// url = url + kvstr + "&";
//}
//url = url + "_aop_signature=" + signature;
return url;
}
#endregion
#region 返回速卖通首次开通API调用首次用户授权Url
public string GetAuthUrl2()
{
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("client_id", Appkey);
paramDic.Add("site", "aliexpress");
//redirect_uri: 用户完成授权之后,回跳到第三方的地址
// paramDic.Add("redirect_uri", "http://gw.api.alibaba.com/auth/authCode.htm");
// string redirect_uri = "http://gw.api.alibaba.com/auth/authCode.htm";
paramDic.Add("redirect_uri", "https://www.baidu.com");
string redirect_uri = "https://www.baidu.com";
//state可选app自定义参数回跳到redirect_uri时会原样返回
//paramDic.Add("state", "aliexpress");
//string url = "http://gw.api.alibaba.com/auth/authorize.htm?";
//API api = new API();
string signature = sign(paramDic, DeveKey);
string url = "http://authhz.alibaba.com/auth/authorize.htm?client_id=" + Appkey + "&site=aliexpress&redirect_uri=" + redirect_uri + "&_aop_signature=" + signature;
//List<string> list = new List<string>();
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// list.Add(kv.Key + "=" + kv.Value);
//}
//list.Sort();
//foreach (string kvstr in list)
//{
// url = url + kvstr + "&";
//}
//url = url + "_aop_signature=" + signature;
return url;
}
#endregion
private string sign(Dictionary<string, string> paramDic, string appSecret)
{
byte[] signatureKey = Encoding.UTF8.GetBytes(appSecret);
//第一步拼装key+value
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + kv.Value);
}
//第二步:排序
list.Sort();
//第三步:拼装排序后的各个字符串
string tmp = "";
foreach (string kvstr in list)
{
tmp = tmp + kvstr;
}
//第四步将拼装后的字符串和app密钥一起计算签名
//HMAC-SHA1
HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
byte[] hash = hmacsha1.Hash;
//TO HEX
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
private string sign2(string urlPath, Dictionary<string, string> paramDic)
{
byte[] signatureKey = Encoding.UTF8.GetBytes(DeveKey);//此处用自己的签名密钥
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + kv.Value);
}
list.Sort();
string tmp = urlPath;
foreach (string kvstr in list)
{
tmp = tmp + kvstr;
}
//HMAC-SHA1
HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
/*
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(urlPath));
foreach (string kvstr in list)
{
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(kvstr));
}
*/
byte[] hash = hmacsha1.Hash;
//TO HEX
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
private string sign3(string urlPath, Dictionary<string, string> paramDic)
{
byte[] signatureKey = Encoding.UTF8.GetBytes("YOURSIGNATRUEKEY");//此处用自己的签名密钥
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + kv.Value);
}
list.Sort();
string tmp = urlPath;
foreach (string kvstr in list)
{
tmp = tmp + kvstr;
}
//HMAC-SHA1
HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
/*
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(urlPath));
foreach (string kvstr in list)
{
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(kvstr));
}
*/
byte[] hash = hmacsha1.Hash;
//TO HEX
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
#region 获取零时和长时令牌
public void GetAllToken(out string ErrorMessage)
{
//string URL = "https://gw.api.alibaba.com/openapi/http/1/system.oauth2/getToken/YOUR_APPKEY?grant_type=authorization_code&need_refresh_token=true&client_id= YOUR_APPKEY&client_secret= YOUR_APPSECRET&redirect_uri=YOUR_REDIRECT_URI&code=CODE
string URL = "https://gw.api.alibaba.com/openapi/http/1/system.oauth2/getToken/" + Appkey + "?grant_type=authorization_code&need_refresh_token=true&client_id=" + Appkey + "&client_secret=" + DeveKey + "&redirect_uri=http://121.43.228.63/&code=" + Code;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
RequestNum++;
Regex re = new Regex(@"""access_token"":""(?'1'[^""]+)""");
Match matchtemp = re.Match(XmlContent);
Regex re1 = new Regex(@"""refresh_token"":""(?'1'[^""]+)""");
Match matchtemp1 = re1.Match(XmlContent);
AccessToken = matchtemp.Groups[1].Value;
RefreshToken = matchtemp1.Groups[1].Value;
RefreshTokenSaveTime = DateTime.Now;
AccessTokenUpdateTime = DateTime.Now;
}
#endregion
#region 当长时令牌超过25天那么重新请求
public void GetRefreshToken(out string ErrorMessage)
{
//ErrorMessage = "";
RefreshTokenSaveTime = DateTime.Now;
// return;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("client_id", Appkey);
paramDic.Add("client_secret", DeveKey);
paramDic.Add("refresh_token", RefreshToken);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/system.oauth2/postponeToken/" + Appkey;
string signature = sign(paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/postponeToken/" + Appkey + "?client_id=" + Appkey + "&client_secret=" + DeveKey + "&refresh_token=" + RefreshToken + "&access_token=" + AccessToken;
//URL += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
RequestNum++;
Regex re = new Regex(@"""access_token"":""(?'1'[^""]+)""");
Match matchtemp = re.Match(XmlContent);
Regex re1 = new Regex(@"""refresh_token"":""(?'1'[^""]+)""");
Match matchtemp1 = re1.Match(XmlContent);
AccessToken = matchtemp.Groups[1].Value;
RefreshToken = matchtemp1.Groups[1].Value;
RefreshTokenSaveTime = DateTime.Now;
AccessTokenUpdateTime = DateTime.Now;
UpdateShopToken();
}
#endregion
#region 当访问令牌超过10小时那么重新请求
public void GetAccessToken2(out string ErrorMessage)
{
// ErrorMessage = "";
//return;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/getToken/" + Appkey + "?grant_type=refresh_token&client_id=" + Appkey + "&client_secret=" + DeveKey + "&refresh_token=" + RefreshToken;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
RequestNum++;
Regex re = new Regex(@"""access_token"":""(?'1'[^""]+)""");
Match matchtemp = re.Match(XmlContent);
AccessToken = matchtemp.Groups[1].Value;
AccessTokenUpdateTime = DateTime.Now;
UpdateShopToken();
}
#endregion
#region 当访问令牌超过10小时那么重新请求
public void GetAccessToken21(out string ErrorMessage)
{
// ErrorMessage = "";
//return;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/getToken/" + Appkey + "?grant_type=refresh_token&client_id=" + Appkey + "&client_secret=" + DeveKey + "&refresh_token=" + RefreshToken;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
RequestNum++;
Regex re = new Regex(@"""access_token"":""(?'1'[^""]+)""");
Match matchtemp = re.Match(XmlContent);
AccessToken = matchtemp.Groups[1].Value;
AccessTokenUpdateTime = DateTime.Now;
UpdateShopToken();
UpdateShopToken3();
}
#endregion
#region 得到待发货订单
public List<OrderModel> GetWaitGoods(DateTime? StartTime, DateTime? StopTime, bool IsReadMsg, List<Alibaba_OrderCode> OList, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-5))
{
GetRefreshToken(out ErrorMessage);
}
if (RefreshTokenSaveTime.Value.AddDays(160) < DateTime.Now)
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("page", "1");
paramDic.Add("pageSize", "50");
paramDic.Add("orderStatus", "WAIT_SELLER_SEND_GOODS");
//if (StartTime!=null)
//paramDic.Add("createDateStart", StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
// if (StopTime != null)
// paramDic.Add("createDateEnd", StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
string MethodName = "param2/1/aliexpress.open/api.findOrderListQuery/" + Appkey;
string signature = signPath(MethodName, paramDic, DeveKey);
string rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=1&pageSize=50&orderStatus=WAIT_SELLER_SEND_GOODS";
//if (StartTime != null) rUrl += "&createDateStart=" + StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
//if (StopTime != null) rUrl += "&createDateEnd=" + StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
rUrl += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
AlibabaOrder Model = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
if (Model.orderList == null) return Model.ToListOrderModel();
foreach (var item in Model.orderList)
{
if (IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
//if (string.IsNullOrEmpty(ErrorMessage) == false)
// return null;
}
item.OrderState = 1;
// item.BuyersInfo=GetBuyers(item.orderId.ToString(), out ErrorMessage);
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
GetAccessToken2(out ErrorMessage);
continue;
}
}
if (Model.totalItem < 50) return Model.ToListOrderModel();
int PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(Model.totalItem) / Convert.ToDecimal(50)));
for (int i = 1; i < PageCount; i++)
{
rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=" + (i + 1) + "&pageSize=50&orderStatus=WAIT_SELLER_SEND_GOODS";
// if (StartTime != null) rUrl += "&createDateStart=" + StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
//if (StopTime != null) rUrl += "&createDateEnd=" + StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
Dictionary<string, string> paramDic1 = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic1.Add("access_token", AccessToken);
paramDic1.Add("page", (i + 1).ToString());
paramDic1.Add("pageSize", "50");
paramDic1.Add("orderStatus", "WAIT_SELLER_SEND_GOODS");
//if (StartTime != null)
//paramDic1.Add("createDateStart", StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
//if (StopTime != null)
// paramDic1.Add("createDateEnd", StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
string signature1 = signPath(MethodName, paramDic1, DeveKey);
rUrl += "&_aop_signature=" + signature1;
XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
AlibabaOrder Model2 = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
foreach (var item in Model2.orderList)
{
//if (item.orderId == 72860947447064)
//{
// string treqq = "72860947447064";
//}
int iscz = 0; //是否已经导入过
if (OList != null)
{
var omd = OList.Find(n => n.OrderCode == item.orderId.ToString());
if (omd != null)
iscz = 1;
}
if (iscz == 0 && IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
// if (string.IsNullOrEmpty(ErrorMessage) == false)
// return null;
}
// item.BuyersInfo = GetBuyers(item.orderId.ToString(), out ErrorMessage);
if (iscz == 0)
{
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
GetAccessToken2(out ErrorMessage);
continue;
}
}
item.OrderState = 1;
Model.orderList.Add(item.Copy());
}
}
return Model.ToListOrderModel();
}
#endregion
#region 得到待发货订单
public List<OrderModel> GetWaitGoods2(DateTime? StartTime, DateTime? StopTime, bool IsReadMsg, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-5))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("page", "1");
paramDic.Add("pageSize", "50");
paramDic.Add("orderStatus", "WAIT_SELLER_SEND_GOODS");
if (StartTime != null)
paramDic.Add("createDateStart", StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
if (StopTime != null)
paramDic.Add("createDateEnd", StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
string MethodName = "param2/1/aliexpress.open/api.findOrderListQuery/" + Appkey;
string signature = signPath(MethodName, paramDic, DeveKey);
string rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=1&pageSize=50&orderStatus=WAIT_SELLER_SEND_GOODS";
if (StartTime != null) rUrl += "&createDateStart=" + StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
if (StopTime != null) rUrl += "&createDateEnd=" + StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
rUrl += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
AlibabaOrder Model = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
if (Model.orderList == null) return Model.ToListOrderModel();
foreach (var item in Model.orderList)
{
if (IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
//if (string.IsNullOrEmpty(ErrorMessage) == false)
// return null;
}
item.OrderState = 1;
// item.BuyersInfo=GetBuyers(item.orderId.ToString(), out ErrorMessage);
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
}
if (Model.totalItem < 50) return Model.ToListOrderModel();
int PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(Model.totalItem) / Convert.ToDecimal(50)));
for (int i = 1; i < PageCount; i++)
{
rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=" + (i + 1) + "&pageSize=50&orderStatus=WAIT_SELLER_SEND_GOODS";
if (StartTime != null) rUrl += "&createDateStart=" + StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
if (StopTime != null) rUrl += "&createDateEnd=" + StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss");
Dictionary<string, string> paramDic1 = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic1.Add("access_token", AccessToken);
paramDic1.Add("page", (i + 1).ToString());
paramDic1.Add("pageSize", "50");
paramDic1.Add("orderStatus", "WAIT_SELLER_SEND_GOODS");
if (StartTime != null)
paramDic1.Add("createDateStart", StartTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
if (StopTime != null)
paramDic1.Add("createDateEnd", StopTime.Value.ToString("MM/dd/yyyy HH:mm:ss"));
string signature1 = signPath(MethodName, paramDic1, DeveKey);
rUrl += "&_aop_signature=" + signature1;
XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
AlibabaOrder Model2 = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
foreach (var item in Model2.orderList)
{
if (IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
// if (string.IsNullOrEmpty(ErrorMessage) == false)
// return null;
}
// item.BuyersInfo = GetBuyers(item.orderId.ToString(), out ErrorMessage);
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
item.OrderState = 1;
Model.orderList.Add(item.Copy());
}
}
return Model.ToListOrderModel();
}
#endregion
#region 付款后24小时内的订单
public List<OrderModel> GetPayMoneyGoods(bool IsReadMsg, out string ErrorMessage)
{
//ErrorMessage = "";
//return null; //2017.2.14 改为苗朋友 不需要未到账采购
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("page", "1");
paramDic.Add("pageSize", "50");
paramDic.Add("orderStatus", "RISK_CONTROL");
string MethodName = "param2/1/aliexpress.open/api.findOrderListQuery/" + Appkey;
string signature = signPath(MethodName, paramDic, DeveKey);
string rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=1&pageSize=50&orderStatus=RISK_CONTROL";
rUrl += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
AlibabaOrder Model = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
if (Model.orderList == null) return Model.ToListOrderModel();
foreach (var item in Model.orderList)
{
if (IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
// if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
}
item.OrderState = 2;
//item.BuyersInfo = GetBuyers(item.orderId.ToString(), out ErrorMessage);
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
GetAccessToken2(out ErrorMessage);
continue;
}
}
if (Model.totalItem <= 50) return Model.ToListOrderModel();
int PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(Model.totalItem) / Convert.ToDecimal(50)));
for (int i = 1; i < PageCount; i++)
{
rUrl = Url + Appkey + "?access_token=" + AccessToken + "&page=" + (i + 1) + "&pageSize=50&orderStatus=RISK_CONTROL";
Dictionary<string, string> paramDic1 = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic1.Add("access_token", AccessToken);
paramDic1.Add("page", (i + 1).ToString());
paramDic1.Add("pageSize", "50");
paramDic1.Add("orderStatus", "RISK_CONTROL");
string signature1 = signPath(MethodName, paramDic1, DeveKey);
rUrl += "&_aop_signature=" + signature1;
XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
AlibabaOrder Model2 = JsonConvert.Deserialize<AlibabaOrder>(XmlContent);
if (Model2.orderList == null) continue;
foreach (var item in Model2.orderList)
{
if (IsReadMsg == true)
{
item.msgListNew = GetMsgData3(item.orderId.ToString(), "order_msg", out ErrorMessage);
// if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
}
// item.BuyersInfo = GetBuyers(item.orderId.ToString(), out ErrorMessage);
item.buyerInfo = GetOrderXXInfo(item.orderId.ToString(), out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
GetAccessToken2(out ErrorMessage);
continue;
}
item.OrderState = 2;
Model.orderList.Add(item.Copy());
}
}
return Model.ToListOrderModel();
}
#endregion
#region 取得收货信息
public Alibaba_Buyers GetBuyers(string orderid, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.findOrderReceiptInfo/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_Buyers Model = JsonConvert.Deserialize<Alibaba_Buyers>(XmlContent);
return Model;
}
#endregion
#region 订单详情信息
public Alibaba_OrderXXInfo GetOrderXXInfo(string orderid, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.findOrderById/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_OrderXXInfo Model = JsonConvert.Deserialize<Alibaba_OrderXXInfo>(XmlContent);
return Model;
}
#endregion
#region 订单详情信息
public string GetOrderstr(string orderid, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.findOrderById/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
ErrorMessage = "失败 " + ErrorMessage;
return null;
}
RequestNum++;
return XmlContent;
}
#endregion
#region 得到留言的数据
public List<Alibaba_MsgResult_content> GetMsgData(string orderid, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryOrderMsgList/" + this.Appkey + "?access_token=" + AccessToken + "&pageSize=50&orderId=" + orderid;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("pageSize", "50");
paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.queryOrderMsgList/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
URL += "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_MsgResult Model = JsonConvert.Deserialize<Alibaba_MsgResult>(XmlContent);
if (Model.total == 0) return null;
if (Model.msgList != null)
{
foreach (var md in Model.msgList)
{
var wmd = new DT_LeavewordAPI();
wmd.ShopId = ShopId;
wmd.isRead = md.read;
wmd.orderId = md.orderId;
wmd.wId = md.id;
wmd.wordContent = md.content;
wmd.senderName = md.senderName;
wmd.fileUrl = md.fileUrl;
wmd.receiverLoginId = md.receiverLoginId;
wmd.senderLoginId = md.senderLoginId;
wmd.typeId = md.typeId;
DateTime wordCreate = DateTime.Now;
DateTime wordCreateCN = DateTime.Now;
try
{
if (md.gmtCreate != "" && md.gmtCreate.Contains('-'))
{
string stime = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime.Substring(0, 4) + "-" + stime.Substring(4, 2) + "-" + stime.Substring(6, 2) + " " + stime.Substring(8, 2) + ":" + stime.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)) * -1);
}
else
if (md.gmtCreate != "" && md.gmtCreate.Contains('+'))
{
string stime1 = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime1.Substring(0, 4) + "-" + stime1.Substring(4, 2) + "-" + stime1.Substring(6, 2) + " " + stime1.Substring(8, 2) + ":" + stime1.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)));
}
}
catch (Exception ex)
{
}
wmd.wordCreate = wordCreate;
wmd.wordCreateCN = wordCreateCN;
wmd.indate = DateTime.Now;
SaveLeaveword(wmd);
}
}
return Model.msgList;
}
#endregion
#region 得到留言的数据
public List<Alibaba_MsgResult_content> GetMsgData2(DateTime? Sdate, DateTime? Edate, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryOrderMsgList/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
if (Sdate != null)
paramDic.Add("startTime", Sdate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
if (Edate != null)
paramDic.Add("endTime", Edate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
paramDic.Add("pageSize", "50");
// paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.queryOrderMsgList/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_MsgResult Model = JsonConvert.Deserialize<Alibaba_MsgResult>(XmlContent);
if (Model.total == 0) return null;
if (Model.msgList != null)
{
foreach (var md in Model.msgList)
{
var wmd = new DT_LeavewordAPI();
wmd.ShopId = ShopId;
wmd.isRead = md.read;
wmd.orderId = md.orderId;
wmd.wId = md.id;
wmd.wordContent = md.content;
wmd.senderName = md.senderName;
wmd.fileUrl = md.fileUrl;
wmd.receiverLoginId = md.receiverLoginId;
wmd.senderLoginId = md.senderLoginId;
wmd.typeId = md.typeId;
//wmd.CompanyId = 0;
DateTime wordCreate = DateTime.Now;
DateTime wordCreateCN = DateTime.Now;
try
{
if (md.gmtCreate != "" && md.gmtCreate.Contains('-'))
{
string stime = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime.Substring(0, 4) + "-" + stime.Substring(4, 2) + "-" + stime.Substring(6, 2) + " " + stime.Substring(8, 2) + ":" + stime.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)) * -1);
}
else
if (md.gmtCreate != "" && md.gmtCreate.Contains('+'))
{
string stime1 = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime1.Substring(0, 4) + "-" + stime1.Substring(4, 2) + "-" + stime1.Substring(6, 2) + " " + stime1.Substring(8, 2) + ":" + stime1.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)));
}
}
catch (Exception ex)
{
}
wmd.wordCreate = wordCreate;
wmd.wordCreateCN = wordCreateCN;
wmd.indate = DateTime.Now;
SaveLeaveword(wmd);
}
}
return Model.msgList;
}
#endregion
#region 得到留言的数据
/// <summary>
///
/// </summary>
/// <param name="channelId"></param>
/// <param name="msgSources">(站内信)message_center/order_msg(留言)</param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public List<Alibaba_MsgContentNew> GetMsgData3(string channelId, string msgSources, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryMsgDetailList/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("currentPage", "1");
paramDic.Add("pageSize", "20");
paramDic.Add("channelId", channelId);
paramDic.Add("msgSources", msgSources);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.queryMsgDetailList/" + Appkey;
string signature = sign2(MethodName, paramDic);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
RequestNum++;
Alibaba_MsgResultNew Model = JsonConvert.Deserialize<Alibaba_MsgResultNew>(XmlContent);
if (Model == null ||Model.result==null||Model.result.Count == 0) return null;
if (Model.result != null)
{
foreach (var md in Model.result)
{
var wmd = new DT_LeavewordAPI();
wmd.ShopId = ShopId;
// wmd.isRead = md.read;
// wmd.orderId = md.orderId;
wmd.wId = md.id;
wmd.wordContent = md.content;
wmd.senderName = md.senderName;
// wmd.fileUrl = md.fileUrl;
// wmd.receiverLoginId = md.receiverLoginId;
wmd.senderLoginId = md.senderName;
wmd.typeId = md.typeId.ToString();
//wmd.CompanyId = 0;
DateTime wordCreate = DateTime.Now;
DateTime wordCreateCN = DateTime.Now;
try
{
if (md.gmtCreate != "" && md.gmtCreate.Contains('-'))
{
string stime = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime.Substring(0, 4) + "-" + stime.Substring(4, 2) + "-" + stime.Substring(6, 2) + " " + stime.Substring(8, 2) + ":" + stime.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)) * -1);
}
else
if (md.gmtCreate != "" && md.gmtCreate.Contains('+'))
{
string stime1 = md.gmtCreate.Split('-')[0];
wordCreate = Convert.ToDateTime(stime1.Substring(0, 4) + "-" + stime1.Substring(4, 2) + "-" + stime1.Substring(6, 2) + " " + stime1.Substring(8, 2) + ":" + stime1.Substring(10, 2));
wordCreateCN = wordCreate;
wordCreate = wordCreate.AddHours(Convert.ToInt32(md.gmtCreate.Split('-')[1].Substring(0, 2)));
}
}
catch (Exception ex)
{
}
wmd.wordCreate = wordCreate;
wmd.wordCreateCN = wordCreateCN;
wmd.indate = DateTime.Now;
SaveLeaveword(wmd);
}
}
return Model.result;
}
#endregion
#region 得到留言的数据
/// <summary>
///
/// </summary>
/// <param name="channelId"></param>
/// <param name="msgSources">(站内信)message_center/order_msg(留言)</param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public string GetMsgstr(string channelId, string msgSources, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryMsgDetailList/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("currentPage", "1");
paramDic.Add("pageSize", "20");
paramDic.Add("channelId", channelId);
paramDic.Add("msgSources", msgSources);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.queryMsgDetailList/" + Appkey;
string signature = sign2(MethodName, paramDic);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
ErrorMessage = "失败 " + ErrorMessage;
return null;
}
return XmlContent;
}
#endregion
#region 更新留言的状态
public void UpdateWordState(string typeId, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.updateReadOrderMessage/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("typeId", typeId);
string MethodName = "param2/1/aliexpress.open/api.updateReadOrderMessage/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
}
#endregion
#region 得到站内信数据
public List<Alibaba_InnerMail_content> GetInnerMail(DateTime? Sdate, DateTime? Edate, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryMessageList/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
if (Sdate != null)
paramDic.Add("startTime", Sdate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
if (Edate != null)
paramDic.Add("endTime", Edate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
paramDic.Add("pageSize", "50");
// paramDic.Add("orderId", orderid);
string MethodName = "param2/1/aliexpress.open/api.queryMessageList/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_InnerMailResult Model = JsonConvert.Deserialize<Alibaba_InnerMailResult>(XmlContent);
if (Model.total == 0) return null;
return Model.msgList;
}
#endregion
#region 更新站内信的状态
public void UpdateInnerMailState(string typeId, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.updateReadMessage/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("typeId", typeId);
string MethodName = "param2/1/aliexpress.open/api.updateReadMessage/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
}
#endregion
#region 回复留言
public void BackLeaveWordOld(string orderid, string content, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("orderId", orderid);
paramDic.Add("content", content);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.addOrderMessage/" + Appkey;
// string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?orderId=" + orderid + "&content=" + content + "&access_token=" + AccessToken;
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// URL = URL + kv.Key + "=" + kv.Value + "&";
//}
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
RequestNum++;
}
#endregion
#region 回复留言
public void BackLeaveWord(string channelId, string buyerId, string content, string msgSources, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("channelId", channelId);
paramDic.Add("buyerId", buyerId);
paramDic.Add("content", content);
paramDic.Add("msgSources", msgSources);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.addMsg/" + Appkey;
// string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?channelId=" + channelId + "&buyerId=" + buyerId + "&content=" + content + "&msgSources=" + msgSources + "&access_token=" + AccessToken;
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// URL = URL + kv.Key + "=" + kv.Value + "&";
//}
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) ErrorMessage = "失败" + ErrorMessage;
RequestNum++;
}
#endregion
#region 查询未付款订单
public string NoPayOrderList(string pagenum, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("page", pagenum);
paramDic.Add("pageSize", "10");
paramDic.Add("orderStatus", "PLACE_ORDER_SUCCESS");
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.findOrderListQuery/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.findOrderListQuery/" + this.Appkey + "?access_token=" + AccessToken + "&pageSize=10&currentPage=" + pagenum + "&orderStatus=PLACE_ORDER_SUCCESS";
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "失败" + ErrorMessage;
RequestNum++;
return XmlContent;
}
#endregion
#region 查询订单
public string OrderList(string pagenum, string orderStatus, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("page", pagenum);
paramDic.Add("pageSize", "10");
paramDic.Add("orderStatus", orderStatus);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.findOrderListQuery/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.findOrderListQuery/" + this.Appkey + "?access_token=" + AccessToken + "&pageSize=10&currentPage=" + pagenum + "&orderStatus=" + orderStatus;
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "失败" + ErrorMessage;
RequestNum++;
return XmlContent;
}
#endregion
#region 查询订单评价
public string FeedBackList(string pagenum, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("pageSize", "10");
paramDic.Add("currentPage", pagenum);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.evaluation.querySellerEvaluationOrderList/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.evaluation.querySellerEvaluationOrderList/" + this.Appkey + "?access_token=" + AccessToken + "&pageSize=10&currentPage=" + pagenum;
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "GET", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "失败" + ErrorMessage;
RequestNum++;
return XmlContent;
}
#endregion
#region 订单评价提交
public string FeedBackWord(string orderid, string content, out string ErrorMessage)
{
string score = "太棒了";
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("orderId", orderid);
paramDic.Add("feedbackContent", content);
paramDic.Add("score", score);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.evaluation.saveSellerFeedback/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.evaluation.saveSellerFeedback/" + this.Appkey + "?access_token=" + AccessToken + "&orderId=" + orderid + "&feedbackContent=" + content + "&score=" + score;
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "失败" + ErrorMessage;
RequestNum++;
return XmlContent;
}
#endregion
#region 订单收货时间延长提交
public string Extentday(string orderid, string day, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("orderId", orderid);
paramDic.Add("day", day);
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.extendsBuyerAcceptGoodsTime/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.extendsBuyerAcceptGoodsTime/" + this.Appkey + "?access_token=" + AccessToken + "&orderId=" + orderid + "&day=" + day;
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "失败" + ErrorMessage;
RequestNum++;
return XmlContent;
}
#endregion
#region 得到货款到账
public List<LoanorderList> GetOrderLoan(DateTime? Sdate, DateTime? Edate, int page, string loanStatus, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.findLoanListQuery/" + this.Appkey + "?";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
if (Sdate != null)
paramDic.Add("startTime", Sdate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
if (Edate != null)
paramDic.Add("endTime", Edate.Value.ToString("MM/dd/yyyy HH:mm:ss"));
paramDic.Add("pageSize", "50");
paramDic.Add("loanStatus", loanStatus);//订单放款状态wait_loan 未放款loan_ok已放款。
paramDic.Add("page", page.ToString());
string MethodName = "param2/1/aliexpress.open/api.findLoanListQuery/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL += "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
OrderLoanList Model = JsonConvert.Deserialize<OrderLoanList>(XmlContent);
if (Model.totalItem == 0) return null;
return Model.orderList;
}
#endregion
#region 发货
public string SendGoods(Alibaba_Order model, string sendType, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
if (string.IsNullOrEmpty(model.tradeOrderId) == false) paramDic.Add("tradeOrderId", model.tradeOrderId);
if (string.IsNullOrEmpty(model.tradeOrderFrom) == false) paramDic.Add("tradeOrderFrom", model.tradeOrderFrom);
if (string.IsNullOrEmpty(model.warehouseCarrierService) == false) paramDic.Add("warehouseCarrierService", model.warehouseCarrierService);
if (string.IsNullOrEmpty(model.domesticLogisticsCompanyId) == false) paramDic.Add("domesticLogisticsCompanyId", model.domesticLogisticsCompanyId);
if (string.IsNullOrEmpty(model.domesticLogisticsCompany) == false) paramDic.Add("domesticLogisticsCompany", model.domesticLogisticsCompany);
if (string.IsNullOrEmpty(model.domesticTrackingNo) == false) paramDic.Add("domesticTrackingNo", model.domesticTrackingNo);
string MethodName = "param2/1/aliexpress.open/api.createWarehouseOrder/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
RequestNum++;
Alibaba_Order_Result model2 = JsonConvert.Deserialize<Alibaba_Order_Result>(XmlContent);
OrderConfirm(model.domesticLogisticsCompany, model2.result.intlTracking, sendType, model.tradeOrderId, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
return model2.result.intlTracking;
}
#endregion
#region 根据订单号获取线上发货物流方案(运费估算)
/// <summary>
///
/// </summary>
/// <param name="orderId">交易订单ID</param>
/// <param name="goodsWeight">包裹重量</param>
/// <param name="goodsLength">包裹长</param>
/// <param name="goodsWidth">包裹宽</param>
/// <param name="goodsHeight">包裹高</param>
/// <param name="authenticate"></param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public List<Alibaba_Fee> GetFee(string orderId, decimal goodsWeight, int goodsLength, int goodsWidth, int goodsHeight, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderId);
paramDic.Add("goodsWeight", goodsWeight.ToString("0.###"));
paramDic.Add("goodsLength", goodsLength.ToString());
paramDic.Add("goodsWidth", goodsWidth.ToString());
paramDic.Add("goodsHeight", goodsHeight.ToString());
string MethodName = "param2/1/aliexpress.open/api.getOnlineLogisticsServiceListByOrderId/" + Appkey;
// string signature = Sign(MethodName, paramDic, DeveKey);
string signature = signPath(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_Fee_Result model2 = JsonConvert.Deserialize<Alibaba_Fee_Result>(XmlContent);
return model2.result;
}
#endregion
#region 发货确认
/// <summary>
/// 发货确认
/// </summary>
/// <param name="orderid">订单号</param>
/// <param name="mailno">运单号</param>
/// <param name="dealttype">1运单确认2消单</param>
/// <param name="ErrorMessage">错误消息</param>
/// <returns>true成功false失败</returns>
public void OrderConfirm(string serviceName, string logisticsNo, string sendType, string outRef, out string ErrorMessage)
{
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("serviceName", serviceName);
paramDic.Add("logisticsNo", logisticsNo);
paramDic.Add("sendType", sendType);
paramDic.Add("outRef", outRef);
string MethodName = "param2/1/aliexpress.open/api.sellerShipment/" + Appkey;
string signature = Sign(MethodName, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return;
RequestNum++;
}
#endregion
#region 列出平台所支持的物流服务
public List<Alibaba_Express> GetListExpress(out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
string MethodName = "param2/1/aliexpress.open/api.listLogisticsService/" + Appkey;
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.listLogisticsService/" + Appkey + "?access_token=" + AccessToken;
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// URL = URL + kv.Key + "=" + kv.Value + "&";
//}
string signature = signPath(MethodName, paramDic, DeveKey);
URL = URL + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
Alibaba_Express_Result Model = JsonConvert.Deserialize<Alibaba_Express_Result>(XmlContent);
return Model.result;
}
#endregion
private string signPath(string urlPath, Dictionary<string, string> paramDic, string DeveKey)
{
byte[] signatureKey = Encoding.UTF8.GetBytes(DeveKey);//此处用自己的签名密钥
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> kv in paramDic)
{
list.Add(kv.Key + kv.Value);
}
list.Sort();
string tmp = urlPath;
foreach (string kvstr in list)
{
tmp = tmp + kvstr;
}
//HMAC-SHA1
HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
/*
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(urlPath));
foreach (string kvstr in list)
{
hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(kvstr));
}
*/
byte[] hash = hmacsha1.Hash;
//TO HEX
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
#region 创建线上发货物流订单
/// <summary>
///
/// </summary>
/// <param name="tradeOrderId">交易订单号</param>
/// <param name="tradeOrderFrom">交易订单来源,AE订单为ESCROW 国际站订单为“SOURCING”</param>
/// <param name="warehouseCarrierService">”根据订单号获取线上发货物流方案“API获取用户选择的实际发货物流服务物流服务key,即仓库服务名称)例如HRB_WLB_ZTOGZ是 中俄航空 Ruston广州仓库 HRB_WLB_RUSTONHEB为哈尔滨备货仓暂不支持该渠道请做忽略</param>
/// <param name="domesticLogisticsCompanyId">国内快递ID505(物流公司是other时,ID为-1)</param>
/// <param name="domesticLogisticsCompany">物流公司Id为-1时,必填</param>
/// <param name="domesticTrackingNo">国内快递运单号,长度1-32</param>
/// <param name="declareProductDTOs">申报产品信息,列表类型以json格式来表达。{productId为产品ID(必填,如为礼品,则设置为</param>
/// <param name="addressDTOs">地址信息,包含发货人地址,收货人地址.发货人地址key值是sender; 收货人地址key值是receiver,都必填{country为国家简称,必填;province为省/州,必填长度限制1-48字节;city为城市,必填长度限制1-48可以直接填写城市信息,county为区县必填长度限制1-20字节streetAddress为街道 ,必填长度限制1-90字节;name为姓名,必填长度限制1-90字节;phone,mobile两者二选一,phone长度限制1- 54字节;mobile长度限制1-30字节;email邮箱必填长度限制1-64字节;trademanageId旺旺必填长度限制1-32字节;如果是中俄航空Ruston需要揽收的订单则再添加揽收地址信息key值是pickup,字段同上内容必须是中文如无需揽收则不必传pickup的值</param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public warehouseService createWarehouseOrder(string tradeOrderId, string tradeOrderFrom, string warehouseCarrierService, string domesticLogisticsCompanyId, string domesticLogisticsCompany, string domesticTrackingNo, string declareProductDTOs, string addressDTOs, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("tradeOrderId", tradeOrderId);
paramDic.Add("tradeOrderFrom", tradeOrderFrom);
paramDic.Add("warehouseCarrierService", warehouseCarrierService);
paramDic.Add("domesticLogisticsCompanyId", domesticLogisticsCompanyId);
paramDic.Add("domesticLogisticsCompany", domesticLogisticsCompany);
paramDic.Add("domesticTrackingNo", domesticTrackingNo);
paramDic.Add("declareProductDTOs", declareProductDTOs);
paramDic.Add("addressDTOs", addressDTOs);
paramDic.Add("access_token", AccessToken);
string pathurl = "param2/1/aliexpress.open/api.createWarehouseOrder/" + Appkey;
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.createWarehouseOrder/" + Appkey + "?";
foreach (KeyValuePair<string, string> kv in paramDic)
{
URL = URL + kv.Key + "=" + kv.Value + "&";
}
URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
warehouseList Model = JsonConvert.Deserialize<warehouseList>(XmlContent);
return Model.result;
}
#endregion
#region 根据订单号获取线上发货物流方案
public List<logisticsService> getOnlineLogistics(string orderId, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderId);
string pathurl = "param2/1/aliexpress.open/api.getOnlineLogisticsServiceListByOrderId/" + Appkey;
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getOnlineLogisticsServiceListByOrderId/" + Appkey + "?access_token=" + AccessToken + "&orderId=" + orderId + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
logisticsServiceList Model = JsonConvert.Deserialize<logisticsServiceList>(XmlContent);
return Model.result;
}
#endregion
#region 获取邮政小包订单信息(线上物流发货专用接口)
public List<logisticsOrder> getOnlineLogisticsInfo(string orderId, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
string status = "wait_warehouse_receive_goods";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("orderId", orderId);
paramDic.Add("logisticsStatus", status);
string pathurl = "param2/1/aliexpress.open/api.getOnlineLogisticsInfo/" + Appkey;
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getOnlineLogisticsInfo/" + Appkey + "?access_token=" + AccessToken + "&orderId=" + orderId + "&_aop_signature=" + signature + "&logisticsStatus=" + status;
//{"result":[{"channelCode":"123","logisticsStatus":"wait_warehouse_receive_goods","lpNumber":"LP00056212527179","logisticsFee":{},"internationallogisticsId":"RS598510619GB","internationalLogisticsType":"CAINIAO_STANDARD_YANWENNB","orderId":78664221708648,"onlineLogisticsId":3288662302}],"currentPage":1,"totalPage":1,"success":true}
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
logisticsOrderList Model = JsonConvert.Deserialize<logisticsOrderList>(XmlContent);
return Model.result;
}
#endregion
#region 获取线上发货标签
public string GetPrintInfo(string internationalLogisticsId, out string ErrorMessage)
{
try
{
//ErrorFollow.TraceWrite("internationalLogisticsId", internationalLogisticsId, "");
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("warehouseOrderQueryDTOs", internationalLogisticsId);
string pathurl = "param2/1/aliexpress.open/api.getPrintInfos/" + Appkey;
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getPrintInfos/" + Appkey + "?access_token=" + AccessToken + "&warehouseOrderQueryDTOs=" + internationalLogisticsId + "&_aop_signature=" + signature;
//Dictionary<string, string> paramDic = new Dictionary<string, string>();
////client_idapp注册时分配给app的唯一标示又称appKey
//paramDic.Add("access_token", AccessToken);
//string MethodName = "param2/1/aliexpress.open/api.getPrintInfo/" + Appkey;
//string signature = Sign(MethodName, paramDic, DeveKey);
//string URL = "https://gw.api.alibaba.com/openapi/" + MethodName + "?warehouseOrderQueryDTOs=" + internationalLogisticsId+"&";
//foreach (KeyValuePair<string, string> kv in paramDic)
//{
// URL = URL + kv.Key + "=" + kv.Value + "&";
//}
//URL = URL + "_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
// ErrorFollow.TraceWrite("XmlContent", XmlContent, ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
ExpressBody Model = JsonConvert.Deserialize<ExpressBody>(XmlContent);
// ErrorFollow.TraceWrite("Model", Model.Body.ToString(), "");
if (Model == null || Model.Body == null || Model.Body == "")
return "";
byte[] bytes = CustomIO.Base64ToBytes(Model.Body);
string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies";
if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir);
string fname = Guid.NewGuid().ToString() + ".pdf";
string filePath = dir + "/" + fname;
CustomIO.SetOffice(filePath, bytes);
return fname;
}
catch(Exception ex)
{
ErrorFollow.TraceWrite("GetPrintInfo", ex.Data.ToString(), ex.Message);
ErrorMessage = ex.Message;
return "";
}
}
#endregion
#region 声明发货
/// <summary>
///
/// </summary>
/// <param name="orderid">订单号</param>
/// <param name="trackno">跟踪码</param>
/// <param name="ysfs">物流类型</param>
/// <param name="shippmark"></param>
/// <param name="acc"></param>
/// <param name="appkey"></param>
/// <returns></returns>
public bool SubmitTrack(string ordercode, string trackno, string serviceName, string shippmark, out string ErrorMessage)
{
//serviceName = "EMS_ZX_ZX_US";
//if (ysfs == "China Post Air Mail")
//{
// serviceName = "CPAM";
//}
//else if (ysfs == "EUB")
//{
// serviceName = "EMS_ZX_ZX_US";
//}
//if (ysfs == "XRU")
//{
// serviceName = "CPAM";
//}
//if (ysfs == "SF Express")
//{
// serviceName = "SF";
//}
//if (ysfs == "China Post OM Plus")
//{
// serviceName = "YANWEN_JYT";
//}
//if (shippmark.Contains("平邮"))
//{
// serviceName = "Other";
//}
//trackno = "123456789";
//orderid = "5514d9533084f21025e158d3175";
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.sellerShipment/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("serviceName", serviceName);
paramDic.Add("logisticsNo", trackno);
paramDic.Add("sendType", "all");
paramDic.Add("outRef", ordercode);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.sellerShipment/" + Appkey + "?access_token=" + AccessToken + "&serviceName=" + serviceName + "&logisticsNo=" + trackno + "&sendType=all&outRef=" + ordercode + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
//return josn;//SaveData(josn);
}
//上传跟踪码增加网址
public bool SubmitTrackW(string ordercode, string trackno, string serviceName, string shippmark, string trackingWebsite, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.sellerShipment/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("serviceName", serviceName);
paramDic.Add("logisticsNo", trackno);
paramDic.Add("sendType", "all");
if (trackingWebsite != "" && trackingWebsite != null)
paramDic.Add("trackingWebsite", trackingWebsite);
paramDic.Add("outRef", ordercode);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "";
if (trackingWebsite != "" && trackingWebsite != null)
URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.sellerShipment/" + Appkey + "?access_token=" + AccessToken + "&serviceName=" + serviceName + "&logisticsNo=" + trackno + "&sendType=all&outRef=" + ordercode + "&_aop_signature=" + signature + "&trackingWebsite=" + trackingWebsite;
else
{
URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.sellerShipment/" + Appkey + "?access_token=" + AccessToken + "&serviceName=" + serviceName + "&logisticsNo=" + trackno + "&sendType=all&outRef=" + ordercode + "&_aop_signature=" + signature;
}
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
if (ErrorMessage.Contains("错误")) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
//return josn;//SaveData(josn);
}
//上传跟踪码增加备注
public bool SubmitTrackD(string ordercode, string trackno, string serviceName, string shippmark, string description, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.sellerShipment/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("serviceName", serviceName);
paramDic.Add("logisticsNo", trackno);
paramDic.Add("sendType", "all");
paramDic.Add("description", description);
paramDic.Add("outRef", ordercode);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.sellerShipment/" + Appkey + "?access_token=" + AccessToken + "&serviceName=" + serviceName + "&logisticsNo=" + trackno + "&sendType=all&outRef=" + ordercode + "&_aop_signature=" + signature + "&description=" + description;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
//return josn;//SaveData(josn);
}
//上传跟踪码增加网址和备注
public bool SubmitTrackDW(string ordercode, string trackno, string serviceName, string shippmark, string description, string trackingWebsite, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.sellerShipment/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("serviceName", serviceName);
paramDic.Add("logisticsNo", trackno);
paramDic.Add("sendType", "all");
paramDic.Add("description", description);
paramDic.Add("trackingWebsite", trackingWebsite);
paramDic.Add("outRef", ordercode);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.sellerShipment/" + Appkey + "?access_token=" + AccessToken + "&serviceName=" + serviceName + "&logisticsNo=" + trackno + "&sendType=all&outRef=" + ordercode + "&_aop_signature=" + signature + "&description=" + description + "&trackingWebsite=" + trackingWebsite;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
//return josn;//SaveData(josn);
}
#endregion
#region 获取买家地址
public string getLogisticsSellerAddresses(out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
//List<string> list = new List<string>();
//list.Add("sender");
// list.Add("pickup");
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
paramDic.Add("request", "[\"sender\",\"pickup\"]");
string pathurl = "param2/1/aliexpress.open/alibaba.ae.api.getLogisticsSellerAddresses/" + Appkey;
string signature = signPath(pathurl, paramDic, this.DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/alibaba.ae.api.getLogisticsSellerAddresses/" + Appkey + "?request=[\"sender\",\"pickup\"]&access_token=" + AccessToken + "&_aop_signature=" + signature;// +signature;
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
DT_AddrResult Model = JsonConvert.Deserialize<DT_AddrResult>(XmlContent);
if (Model.isSuccess == false)
{
ErrorMessage = Model.errorDesc;
return "0";
}
return Model.senderSellerAddressesList[0].addressId.ToString();
}
#endregion
#region 获取中邮小包支持的国内快递公司信息
public List<InnerService> GetInnerCompany(out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
Dictionary<string, string> paramDic = new Dictionary<string, string>();
//client_idapp注册时分配给app的唯一标示又称appKey
paramDic.Add("access_token", AccessToken);
string pathurl = "param2/1/aliexpress.open/api.qureyWlbDomesticLogisticsCompany/" + Appkey;
string signature = signPath(pathurl, paramDic, this.DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.qureyWlbDomesticLogisticsCompany/" + Appkey + "?access_token=" + AccessToken + "&_aop_signature=" + signature;// +signature;
string XmlContent = CustomIO.HttpRequest(URL, "Get", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
RequestNum++;
InnerServiceList Model = JsonConvert.Deserialize<InnerServiceList>(XmlContent);
return Model.result;
}
#endregion
#region 修改tocken
public void UpdateShopToken()
{
string tsql = @"
Update [JC_Shop] set [RequestNumber]=@RequestNumber,[RefreshToken]=@RefreshToken,[AccessToken]=@AccessToken,[RefreshTokenSaveTime]=@RefreshTokenSaveTime,[AccessTokenUpdateTime]=@AccessTokenUpdateTime where ShopId=@ShopId
";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@ShopId", DbType.Int32, ShopId);
db.AddInParameter(cmd, "@RequestNumber", DbType.Int32, RequestNum);
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.ExecuteNonQuery(cmd);
}
#endregion
#region 修改tocken
public void UpdateShopToken3()
{
string tsql = @"
Update [tb_APIToken] set AccessToken=@AccessToken where ApiIndex=@ShopId
";
Database db = DatabaseFactory.CreateDatabase("ConnectionString3");
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@ShopId", DbType.Int32, ShopId);
db.AddInParameter(cmd, "@RequestNumber", DbType.Int32, RequestNum);
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.ExecuteNonQuery(cmd);
}
#endregion
#region 保存留言
public int SaveLeaveword(DT_LeavewordAPI Model)
{
string tsql = @"
select @Id=Id from DT_Leaveword where wId=@wId
if @Id>0
begin
if @isRead=1
begin
Update [DT_Leaveword] set [isRead]=@isRead,readdate=getdate() where Id=@Id
end
end
else
begin
INSERT INTO [DT_Leaveword]([wordContent],[orderId],[isRead],[senderName],[senderLoginId],[receiverLoginId],[fileUrl],[wordCreate],[wordCreateCN],[wId],[typeId],[indate],ShopId)values(@wordContent,@orderId,@isRead,@senderName,@senderLoginId,@receiverLoginId,@fileUrl,@wordCreate,@wordCreateCN,@wId,@typeId,@indate,@ShopId)
set @Id=SCOPE_IDENTITY()
end
select @Id";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@Id", DbType.Int32, Model.Id);
db.AddInParameter(cmd, "@wordContent", DbType.String, Model.wordContent);
db.AddInParameter(cmd, "@orderId", DbType.String, Model.orderId);
db.AddInParameter(cmd, "@isRead", DbType.Boolean, Model.isRead);
db.AddInParameter(cmd, "@senderName", DbType.String, Model.senderName);
db.AddInParameter(cmd, "@senderLoginId", DbType.String, Model.senderLoginId);
db.AddInParameter(cmd, "@receiverLoginId", DbType.String, Model.receiverLoginId);
db.AddInParameter(cmd, "@fileUrl", DbType.String, Model.fileUrl);
db.AddInParameter(cmd, "@wordCreate", DbType.DateTime, Model.wordCreate);
db.AddInParameter(cmd, "@wordCreateCN", DbType.DateTime, Model.wordCreateCN);
db.AddInParameter(cmd, "@wId", DbType.Int64, Model.wId);
db.AddInParameter(cmd, "@typeId", DbType.String, Model.typeId);
db.AddInParameter(cmd, "@indate", DbType.DateTime, Model.indate);
db.AddInParameter(cmd, "@ShopId", DbType.Int32, Model.ShopId);
int a = Convert.ToInt32(db.ExecuteScalar(cmd));
return a;
}
#endregion
#region 保存站内信
public int SaveInnerMail(DT_InnerMailAPI Model)
{
string tsql = @"
select @Id=Id from DT_InnerMail where wId=@wId
if @Id>0
begin
if @isRead=1
begin
Update [DT_InnerMail] set [isRead]=@isRead where Id=@Id
end
end
else
begin
INSERT INTO [DT_InnerMail]([wordContent],[orderId],[isRead],[senderName],[senderLoginId],[receiverLoginId],[fileUrl],[wordCreate],[wId],[typeId])values(@wordContent,@orderId,@isRead,@senderName,@senderLoginId,@receiverLoginId,@fileUrl,@wordCreate,@wId,@typeId)
set @Id=SCOPE_IDENTITY()
end
select @Id";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@Id", DbType.Int32, Model.Id);
db.AddInParameter(cmd, "@wordContent", DbType.String, Model.wordContent);
db.AddInParameter(cmd, "@orderId", DbType.String, Model.orderId);
db.AddInParameter(cmd, "@isRead", DbType.Boolean, Model.isRead);
db.AddInParameter(cmd, "@senderName", DbType.String, Model.senderName);
db.AddInParameter(cmd, "@senderLoginId", DbType.String, Model.senderLoginId);
db.AddInParameter(cmd, "@receiverLoginId", DbType.String, Model.receiverLoginId);
db.AddInParameter(cmd, "@fileUrl", DbType.String, Model.fileUrl);
db.AddInParameter(cmd, "@wordCreate", DbType.DateTime, Model.wordCreate);
db.AddInParameter(cmd, "@wId", DbType.Int32, Model.wId);
db.AddInParameter(cmd, "@typeId", DbType.String, Model.typeId);
int a = Convert.ToInt32(db.ExecuteScalar(cmd));
return a;
}
#endregion
#region 产品
//产品上架
public bool OnlineProduct(string productIds, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
// if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value <DateTime.Now.AddHours(-9))
//{
GetAccessToken21(out ErrorMessage);
// }
try
{
string pathurl = "param2/1/aliexpress.open/api.onlineAeProduct/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("productIds", productIds);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.onlineAeProduct/" + Appkey + "?access_token=" + AccessToken + "&productIds=" + productIds + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
{
if (ErrorMessage.Contains("未经授权") && Num < 3)
{
OnlineProduct(productIds, out ErrorMessage);
Num++;
}
else
return false;
}
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
}
//产品下架
public bool OfflineProduct(string productIds, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
//if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
//{
GetAccessToken21(out ErrorMessage);
//}
try
{
string pathurl = "param2/1/aliexpress.open/api.offlineAeProduct/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("productIds", productIds);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.offlineAeProduct/" + Appkey + "?access_token=" + AccessToken + "&productIds=" + productIds + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
}
//产品设置橱窗
public bool setShopwindowProduct(string productIdList, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.setShopwindowProduct/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("productIdList", productIdList);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.setShopwindowProduct/" + Appkey + "?access_token=" + AccessToken + "&productIdList=" + productIdList + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return false;
RequestNum++;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
}
//获取类目
public CategoryList getChildrenPostCategoryById(int cateId, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.getChildrenPostCategoryById/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("cateId", cateId.ToString());
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getChildrenPostCategoryById/" + Appkey + "?access_token=" + AccessToken + "&cateId=" + cateId + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
CategoryList Model = JsonConvert.Deserialize<CategoryList>(XmlContent);
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
//获取尺码模板
public sizeList getSizeChartInfoByCategoryId(Int64 categoryId, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.getSizeChartInfoByCategoryId/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("categoryId", categoryId.ToString());
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getSizeChartInfoByCategoryId/" + Appkey + "?access_token=" + AccessToken + "&categoryId=" + categoryId + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
sizeList Model = JsonConvert.Deserialize<sizeList>(XmlContent);
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
//获取尺码模板
public TemplateDTO getlistFreightTemplate(out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.listFreightTemplate/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.listFreightTemplate/" + Appkey + "?access_token=" + AccessToken + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
TemplateDTO Model = JsonConvert.Deserialize<TemplateDTO>(XmlContent);
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
//服务模板
public temList queryPromiseTemplateById(Int64 templateId, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.queryPromiseTemplateById/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("templateId", templateId.ToString());
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryPromiseTemplateById/" + Appkey + "?access_token=" + AccessToken + "&templateId=" + templateId + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
temList Model = JsonConvert.Deserialize<temList>(XmlContent);
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
//产品组
public groupList getProductGroupList(out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.getProductGroupList/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.getProductGroupList/" + Appkey + "?access_token=" + AccessToken + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return null;
groupList Model = JsonConvert.Deserialize<groupList>(XmlContent);
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
#endregion
#region 纠纷
//查询纠纷列表
public string GetQueryIssueList(int currentPage, string issueStatus, out string ErrorMessage)
{
if (string.IsNullOrEmpty(RefreshToken) == true || RefreshTokenSaveTime == null || RefreshTokenSaveTime.Value.AddDays(180) < DateTime.Now.AddDays(-25))
{
GetRefreshToken(out ErrorMessage);
}
if (AccessTokenUpdateTime == null || AccessTokenUpdateTime.Value < DateTime.Now.AddHours(-9))
{
GetAccessToken2(out ErrorMessage);
}
try
{
string pathurl = "param2/1/aliexpress.open/api.queryIssueList/" + Appkey;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("access_token", AccessToken);
paramDic.Add("currentPage", currentPage.ToString());
string tempStatus = "";
if (issueStatus != "")
{
paramDic.Add("issueStatus", issueStatus);
tempStatus = "&issueStatus=" + issueStatus;
}
string signature = signPath(pathurl, paramDic, DeveKey);
string URL = "https://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.queryIssueList/" + Appkey + "?access_token=" + AccessToken + "&currentPage=" + currentPage + tempStatus + "&_aop_signature=" + signature;
string XmlContent = CustomIO.HttpRequest(URL, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
RequestNum++;
return XmlContent;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return "";
}
}
#endregion
}
public class DT_AddrResult
{
public List<DT_Addr> senderSellerAddressesList { get; set; }
public Boolean isSuccess { get; set; }
public string errorDesc { get; set; }
}
public class DT_Addr
{
public Int32? addressId { get; set; }
}
public class DT_LeavewordAPI
{
public Int32? Id { get; set; }
public Int32? Oid { get; set; }
public String wordContent { get; set; }
public String orderId { get; set; }
public Boolean? isRead { get; set; }
public String senderName { get; set; }
public String senderLoginId { get; set; }
public String receiverLoginId { get; set; }
public String fileUrl { get; set; }
public DateTime? wordCreate { get; set; }
public DateTime? wordCreateCN { get; set; }
public Int64 wId { get; set; }
public String typeId { get; set; }
public DateTime? indate { get; set; }
public Int32? CompanyId { get; set; }
public Boolean? isBack { get; set; }
public Int32? ShopId { get; set; }
public String readimg { get; set; }
public String readstate { get; set; }
public String backstate { get; set; }
public String ShopName { get; set; }
public String StateName { get; set; }
public String CountryName { get; set; }
}
public class DT_InnerMailAPI
{
public Int32? Id { get; set; }
public String wordContent { get; set; }
public String orderId { get; set; }
public Boolean? isRead { get; set; }
public String senderName { get; set; }
public String senderLoginId { get; set; }
public String receiverLoginId { get; set; }
public String fileUrl { get; set; }
public DateTime? wordCreate { get; set; }
public Int64 wId { get; set; }
public String typeId { get; set; }
}
#region 订单总数
public class AlibabaOrder
{
/// <summary>
/// 订单总数
/// </summary>
public int totalItem { get; set; }
public List<Alibaba_orderList> orderList { get; set; }
public List<OrderModel> ToListOrderModel()
{
if (orderList == null) return null;
List<OrderModel> ListModel = new List<OrderModel>();
foreach (var item in orderList)
{
OrderModel model = item.ToOrderModel();
ListModel.Add(model);
}
return ListModel;
}
}
#endregion
#region 订单汇总
public class Alibaba_orderList
{
/// <summary>
/// 放款金额
/// </summary>
public Alibaba_loanAmount loanAmount { get; set; }
public Alibaba_loanAmount escrowFee { get; set; }
/// <summary>
/// 计单明细
/// </summary>
public List<Alibaba_product> productList { get; set; }
/// <summary>
/// 纠纷状态
/// </summary>
public string issueStatus { get; set; }
/// <summary>
/// 冻结状态
/// </summary>
public string frozenStatus { get; set; }
/// <summary>
/// 买家登录ID
/// </summary>
public string buyerLoginId { get; set; }
/// <summary>
/// 卖家全名
/// </summary>
public string sellerSignerFullname { get; set; }
/// <summary>
/// 未知
/// </summary>
public bool hasRequestLoan { get; set; }
/// <summary>
/// 订单号
/// </summary>
public long orderId { get; set; }
/// <summary>
/// 支付金额
/// </summary>
public Alibaba_loanAmount payAmount { get; set; }
/// <summary>
/// 订单创建
/// </summary>
public string gmtCreate { get; set; }
/// <summary>
/// 订单状态
/// </summary>
public string orderStatus { get; set; }
/// <summary>
/// 订单状态
/// </summary>
public Int32? OrderState { get; set; }
/// <summary>
/// 买家全名
/// </summary>
public string buyerSignerFullname { get; set; }
/// <summary>
/// 超时剩余时间(毫秒),按当前时间计算
/// </summary>
public long timeoutLeftTime { get; set; }
/// <summary>
/// 资金状态
/// </summary>
public string fundStatus { get; set; }
/// <summary>
/// 订单类型
/// </summary>
public string bizType { get; set; }
/// <summary>
/// 支付时间
/// </summary>
public string gmtPayTime { get; set; }
public List<Alibaba_MsgResult_content> msgList { get; set; }
public List<Alibaba_MsgContentNew> msgListNew { get; set; }
public Alibaba_Buyers BuyersInfo { get; set; }
public Alibaba_OrderXXInfo buyerInfo { get; set; }
public Alibaba_orderList Copy()
{
Alibaba_orderList Model = new Alibaba_orderList();
Model.loanAmount = loanAmount;
Model.productList = productList;
Model.issueStatus = issueStatus;
Model.frozenStatus = frozenStatus;
Model.buyerLoginId = buyerLoginId;
Model.sellerSignerFullname = sellerSignerFullname;
Model.hasRequestLoan = hasRequestLoan;
Model.orderId = orderId;
Model.payAmount = payAmount;
Model.gmtCreate = gmtCreate;
Model.orderStatus = orderStatus;
Model.buyerSignerFullname = buyerSignerFullname;
Model.timeoutLeftTime = timeoutLeftTime;
Model.fundStatus = fundStatus;
Model.bizType = bizType;
Model.gmtPayTime = gmtPayTime;
Model.msgList = msgList;
Model.BuyersInfo = BuyersInfo;
Model.buyerInfo = buyerInfo;
Model.msgListNew = msgListNew;
return Model;
}
public DateTime getCreateDate()
{
//20130307164931000+0800
string dt = this.gmtCreate.Insert(12, ":").Insert(10, ":").Insert(8, " ").Insert(6, "-").Insert(4, "-").Substring(0, 19);
return Convert.ToDateTime(dt);
}
public DateTime getPayTime()
{
//20130307164931000+0800
string dt = this.gmtPayTime.Insert(12, ":").Insert(10, ":").Insert(8, " ").Insert(6, "-").Insert(4, "-").Substring(0, 19);
return Convert.ToDateTime(dt);
}
public DateTime getOutTime()
{
if (this.timeoutLeftTime / 1000 <= 172800)
return DateTime.Now.AddDays(7);
return DateTime.Now.AddSeconds(this.timeoutLeftTime / 1000);
}
#region 转换成统一的订单对象
public OrderModel ToOrderModel()
{
OrderModel model = new OrderModel();
//if (this.orderId.ToString() == "72860947447064")
//{
// string treqq = "72860947447064";
//}
model.OrderCode = this.orderId.ToString();
model.TotalPrice = this.payAmount.amount;
model.MoneyCode = this.payAmount.currencyCode;
model.OrderDate = this.getCreateDate();
model.BuyerID = this.buyerSignerFullname;
if (model.BuyerID.Length > 50) model.BuyerID = model.BuyerID.Substring(0, 50);
model.OrderState = this.OrderState;
if (this.buyerInfo != null)
model.BuyerName = this.buyerInfo.receiptAddress.contactPerson;
if (this.buyerInfo != null)
model.BuyerCountry = this.buyerInfo.receiptAddress.country;
if (this.buyerInfo != null)
model.BuyerAddr = this.buyerInfo.receiptAddress.detailAddress;
if (this.buyerInfo != null && string.IsNullOrEmpty(this.buyerInfo.receiptAddress.address2) == false) model.BuyerAddr += "," + this.buyerInfo.receiptAddress.address2;
model.BuyerPhone = "";
if (this.buyerInfo != null && this.buyerInfo.receiptAddress.phoneCountry != null)
model.BuyerPhone = this.buyerInfo.receiptAddress.phoneCountry + "-";
if (this.buyerInfo != null && this.buyerInfo.receiptAddress.phoneArea != null)
model.BuyerPhone += this.buyerInfo.receiptAddress.phoneArea + "-";
if (this.buyerInfo != null && this.buyerInfo.receiptAddress.phoneNumber != null)
model.BuyerPhone += this.buyerInfo.receiptAddress.phoneNumber;
if (this.buyerInfo != null)
model.BuyerMobile = this.buyerInfo.receiptAddress.mobileNo;
if (this.buyerInfo != null && this.buyerInfo.buyerInfo != null && this.buyerInfo.buyerInfo.email != null)
model.BuyerMail = this.buyerInfo.buyerInfo.email;
//model.logisticsAmount = this.buyerInfo.logisticsAmount;
// model.escrowFee = this.buyerInfo.escrowFee;
model.BuyerFax = "";
if (this.buyerInfo != null)
model.BuyerZip = this.buyerInfo.receiptAddress.zip;
if (this.buyerInfo != null)
model.BuyerProvince = this.buyerInfo.receiptAddress.province;
if (this.buyerInfo != null)
model.BuyerCity = this.buyerInfo.receiptAddress.city;
model.BuyerArea = "";
model.OrderRemark = ""; //memo
model.LeaveWord = "";
if (this.msgListNew != null)
{
foreach (var item2 in this.msgListNew)
{
model.LeaveWord += item2.content + System.Environment.NewLine;
}
}
model.PayDate = this.getPayTime();
model.OutOrderDate = this.getOutTime();
if (this.productList != null) model.PostInfo = this.productList[0].logisticsServiceName;
model.ListModel = new List<OrderDetailModel>();
//Alibaba_productAttributes pmd = null;
//if (this.buyerInfo != null&&this.buyerInfo.childOrderList!=null)
// {
// if (this.buyerInfo.childOrderList.productAttributes != null && this.buyerInfo.childOrderList.productAttributes != "")
// {
// JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
// pmd = JsonConvert.Deserialize<Alibaba_productAttributes>(this.buyerInfo.childOrderList.productAttributes);
// }
// }
if (this.productList != null)
{
foreach (var item2 in this.productList)
{
if (string.IsNullOrEmpty(item2.memo) == false) model.OrderRemark += item2.memo + System.Environment.NewLine;
OrderDetailModel model2 = new OrderDetailModel();
string GoodsDesc = "";
if (this.buyerInfo != null && this.buyerInfo.childOrderList != null)
{
foreach (var pmd in this.buyerInfo.childOrderList)
{
if (pmd.productId == item2.productId)
{
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
Alibaba_productAttributes psku = null;
psku = JsonConvert.Deserialize<Alibaba_productAttributes>(pmd.productAttributes);
if (psku != null && psku.sku != null && psku.sku.Count > 0)
{
string pName = psku.sku[0].pName.Trim();
string pValue = psku.sku[0].pValue.Trim();
if (psku.sku[0].selfDefineValue.ToString() != "")
pValue = psku.sku[0].selfDefineValue;
GoodsDesc += pName + ":" + pValue;
}
if (psku != null && psku.sku != null && psku.sku.Count > 1)
{
string pName = psku.sku[1].pName.Trim();
string pValue = psku.sku[1].pValue.Trim();
GoodsDesc += " " + pName + ":" + pValue;
}
}
}
}
model2.TypeDesc = GoodsDesc;
model2.productImgUrl = item2.productImgUrl;
model2.GoodsNum = item2.productCount;
model2.GoodsPrice = item2.productUnitPrice.amount;
model2.MoneyCode = item2.productUnitPrice.currencyCode;
model2.GoodsName = item2.productName;
model2.GoodsSKU = item2.skuCode;
model2.PostInfo = item2.logisticsServiceName;
model.ListModel.Add(model2);
}
}
return model;
}
#endregion
}
#endregion
public class Alibaba_OrderXXInfo
{ /// <summary>
/// 物流金额
/// </summary>
//public Decimal? logisticsAmount { get; set; }
/// <summary>
/// 交易用金
/// </summary>
//public Decimal? escrowFee { get; set; }
public Alibaba_BuyInfo buyerInfo { get; set; }
public Alibaba_Addr receiptAddress { get; set; }
public List<Alibaba_ChildOrder> childOrderList { get; set; }
}
#region 订单地址信息
public class Alibaba_Addr
{
public string zip { get; set; }
public string phoneNumber { get; set; }
public string province { get; set; }
public string address2 { get; set; }
public string phoneArea { get; set; }
public string phoneCountry { get; set; }
public string contactPerson { get; set; }
public string mobileNo { get; set; }
public string city { get; set; }
public string country { get; set; }
public string detailAddress { get; set; }
}
#endregion
#region 订单子信息
public class Alibaba_ChildOrder
{
public string productAttributes { get; set; }
public long productId { get; set; }
}
#endregion
#region 属性信息
public class Alibaba_productAttributes
{
public List<Alibaba_SKU> sku { get; set; }
}
#endregion
#region 属性信息
public class Alibaba_SKU
{
public string pName { get; set; }
public string pValue { get; set; }
public string selfDefineValue { get; set; }
}
#endregion
#region 订单买家信息
public class Alibaba_BuyInfo
{
public string lastName { get; set; }
public string loginId { get; set; }
public string email { get; set; }
public string firstName { get; set; }
public string country { get; set; }
}
#endregion
#region 订单明细
public class Alibaba_product
{
/// <summary>
/// 订单ID
/// </summary>
public long childId { get; set; }
/// <summary>
/// 备货时间
/// </summary>
public long goodsPrepareTime { get; set; }
/// <summary>
/// 物流金额
/// </summary>
public Alibaba_loanAmount logisticsAmount { get; set; }
/// <summary>
/// 订单备注
/// </summary>
public string memo { get; set; }
/// <summary>
/// 卖家FirstName
/// </summary>
public string sellerSignerFirstName { get; set; }
/// <summary>
/// 总产品数量
/// </summary>
public Alibaba_loanAmount totalProductAmount { get; set; }
/// <summary>
/// 限时达
/// </summary>
public string freightCommitDay { get; set; }
/// <summary>
/// 子订单是否能提交纠纷
/// </summary>
public bool canSubmitIssue { get; set; }
/// <summary>
/// 产品单位
/// </summary>
public string productUnit { get; set; }
/// <summary>
/// 纠纷状态
/// </summary>
public string issueStatus { get; set; }
/// <summary>
/// 物流类型
/// </summary>
public string logisticsType { get; set; }
/// <summary>
/// 订单号
/// </summary>
public long orderId { get; set; }
/// <summary>
/// 物流服务
/// </summary>
public string logisticsServiceName { get; set; }
/// <summary>
/// 子订单状态
/// </summary>
public string sonOrderStatus { get; set; }
/// <summary>
/// 产品镜像链接
/// </summary>
public string productSnapUrl { get; set; }
/// <summary>
/// 假一赔三
/// </summary>
public bool moneyBack3x { get; set; }
/// <summary>
/// sku码
/// </summary>
public string skuCode { get; set; }
/// <summary>
/// 产品ID
/// </summary>
public long productId { get; set; }
/// <summary>
/// 产品数量
/// </summary>
public int productCount { get; set; }
/// <summary>
/// 妥投时间
/// </summary>
public string deliveryTime { get; set; }
/// <summary>
/// 产品单位价格
/// </summary>
public Alibaba_loanAmount productUnitPrice { get; set; }
/// <summary>
/// 卖家LastName
/// </summary>
public string sellerSignerLastName { get; set; }
/// <summary>
/// 产品图片链接
/// </summary>
public string productImgUrl { get; set; }
/// <summary>
/// 未知,文档中不存在
/// </summary>
public string showStatus { get; set; }
/// <summary>
/// 产品名称
/// </summary>
public string productName { get; set; }
}
#endregion
#region 订单总金额
public class Alibaba_loanAmount
{
/// <summary>
/// 订单总金额
/// </summary>
public decimal amount { get; set; }
/// <summary>
/// 订单总金额(分)
/// </summary>
public int cent { get; set; }
/// <summary>
/// 货币代码
/// </summary>
public string currencyCode { get; set; }
/// <summary>
/// 分的定义1块除100
/// </summary>
public int centFactor { get; set; }
public Alibaba_currency currency { get; set; }
}
#endregion
#region 货币
public class Alibaba_currency
{
/// <summary>
/// 小数位
/// </summary>
public int defaultFractionDigits { get; set; }
/// <summary>
/// 货币符号
/// </summary>
public string symbol { get; set; }
/// <summary>
/// 货币代码
/// </summary>
public string currencyCode { get; set; }
}
#endregion
#region 留言
public class Alibaba_MsgResult
{
public int total { get; set; }
public bool success { get; set; }
public List<Alibaba_MsgResult_content> msgList { get; set; }
}
#endregion
#region 留言内容
public class Alibaba_MsgResult_content
{
public Int64 id { get; set; }
public string content { get; set; }
public string orderId { get; set; }
public string typeId { get; set; }
public Boolean? read { get; set; }
public string senderName { get; set; }
public string senderLoginId { get; set; }
public string receiverLoginId { get; set; }
public string fileUrl { get; set; }
public string gmtCreate { get; set; }
}
#endregion
#region 留言新
public class Alibaba_MsgResultNew
{
public List<Alibaba_MsgContentNew> result { get; set; }
}
#endregion
#region 留言内容新
public class Alibaba_MsgContentNew
{
public Int64 id { get; set; }
public string senderName { get; set; }
public string content { get; set; }
public string gmtCreate { get; set; }
public string typeId { get; set; }
// public string filePath { get; set; }
public string messageType { get; set; }
public Alibaba_MsgResult_summary summary { get; set; }
}
#endregion
#region 留言内容新
public class Alibaba_MsgResult_summary
{
public string senderName { get; set; }
public string orderUrl { get; set; }
public string receiverName { get; set; }
}
#endregion
#region 站内信
public class Alibaba_InnerMailResult
{
public int total { get; set; }
public bool success { get; set; }
public List<Alibaba_InnerMail_content> msgList { get; set; }
}
#endregion
#region 站内信内容
public class Alibaba_InnerMail_content
{
public Int64 id { get; set; }
public string content { get; set; }
public string orderId { get; set; }
public Boolean? read { get; set; }
public string senderName { get; set; }
public string senderLoginId { get; set; }
public string receiverLoginId { get; set; }
public string fileUrl { get; set; }
public string relationId { get; set; }
public string gmtCreate { get; set; }
}
#endregion
#region 收货信息
public class Alibaba_Buyers
{
/// <summary>
/// 邮编
/// </summary>
public string zip { get; set; }
/// <summary>
/// 地址2
/// </summary>
public string address2 { get; set; }
/// <summary>
/// 详细地址
/// </summary>
public string detailAddress { get; set; }
/// <summary>
/// 国家
/// </summary>
public string country { get; set; }
/// <summary>
/// 城市
/// </summary>
public string city { get; set; }
/// <summary>
/// 电话号码
/// </summary>
public string phoneNumber { get; set; }
/// <summary>
/// 州
/// </summary>
public string province { get; set; }
/// <summary>
/// 电话区号
/// </summary>
public string phoneArea { get; set; }
/// <summary>
/// 国家区号
/// </summary>
public string phoneCountry { get; set; }
/// <summary>
/// 收件人
/// </summary>
public string contactPerson { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string mobileNo { get; set; }
}
#endregion
#region 发货订单
public class Alibaba_Order
{
/// <summary>
/// 交易订单号
/// </summary>
public string tradeOrderId { get; set; }
/// <summary>
/// 交易订单来源,AE订单为ESCROW 国际站订单为“SOURCING”
/// </summary>
public string tradeOrderFrom { get; set; }
/// <summary>
/// 根据订单号获取线上发货物流方案“API获取用户选择的实际发货物流服务物流服务key,即仓库服务名称)例如HRB_WLB_ZTOGZ是 中俄航空 Ruston广州仓库 HRB_WLB_RUSTONHEB为哈尔滨备货仓暂不支持该渠道请做忽略。
/// </summary>
public string warehouseCarrierService { get; set; }
/// <summary>
/// 国内快递ID
/// </summary>
public string domesticLogisticsCompanyId { get; set; }
/// <summary>
/// 国内快递公司名称
/// </summary>
public string domesticLogisticsCompany { get; set; }
/// <summary>
/// 国内快递运单号,长度1-32
/// </summary>
public string domesticTrackingNo { get; set; }
}
#endregion
#region 发货订单结果
public class Alibaba_Order_Result
{
/// <summary>
/// 是否成功
/// </summary>
public bool success { get; set; }
/// <summary>
/// 结果
/// </summary>
public Alibaba_Order_Result_Detail result { get; set; }
}
#endregion
#region 发货订单结果明细
public class Alibaba_Order_Result_Detail
{
/// <summary>
/// 物流订单号
/// </summary>
public string warehouseOrderId { get; set; }
/// <summary>
/// 国际运单号
/// </summary>
public string intlTracking { get; set; }
/// <summary>
/// 关联的交易订单号
/// </summary>
public string tradeOrderId { get; set; }
/// <summary>
/// 交易订单来源
/// </summary>
public string tradeOrderFrom { get; set; }
/// <summary>
/// 是否创建成功
/// </summary>
public bool success { get; set; }
/// <summary>
/// 错误代码
/// </summary>
public string errorCode { get; set; }
}
#endregion
#region 运费估算
public class Alibaba_Fee_Result
{
/// <summary>
/// 是否成功
/// </summary>
public bool success { get; set; }
public List<Alibaba_Fee> result { get; set; }
}
public class Alibaba_Fee
{
/// <summary>
/// 物流名称
/// </summary>
public string logisticsServiceName { get; set; }
/// <summary>
/// 币种
/// </summary>
public string trialResult { get; set; }
/// <summary>
/// 时效
/// </summary>
public string logisticsTimeliness { get; set; }
/// <summary>
/// 物流代码
/// </summary>
public string logisticsServiceId { get; set; }
/// <summary>
/// 估算费用货币代码
/// </summary>
public string currencyCode { get; set; }
/// <summary>
/// 估算费用
/// </summary>
public decimal fee { get; set; }
/// <summary>
/// 仓库地址
/// </summary>
public string deliveryAddress { get; set; }
}
#endregion
#region 物流服务
public class Alibaba_Express_Result
{
public List<Alibaba_Express> result { get; set; }
}
public class Alibaba_Express
{
/// <summary>
/// 物流公司名称
/// </summary>
public string logisticsCompany { get; set; }
/// <summary>
/// 物流服务显示名称
/// </summary>
public string displayName { get; set; }
/// <summary>
/// 物流服务key
/// </summary>
public string serviceName { get; set; }
}
public class ExpressBody
{
public string Body { get; set; }
}
public class logisticsServiceList
{
public List<logisticsService> result { get; set; }
}
public class logisticsService
{
public string logisticsServiceName { get; set; }
public string trialResult { get; set; }
public string logisticsTimeliness { get; set; }
public string logisticsServiceId { get; set; }
public string deliveryAddress { get; set; }
}
public class logisticsOrderList
{
public List<logisticsOrder> result { get; set; }
}
public class logisticsOrder
{
public string logisticsStatus { get; set; }
public string internationalLogisticsType { get; set; }
public string internationallogisticsId { get; set; }
public string orderId { get; set; }
public string onlineLogisticsId { get; set; }
public string channelCode { get; set; }
public string lpNumber { get; set; }
}
public class InnerServiceList
{
public List<InnerService> result { get; set; }
}
public class InnerService
{
public string name { get; set; }
public string companyId { get; set; }
public string companyCode { get; set; }
}
public class warehouseList
{
public warehouseService result { get; set; }
}
public class addressDTOs
{
public receiverClass receiver { get; set; }
public senderClass sender { get; set; }
}
public class warehouseService
{
public string warehouseOrderId { get; set; }
public string intlTracking { get; set; }
public string tradeOrderId { get; set; }
public string errorCode { get; set; }
public string tradeOrderFrom { get; set; }
public string success { get; set; }
public string errorDesc { get; set; }
public string outOrderId { get; set; }
}
public class receiverClass
{
public string city { get; set; }
public string country { get; set; }
public string fax { get; set; }
public string mobile { get; set; }
public string name { get; set; }
public string phone { get; set; }
public string postcode { get; set; }
public string province { get; set; }
public string streetAddress { get; set; }
}
public class senderClass
{
public string city { get; set; }
public string country { get; set; }
public string fax { get; set; }
public string mobile { get; set; }
public string name { get; set; }
public string phone { get; set; }
public string postcode { get; set; }
public string province { get; set; }
public string streetAddress { get; set; }
public long addressId { get; set; }
}
public class declareProductDTOs
{
public string categoryCnDesc { get; set; }
public string categoryEnDesc { get; set; }
public int isContainsBattery { get; set; }
public decimal productDeclareAmount { get; set; }
public int productId { get; set; }
public int productNum { get; set; }
public decimal productWeight { get; set; }
public string hsCode { get; set; }
}
public class OrderLoanList
{
public Int32? totalItem { get; set; }
public List<LoanorderList> orderList { get; set; }
}
public class LoanorderList
{
public LoanorderamountTotal amountTotal { get; set; }
public string orderId { get; set; }
public List<sonOrderList> sonOrderList { get; set; }
}
public class LoanorderamountTotal
{
public Decimal? amount { get; set; }
public string currencyCode { get; set; }
}
public class sonOrderList
{
public string waitLoanReson { get; set; }
public string loanStatus { get; set; }
public LoanorderamountTotal affiliateCommission { get; set; }
public LoanorderamountTotal escrowFee { get; set; }
public string childOrderId { get; set; }
public LoanorderamountTotal realLoanAmount { get; set; }
}
#endregion
#region 纠纷
//列表
public class IssueList
{
public string id { get; set; }
public DateTime gmtCreate { get; set; }
public DateTime gmtModified { get; set; }
public string orderId { get; set; }
public string issueStatus { get; set; }
public string reasonChinese { get; set; }
public string reasonEnglish { get; set; }
public List<IssueAPIIssueProcessDTO> issueProcessDTOs { get; set; }
}
//明细
public class IssueAPIIssueProcessDTO
{
public string snapshotUrl { get; set; }
public IssueAPIIssueDTO issueAPIIssueDTO { get; set; }
}
public class IssueAPIIssueDTO
{
}
#endregion
#region 已导入订单
public class Alibaba_OrderCode
{
public string OrderCode { get; set; }
}
#endregion
#region 产品列表类
public class postAeProduct
{
/// <summary>
/// 是 Detail详情。以下内容会被过滤但不影响产品提交:(1)含有script\textarea\style\iframe\frame\input\pre\button均被过滤.(2)a标签href属性只允许是aliexpress.com域名连接,否则被过滤.(3)img标签src只允许alibaba.com或者aliimg.com域名链接.(4)任意具有style属性的html标签其style受检查只允许一般简单的样式.不允许的内容将被过滤.(5)如果发现html内容标签缺失会自动补全标签. detail stuff here
/// </summary>
public string detail { get; set; }
public List<aeopAeProductSKUs> aeopAeProductSKUs { get; set; }
/// <summary>
/// 否 备货期。取值范围:1-60;单位:天。
/// </summary>
public Int32? deliveryTime { get; set; }
/// <summary>
/// 否 服务模板设置。需和服务模板查询接口api.queryPromiseTemplateById进行关联使用 100
/// </summary>
public Int64? promiseTemplateId { get; set; }
/// <summary>
/// 是 商品所属类目ID。必须是叶子类目通过类目接口获取。 200002101
/// </summary>
public Int32? categoryId { get; set; }
/// <summary>
/// 是 商品标题 长度在1-128之间英文。 knew odd of test
/// </summary>
public string subject { get; set; }
/// <summary>
/// 否 商品一口价。取值范围:0-100000,保留两位小数;单位:美元。如:200.07,表示:200美元7分。需要在正确的价格区间内。上传多属性产品的时候有好几个SKU和价格productprice无需填写。 11.00
/// </summary>
public string productPrice { get; set; }
/// <summary>
/// 否 运费模版ID。通过运费接口listFreightTemplate获取。 703476858
/// </summary>
public Int32? freightTemplateId { get; set; }
/// <summary>
/// 产品的主图URL列表。如果这个产品有多张主图那么这些URL之间使用英文分号(";")隔开。 一个产品最多只能有6张主图。图片格式JPEG文件大小5M以内图片像素建议大于800*800横向和纵向比例建议1:1到1:1.3之间图片中产品主体占比建议大于70%背景白色或纯色风格统一如果有LOGO建议放置在左上角不宜过大。 不建议自行添加促销标签或文字。切勿盗用他人图片以免受网规处罚。更多说明请至http://seller.aliexpress.com/so/tupianguifan.php进行了解。 http://g01.a.alicdn.com/kf/HTB13GKLJXXXXXbYaXXXq6xXFXXXi.jpg;http://g02.a.alicdn.com/kf/HTB1DkaWJXXXXXb6XFXXq6xXFXXXp.jpg;http://g02.a.alicdn.com/kf/HTB1pMCQJXXXXXcvXVXXq6xXFXXXm.jpg;http://g03.a.alicdn.com/kf/HTB1QhORJXXXXXbiXVXXq6xXFXXXx.jpg;http://g02.a.alicdn.com/kf/HTB1q1aLJXXXXXcfaXXXq6xXFXXXv.jpg
/// </summary>
public string imageURLs { get; set; }
/// <summary>
/// 否 商品单位 (存储单位编号) 100000000:袋 (bag/bags) 100000001:桶 (barrel/barrels) 100000002:蒲式耳 (bushel/bushels) 100078580:箱 (carton) 100078581:厘米 (centimeter) 100000003:立方米 (cubic meter) 100000004:打 (dozen) 100078584:英尺 (feet) 100000005:加仑 (gallon) 100000006:克 (gram) 100078587:英寸 (inch) 100000007:千克 (kilogram) 100078589:千升 (kiloliter) 100000008:千米 (kilometer) 100078559:升 (liter/liters) 100000009:英吨 (long ton) 100000010:米 (meter) 100000011:公吨 (metric ton) 100078560:毫克 (milligram) 100078596:毫升 (milliliter) 100078597:毫米 (millimeter) 100000012:盎司 (ounce) 100000014:包 (pack/packs) 100000013:双 (pair) 100000015:件/个 (piece/pieces) 100000016:磅 (pound) 100078603:夸脱 (quart) 100000017:套 (set/sets) 100000018:美吨 (short ton) 100078606:平方英尺 (square feet) 100078607:平方英寸 (square inch) 100000019:平方米 (square meter) 100078609:平方码 (square yard) 100000020:吨 (ton) 100078558:码 (yard/yards) 100000000
/// </summary>
public Int32? productUnit { get; set; }
/// <summary>
/// 否 打包销售: true 非打包销售:false false
/// </summary>
public Boolean? packageType { get; set; }
/// <summary>
/// 否 每包件数。 打包销售情况lotNum>1,非打包销售情况,lotNum=1 1
/// </summary>
public Int32? lotNum { get; set; }
/// <summary>
/// 否 商品包装长度。取值范围:1-700,单位:厘米。产品包装尺寸的最大值+2×第二大值+第三大值不能超过2700厘米。 20
/// </summary>
public Int32? packageLength { get; set; }
/// <summary>
/// 否 商品包装宽度。取值范围:1-700,单位:厘米。 30
/// </summary>
public Int32? packageWidth { get; set; }
/// <summary>
/// 否 商品包装高度。取值范围:1-700,单位:厘米。 40
/// </summary>
public Int32? packageHeight { get; set; }
/// <summary>
/// 否 商品毛重,取值范围:0.001-500.000,保留三位小数,采用进位制,单位:公斤。 10.020
/// </summary>
public string grossWeight { get; set; }
/// <summary>
/// 否 是否自定义计重.true为自定义计重,false反之. false
/// </summary>
public Boolean? isPackSell { get; set; }
/// <summary>
/// 否 isPackSell为true时,此项必填。购买几件以内不增加运费。取值范围1-1000 1
/// </summary>
public Int32? baseUnit { get; set; }
/// <summary>
/// 否 isPackSell为true时,此项必填。 每增加件数.取值范围1-1000。 2
/// </summary>
public Int32? addUnit { get; set; }
/// <summary>
/// 否 isPackSell为true时,此项必填。 对应增加的重量.取值范围:0.001-500.000,保留三位小数,采用进位制,单位:公斤。 3.03
/// </summary>
public string addWeight { get; set; }
/// <summary>
/// 否 商品有效天数。取值范围:1-30,单位:天。 30
/// </summary>
public Int32? wsValidNum { get; set; }
/// <summary>
/// 是 产品属性以json格式进行封装后提交。参看aeopAeProductPropertys数据结构。此字段是否必填需从类目接口getChildAttributesResultByPostCateIdAndPath获取即获取到的required来判断属性是否必填该项只输入普通类目属性数据不可输入sku类目属性。 对于类目属性包含子类目属性的情况,此处不确认父属性和子属性,即选择任何属性,都以该对象提交。 对于一个属性多个选中值的情况,以多个该对象存放。 其中"attrNameId","attrValueId"为整型(Integer), "attrName", "attrValue"为字符串类型(String)。 1. 当设置一些系统属性时,如果类目自定义了一些候选值,只需要提供"attrNameId"和"attrValueId"即可。例如:{"attrNameId":494, "attrValueId":284}。 2. 当设置一些需要手工输入属性内容时,只需要提供"attrNameId"和"attrValue"即可。例如:{"attrNameId": 1000, "attrValue": "test"} 3. 当设置自定义属性时,需要提供"attrName"和"attrValue"即可。例如: {"attrName": "Color", "attrValue": "red"} 4. 当设置一个Other属性时需要提供"attrNameId", "attrValueId", "attrValue"三个参数。例如:{"attrNameId": 1000, "attrValueId": 4, "attrValue": "Other Value"}。 [ { "attrNameId": 2, "attrValue": "STD" }, { "attrValueId": 200004894, "attrNameId": 175 }, { "attrValueId": 200660860, "attrNameId": 186 } ]
/// </summary>
public List<aeopAeProductPropertys> aeopAeProductPropertys { get; set; }
/// <summary>
/// 否 批发最小数量 。取值范围2-100000。批发最小数量和批发折扣需同时有值或无值。 5
/// </summary>
public Int32? bulkOrder { get; set; }
/// <summary>
/// 否 批发折扣。扩大100倍存整数。取值范围:1-99。注意这是折扣不是打折率。 如,打68折,则存32。批发最小数量和批发折扣需同时有值或无值。 90
/// </summary>
public Int32? bulkDiscount { get; set; }
/// <summary>
/// 否 尺码表模版ID。必须选择当前类目下的尺码模版。 100
/// </summary>
public Int64? sizechartId { get; set; }
/// <summary>
/// 否 库存扣减策略总共有2种下单减库存(place_order_withhold)和支付减库存(payment_success_deduct)。 place_order_withhold或payment_success_deduct
/// </summary>
public string reduceStrategy { get; set; }
/// <summary>
/// 否 这个产品需要关联的产品分组ID. 只能关联一个产品分组如果想关联多个产品分组请使用api.setGroups接口。 124
/// </summary>
public Int32? groupId { get; set; }
/// <summary>
/// 否 货币单位。如果不提供该值信息,则默认为"USD";非俄罗斯卖家这个属性值可以不提供。对于俄罗斯海外卖家,该单位值必须提供,如: "RUB"。 USD;RUB
/// </summary>
public string currencyCode { get; set; }
/// <summary>
/// 否 mobile Detail详情。以下内容会被过滤但不影响产品提交:(1)含有script\textarea\style\iframe\frame\input\pre\button均被过滤.(2)a标签href属性只允许是aliexpress.com域名连接,否则被过滤.(3)img标签src只允许alibaba.com或者aliimg.com域名链接.(4)任意具有style属性的html标签其style受检查只允许一般简单的样式.不允许的内容将被过滤.(5)如果发现html内容标签缺失会自动补全标签. mobile Detail html block
/// </summary>
public string mobileDetail { get; set; }
/// <summary>
/// 否 卡券商品开始有效期 20160119113420000+0800
/// </summary>
public Int32? couponStartDate { get; set; }
/// <summary>
/// 否 卡券商品结束有效期 20160124113420000+0800
/// </summary>
public Int32? couponEndDate { get; set; }
}
public class aeopAeProductSKUs
{
/// <summary>
/// 否 Sku价格。取值范围:0.01-100000;单位:美元。 如:200.07,表示:200美元7分。需要在正确的价格区间内。 "200.07"
/// </summary>
public string skuPrice { get; set; }
/// <summary>
/// Sku商家编码。 格式:半角英数字,长度20,不包含空格大于号和小于号。如果用户只填写零售价productprice和商品编码需要完整生成一条SKU记录提交否则商品编码无法保存。系统会认为只提交了零售价而没有SKU导致商品编辑未保存。 "cfas
/// </summary>
public string skuCode { get; set; }
/// <summary>
/// Sku库存,数据格式有货true无货false至少有一条sku记录是有货的。 true
/// </summary>
public string skuStock { get; set; }
/// <summary>
/// SKU实际可售库存属性ipmSkuStock该属性值的合理取值范围为0~999999如该商品有SKU时请确保至少有一个SKU是有货状态也就是ipmSkuStock取值是1~999999在整个商品纬度库存值的取值范围是1~999999。 如果同时设置了skuStock属性那么系统以ipmSkuStock属性为优先如果没有设置ipmSkuStock属性那么系统会根据skuStock属性进行设置库存true表示999false表示0。 1234
/// </summary>
public string ipmSkuStock { get; set; }
/// <summary>
/// SKU ID。 可以唯一表示一个商品范围内的SKU。注意: 这是一个只读参数在发布和编辑商品信息时在设置aeopAeProductSKUs参数时不需要提供这个参数。isv可以通过api.findAeProductById(查询单个商品信息)接口来获取到这个属性。这个属性被api.editMutilpleSkuStocks(编辑一个或多个SKU的可售库存)、api.editSingleSkuStock(编辑单个SKU的可售库存)、api.editSingleSkuPrice(编辑单个SKU的价格)三个接口使用到。 "200000182:193;200007763:201336100"
/// </summary>
public string id { get; set; }
/// <summary>
/// 货币单位。如果不提供该值信息,则默认为"USD";非俄罗斯卖家这个属性值可以不提供。对于俄罗斯海外卖家,该单位值必须提供,如: "RUB"。 "USD"或者"RUB"
/// </summary>
public string currencyCode { get; set; }
/// <summary>
/// Sku属性对象list允许1-6个sku属性对象按sku属性顺序排放。sku属性从类目属性接口getAttributesResultByCateId获取。该项值输入sku属性不能输入普通类目属性。注意sku属性是有顺序的必须按照顺序存放。 "aeopSKUProperty":[{"skuPropertyId":14,"propertyValueId":771, "propertyValueDefinitionName": "black", "skuImage": "http://g01.a.alicdn.com/kf/HTB13GKLJXXXXXbYaXXXq6xXFXXXi.jpg" },{"skuPropertyId":25,"propertyValueId":775, "propertyValueDefinitionName": "red"}]
/// </summary>
public List<aeopSKUProperty> aeopSKUProperty { get; set; }
}
public class aeopAeProductPropertys
{
/// <summary>
///否 属性名ID。从类目属性接口getAttributesResultByCateId获取普通类目属性不可填入sku属性。 自定义属性名时,该项不填. 200000043
/// </summary>
public Int32? attrNameId { get; set; }
/// <summary>
/// 否 自定义属性名属性名。 自定义属性名时,该项必填. size
/// </summary>
public string attrName { get; set; }
/// <summary>
/// 属性值ID。从类目属性接口getAttributesResultByCateId获取普通类目属性不可填入sku属性。自定义属性值时,该项不填。 581
/// </summary>
public Int32? attrValueId { get; set; }
/// <summary>
///否 自定义属性值。自定义属性名时,该项必填。 当自定义属性值内容为区间情况时建议格式2 - 5 kg。(注意,数字'-'单位三者间是要加空格的!) 2 - 5 kg
/// </summary>
public string attrValue { get; set; }
}
public class aeopSKUProperty
{
/// <summary>
///否 sku属性名id。从类目属性接口getAttributesResultByCateId获取sku属性。 200000264
/// </summary>
public Int32? skuPropertyId { get; set; }
/// <summary>
/// 否 sku属性值id。从类目属性接getAttributesResultByCateId获取。 200002211
/// </summary>
public Int32? propertyValueId { get; set; }
/// <summary>
/// 否 自定义属性值名称0-20个字符0-9和英文半角字符。 pink
/// </summary>
public string propertyValueDefinitionName { get; set; }
/// <summary>
/// 否 sku属性图片url。可以通过api.uploadTempImage接口上传图片或者从图片银行中选取图片来作为这个SKU的图片。 http://g02.a.alicdn.com/kf/HTB1NKEUIVXXXXcOXXXXq6xXFXXXu.jpg
/// </summary>
public string skuImage { get; set; }
}
public class CategoryList
{
public List<aeopPostCategoryList> aeopPostCategoryList { get; set; }
}
public class aeopPostCategoryList
{
/// <summary>
///否 sku属性名id。从类目属性接口getAttributesResultByCateId获取sku属性。 200000264
/// </summary>
public Int32? id { get; set; }
/// <summary>
/// 否 sku属性值id。从类目属性接getAttributesResultByCateId获取。 200002211
/// </summary>
public Int32? level { get; set; }
/// <summary>
/// 否 自定义属性值名称0-20个字符0-9和英文半角字符。 pink
/// </summary>
public Categorynames names { get; set; }
public Boolean? isleaf { get; set; }
}
public class Categorynames
{
public string zh { get; set; }
public string en { get; set; }
}
public class sizeList
{
public List<sizechartDTOList> sizechartDTOList { get; set; }
public Boolean success { get; set; }
}
public class sizechartDTOList
{
public Int64 sizechartId { get; set; }
//public string default { get; set; }
public string modelName { get; set; }
public string name { get; set; }
}
public class TemplateDTO
{
public List<aeopFreightTemplateDTOList> aeopFreightTemplateDTOList { get; set; }
public Boolean success { get; set; }
public string errorDesc { get; set; }
}
public class aeopFreightTemplateDTOList
{
public Int32 templateId { get; set; }
public string @default { get; set; }
public string templateName { get; set; }
}
public class temList
{
public List<PromiseTemplate> templateList { get; set; }
}
public class PromiseTemplate
{
public Int32 id { get; set; }
public string name { get; set; }
}
public class groupList
{
public List<AeopProductGroup> target { get; set; }
}
public class AeopProductGroup
{
public Int64 groupId { get; set; }
public string groupName { get; set; }
public List<AeopChildProductGroup> childGroup { get; set; }
}
public class AeopChildProductGroup
{
public Int64 groupId { get; set; }
public string groupName { get; set; }
}
#endregion
}