From 9f326f4000847e6167d8166fa2f6a66f53cb3734 Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 17 十二月 2020 09:07:13 +0800 Subject: [PATCH] 新云端Ver1.3 --- ZigbeeApp/Shared/Phone/Common/Logic/HdlHttpLogic.cs | 565 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 565 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/Common/Logic/HdlHttpLogic.cs b/ZigbeeApp/Shared/Phone/Common/Logic/HdlHttpLogic.cs new file mode 100644 index 0000000..7421c9c --- /dev/null +++ b/ZigbeeApp/Shared/Phone/Common/Logic/HdlHttpLogic.cs @@ -0,0 +1,565 @@ +锘縰sing Newtonsoft.Json; +using RestSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace Shared.Phone +{ + /// <summary> + /// Http璁块棶閫昏緫 + /// </summary> + public class HdlHttpLogic + { + //2020.08.04 涓轰粈涔堣闂簯绔紕鐨勯偅涔堝鏉傦紵鎴戜篃涓嶇煡閬撲簯绔殑鎰忎箟涓轰綍 + //鎬讳箣,浜戠灏辨槸寮勫緱杩欎箞澶嶆潅,娌″姙娉� + + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// http璇锋眰閫昏緫 + /// </summary> + private static HdlHttpLogic m_Current = null; + /// <summary> + /// http璇锋眰閫昏緫 + /// </summary> + public static HdlHttpLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlHttpLogic(); + } + return m_Current; + } + } + + /// <summary> + /// 璇锋眰鍦板潃 + /// </summary> + public string RequestHttpsHost = "https://test-gz.hdlcontrol.com"; + /// <summary> + /// 榛樿鐨勮闂湴鍧�(涓婇潰鐨勯偅涓細鍙樼殑) + /// </summary> + private const string DefultHttpsHost = "https://test-gz.hdlcontrol.com"; + + #endregion + + #region 鈻� Http璇锋眰瀹炶_______________________ + + /// <summary> + /// 璇锋眰鏈嶅姟鍣ㄦ柟娉� + /// </summary> + /// <param name="i_RequestName">璁块棶鍦板潃</param> + /// <param name="i_method">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="i_bodyObj">鎵胯浇鍦╞ody閲岄潰鐨勭被瀵硅薄</param> + /// <param name="i_dicQueryTip">瀛樻斁鏂囨。涓婃爣绛句负銆恞uery銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_dicPathTip">瀛樻斁鏂囨。涓婃爣绛句负銆恜ath銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_checkMode">褰撴帴鍙i渶瑕佸尯鍒嗐�愪富璐﹀彿銆戝拰銆愮鐞嗗憳銆戞椂,璇烽�夋嫨銆怉璐﹀彿鏉冮檺銆�</param> + /// <param name="i_setAgain">褰撳彂閫佸け璐ユ椂,鏄惁閲嶅彂,榛樿涓嶉噸鍙�</param> + /// <param name="i_timeout">瓒呮椂(绉�),榛樿3绉�</param> + /// <param name="i_isBasicService">鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)</param> + /// <returns>寰楀埌鍝嶅簲鐨勬暟鎹�</returns> + public ResponsePack RequestResponseFromZigbeeHttps(string i_RequestName, Method i_method, + object i_bodyObj, Dictionary<string, object> i_dicQueryTip = null, Dictionary<string, object> i_dicPathTip = null, + CheckMode i_checkMode = CheckMode.A涓嶆娴�, bool i_setAgain = false, int i_timeout = 3, bool i_isBasicService = false) + { + //璇锋眰Url鐨勫畬鎴愯矾寰� + var result = this.RequestByteFromZigbeeHttps(i_RequestName, i_method, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_setAgain, i_timeout, i_isBasicService); + //杞崲鏁版嵁涓� ResponsePack + return this.ConvertData(result); + } + + /// <summary> + /// 璁块棶鎸囧畾鎺ュ彛锛屽苟鐩存帴杩斿洖鎺ュ彛杩斿洖鐨勬瘮鐗癸紝瀛樺湪閿欒淇℃伅鏃讹紝杩斿洖null + /// </summary> + /// <returns>杩斿洖锛氬苟鐩存帴杩斿洖鎺ュ彛杩斿洖鐨勬瘮鐗癸紝瀛樺湪閿欒淇℃伅鏃讹紝杩斿洖null</returns> + /// <param name="i_RequestName">璁块棶鍦板潃</param> + /// <param name="i_method">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="i_bodyObj">鎵胯浇鍦╞ody閲岄潰鐨勭被瀵硅薄</param> + /// <param name="i_dicQueryTip">瀛樻斁鏂囨。涓婃爣绛句负銆恞uery銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_dicPathTip">瀛樻斁鏂囨。涓婃爣绛句负銆恜ath銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_checkMode">褰撴帴鍙i渶瑕佸尯鍒嗐�愪富璐﹀彿銆戝拰銆愮鐞嗗憳銆戞椂,璇烽�夋嫨銆怉璐﹀彿鏉冮檺銆�</param> + /// <param name="i_setAgain">褰撳彂閫佸け璐ユ椂,鏄惁閲嶅彂,榛樿涓嶉噸鍙�</param> + /// <param name="i_timeout">瓒呮椂(绉�),榛樿3绉�</param> + /// <param name="i_isBasicService">鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)</param> + public byte[] RequestByteFromZigbeeHttps(string i_RequestName, Method i_method, + object i_bodyObj, Dictionary<string, object> i_dicQueryTip = null, Dictionary<string, object> i_dicPathTip = null, + CheckMode i_checkMode = CheckMode.A涓嶆娴�, bool i_setAgain = false, int i_timeout = 3, bool i_isBasicService = false) + { + //璇锋眰Url鐨勫畬鎴愯矾寰� + var fullUrl = RequestHttpsHost + "/" + i_RequestName; + //璇锋眰token + var httpToken = this.GetHttpToken(i_checkMode); + //鑾峰彇浠庢帴鍙i偅閲屽彇鍒扮殑姣旂壒鏁版嵁 + var revertObj = this.DoRequestZigbeeHttps(fullUrl, httpToken, i_method, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_timeout, i_isBasicService); + + if (revertObj == null) + { + if (i_setAgain == false) + { + //褰撳墠鏃犳硶璁块棶缃戠粶 + return null; + } + revertObj = RequestByteFromZigbeeHttpsAgain(fullUrl, i_method, httpToken, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_timeout, i_isBasicService); + if (revertObj == null) + { + return null; + } + } + return revertObj; + } + + /// <summary> + /// 绉佹湁绫诲瀷:浠庢柊鍙戦��(鎳傜殑浜鸿嚜鐒舵噦锛屽緢闅捐В閲婃竻妤�) + /// </summary> + /// <param name="i_fullUrl">璇锋眰Url鐨勫畬鎴愯矾寰�</param> + /// <param name="i_method">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="i_token">token</param> + /// <param name="i_bodyObj">鎵胯浇鍦╞ody閲岄潰鐨勭被瀵硅薄</param> + /// <param name="i_dicQueryTip">浜戠鏂囨。涓婃爣绛句负銆恞uery銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_dicPathTip">浜戠鏂囨。涓婃爣绛句负銆恜ath銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_checkMode">褰撴帴鍙i渶瑕佸尯鍒嗐�愪富璐﹀彿銆戝拰銆愮鐞嗗憳銆戞椂,璇烽�夋嫨銆怉璐﹀彿鏉冮檺銆�</param> + /// <param name="i_timeout">瓒呮椂(绉�)</param> + /// <param name="i_isBasicService">鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)</param> + /// <returns></returns> + private byte[] RequestByteFromZigbeeHttpsAgain(string i_fullUrl, Method i_method, string i_token, + object i_bodyObj, Dictionary<string, object> i_dicQueryTip, Dictionary<string, object> i_dicPathTip, + CheckMode i_checkMode, int i_timeout, bool i_isBasicService) + { + byte[] responsePack = null; + int count = 0; + while (true) + { + System.Threading.Thread.Sleep(2000); + + if (HdlCheckLogic.Current.IsAccountLoginOut() == true) + { + //濡傛灉宸茬粡閫�鍑轰簡鐧诲綍 + return null; + } + //璋冪敤鎺ュ彛 + responsePack = this.DoRequestZigbeeHttps(i_fullUrl, i_token, i_method, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_timeout, i_isBasicService); + if (responsePack != null) + { + break; + } + count++; + if (count == 1) + { + //绠椾簡,鐩墠灏卞彧閲嶅彂涓�娆″ソ浜� + break; + } + } + return responsePack; + } + + /// <summary> + /// 璇锋眰鏈嶅姟鍣ㄦ柟娉�,鎸囧畾涓�涓猆rl,鍜岃姹傛柟娉曪紝鏁版嵁锛孋ookie锛屽緱鍒板搷搴旂殑鏁版嵁 + /// </summary> + /// <param name="i_requestFullUrl">璇锋眰Url鐨勫畬鎴愯矾寰�</param> + /// <param name="i_token">token(璇峰嬁浼犲叆闀垮害涓�0鐨勫瓧绗︿覆,鍏奸【璁块棶闈炴渤涓滅殑缃戝潃,杩欓噷濡傛灉涓簄ull,浠h〃璁块棶鐨勬槸闈炴渤涓滅殑缃戝潃)</param> + /// <param name="i_method">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="i_bodyObj">鎵胯浇鍦╞ody閲岄潰鐨勭被瀵硅薄</param> + /// <param name="i_dicQueryTip">瀛樻斁鏂囨。涓婃爣绛句负銆恞uery銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_dicPathTip">瀛樻斁鏂囨。涓婃爣绛句负銆恜ath銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_checkMode">褰撴帴鍙i渶瑕佸尯鍒嗐�愪富璐﹀彿銆戝拰銆愮鐞嗗憳銆戞椂,璇烽�夋嫨銆怉璐﹀彿鏉冮檺銆�</param> + /// <param name="i_timeout">瓒呮椂(绉�)</param> + /// <param name="i_isBasicService">鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)</param> + /// <returns>寰楀埌鍝嶅簲鐨勬暟鎹�</returns> + public byte[] DoRequestZigbeeHttps(string i_requestFullUrl, string i_token, Method i_method, + object i_bodyObj, Dictionary<string, object> i_dicQueryTip, Dictionary<string, object> i_dicPathTip, + CheckMode i_checkMode, int i_timeout, bool i_isBasicService) + { + //HttpWebRequest鐨勮秴鏃舵椂闂�,濡傛灉璁剧疆浣庝簬15绉�,鍦ㄦ病缃戠殑鎯呭喌涓嬶紝寰堝ぇ鍑犵巼瀹冪殑瓒呮椂鏃堕棿澶т簬15绉� + //鎵�浠ユ墠杩欐牱鏁� + byte[] result = null; + bool canBreak = false; + + new System.Threading.Thread(() => + { + try + { + RestClient client = new RestClient(i_requestFullUrl); + RestRequest request = new RestRequest(i_method); + request.Timeout = i_timeout * 1000; + request.AddHeader("content-type", "application/json"); + //杩欎釜涓滆タ鏄痶oken + if (i_token != null) + { + //Token鍓嶉潰瑕佸姞涓婅繖涓笢瑗� + request.AddHeader("authorization", Common.Config.Instance.HeaderPrefix + i_token); + //鍥哄畾涓�2,浠h〃鏄痾igbeeApp + request.AddHeader("clientType", "2"); + } + + //鍔犲叆鍒癇ody閲岄潰鐨勬暟鎹� + if (i_bodyObj != null) + { + if (i_bodyObj is byte[]) + { + //杩欎釜涓滆タ搴旇鏄枃浠�,涓嶈兘鍙嶅簭鍒楀寲,涓嶇劧鏁版嵁鍙兘浼氫涪澶� + request.AddParameter("application/json", i_bodyObj, ParameterType.RequestBody); + } + else if (i_isBasicService == true) + { + //璁块棶鍩虹鏈嶅姟鎺ュ彛(涓轰簡閬垮厤杩囧鐨勮绠卞拰鎷嗙,杩欐牱鏁翠竴涓猠lse if鍑烘潵) + string strBody = this.GetSignRequestJson(JsonConvert.SerializeObject(i_bodyObj)); + request.AddParameter("application/json", strBody, ParameterType.RequestBody); + } + else + { + string strBody = JsonConvert.SerializeObject(i_bodyObj); + request.AddParameter("application/json", strBody, ParameterType.RequestBody); + } + } + else + { + if (i_isBasicService == true) + { + //璁块棶鍩虹鏈嶅姟鎺ュ彛(涓轰簡閬垮厤杩囧鐨勮绠卞拰鎷嗙,杩欐牱鏁翠竴涓猠lse if鍑烘潵) + string strBody = this.GetSignRequestJson("{}"); + request.AddParameter("application/json", strBody, ParameterType.RequestBody); + } + } + + //娣诲姞鍒板弬鏁伴噷闈㈢殑鏁版嵁 + if (i_dicQueryTip != null) + { + foreach (string dataKey in i_dicQueryTip.Keys) + { + if (i_dicQueryTip[dataKey] != null) + { + request.AddQueryParameter(dataKey.Trim(), i_dicQueryTip[dataKey].ToString()); + } + } + } + //鎷兼帴鍒板湴鍧�涓婄殑鏁版嵁 + if (i_dicPathTip != null) + { + foreach (var dataKey in i_dicPathTip.Keys) + { + if (i_dicPathTip[dataKey] != null) + { + request.AddUrlSegment(dataKey.Trim(), i_dicPathTip[dataKey].ToString()); + } + } + } + + IRestResponse response = client.Execute(request); + if (response != null && response.StatusCode == HttpStatusCode.OK) + { + result = response.RawBytes; + } + canBreak = true; + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ConnectFailure//鐢辨湁缃戠粶鍒囨崲鍒版棤缃戠粶鏃惰Е鍙� + || e.Status == WebExceptionStatus.Timeout//瓒呮椂 + || e.Status == WebExceptionStatus.NameResolutionFailure)//鏈韩灏辨槸鏃犵綉缁滄椂鍚姩鏃惰Е鍙� + { + } + canBreak = true; + } + catch (Exception e) + { + canBreak = true; + } + }) + { IsBackground = true }.Start(); + + int timeCount = (i_timeout * 1000) / 20; + while (canBreak == false && timeCount > 0) + { + System.Threading.Thread.Sleep(20); + timeCount--; + } + //鑷姩妫�娴婽oken鏄惁宸茬粡杩囨湡 + return this.CheckTokenIsTimeOut(i_requestFullUrl, i_method, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_timeout, i_isBasicService, result); + } + + #endregion + + #region 鈻� 绗笁鏂规帴鍙h闂甠____________________ + + /// <summary> + /// 绗笁鏂规帴鍙h闂� + /// </summary> + /// <param name="requestFullUrl">璇锋眰Url鐨勫畬鎴愯矾寰�</param> + /// <param name="contentType">text/html 鎴栬�� application/json</param> + /// <param name="requestMethod">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="timeout">瓒呮椂,榛樿5绉�</param> + /// <returns>寰楀埌鍝嶅簲鐨勬暟鎹�</returns> + public byte[] RequestThridPartyHttps(string requestFullUrl, string contentType = "text/html", string requestMethod = "GET", int timeout = 5) + { + try + { + //鍒濆鍖栨柊鐨剋ebRequst + //1锛� 鍒涘缓httpWebRequest瀵硅薄 + var webRequest = (HttpWebRequest)WebRequest.Create(new Uri(requestFullUrl)); + + //2锛� 鍒濆鍖朒ttpWebRequest瀵硅薄 + webRequest.Method = requestMethod; + webRequest.Timeout = timeout * 1000; + //鍙栨秷浣跨敤浠g悊璁块棶 + webRequest.Proxy = null; + webRequest.UseDefaultCredentials = false; + webRequest.ContentType = contentType; + + //4锛� 璇诲彇鏈嶅姟鍣ㄧ殑杩斿洖淇℃伅 + var response = (HttpWebResponse)webRequest.GetResponse(); + using (var stream = response.GetResponseStream()) + { + if (stream == null) + { + return null; + } + var ms = new System.IO.MemoryStream(); + var bytes = new byte[1024]; + var len = int.MaxValue; + while (stream.CanRead && 0 < len) + { + len = stream.Read(bytes, 0, bytes.Length); + ms.Write(bytes, 0, len); + } + return ms.ToArray(); + } + } + catch + { + return null; + } + } + + #endregion + + #region 鈻� 浜戠璁块棶瀵嗗寵_______________________ + + /// <summary> + /// appKey(璁块棶浜戠鍥哄畾鐨勪笢瑗�) + /// </summary> + private const string APP_KEY = "HDL-HOME-APP-TEST"; + /// <summary> + /// 鎴戜篃涓嶇煡閬撹繖鏄粈涔堥涓滆タ + /// </summary> + private const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; + /// <summary> + /// 鑾峰彇褰撳墠鏃堕棿鎴冲��(璁块棶浜戠浣跨敤) + /// </summary> + /// <returns></returns> + private string GetTimestamp() + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 褰撳湴鏃跺尯 + return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 鐩稿樊绉掓暟 + } + + /// <summary> + /// MD5鍔犲瘑 + /// </summary> + /// <param name="signstr"></param> + /// <returns></returns> + private string SignMD5Encrypt(string s) + { + byte[] sign = System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(s)); + string signstr = string.Empty; + foreach (byte item in sign) + { + signstr += item.ToString("X2"); + } + return signstr.ToLower(); + } + + /// <summary> + /// 鍩虹鏈嶅姟鐨勬帴鍙i兘瑕佹牎楠宻ign,璁$畻sign绛惧悕 + /// </summary> + /// <param name="i_BodyData">body鐨勬暟鎹�</param> + /// <returns></returns> + private string GetSignRequestJson(string i_BodyData) + { + try + { + //1. 灏唌odel瀹炰綋杞负Dictionary<string, object> + var paramDictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(i_BodyData); + //2. 璁$畻sign + if (paramDictionary != null) + { + paramDictionary.Add("appKey", APP_KEY); + paramDictionary.Add("timestamp", GetTimestamp()); + //2.1 瀛楀吀鍗囧簭 + paramDictionary = paramDictionary.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); + //2.2 鎷兼帴鎸塙RL閿�煎 + string str = string.Empty; + foreach (KeyValuePair<string, object> item in paramDictionary) + { + if (item.Value == null) + { + //涓嶆牎楠� + continue; + } + string myValue = item.Value.ToString(); + if (myValue == string.Empty) + { + //绌哄瓧绗︿篃涓嶆牎楠� + continue; + } + if (item.Value is bool) + { + //浜戠閭e府娌欓洉璇碽ool绫诲瀷蹇呴』鐢ㄥ皬鍐� + myValue = myValue.ToLower(); + } + str += item.Key + "=" + myValue + "&"; + } + //2.3 鎷兼帴SECRET_KEY + str = str.Substring(0, str.Length - 1) + SECRET_KEY; + //2.4 MD5杞崲+杞皬鍐� + var signstr = SignMD5Encrypt(str); + paramDictionary.Add("sign", signstr); + return JsonConvert.SerializeObject(paramDictionary); + } + else + { + return ""; + } + } + catch + { + return ""; + } + } + + #endregion + + #region 鈻� 鑷姩妫�娴婽oken______________________ + + /// <summary> + /// 鑷姩妫�娴婽oken鏄惁宸茬粡杩囨湡 + /// </summary> + /// <param name="i_requestFullUrl">璇锋眰Url鐨勫畬鎴愯矾寰�</param> + /// <param name="i_method">POST 鎴栬�� GET 绛夌瓑</param> + /// <param name="i_bodyObj">鎵胯浇鍦╞ody閲岄潰鐨勭被瀵硅薄</param> + /// <param name="i_dicQueryTip">瀛樻斁鏂囨。涓婃爣绛句负銆恞uery銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_dicPathTip">瀛樻斁鏂囨。涓婃爣绛句负銆恜ath銆戠殑鍙橀噺,鏃犳鏍囩,鍒欒璁剧疆涓簄ull</param> + /// <param name="i_checkMode">褰撴帴鍙i渶瑕佸尯鍒嗐�愪富璐﹀彿銆戝拰銆愮鐞嗗憳銆戞椂,璇烽�夋嫨銆怉璐﹀彿鏉冮檺銆�</param> + /// <param name="i_timeout">瓒呮椂(绉�)</param> + /// <param name="i_isBasicService">鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)</param> + /// <param name="i_result">鎺ュ彛杩斿洖鐨勬暟鎹�</param> + private byte[] CheckTokenIsTimeOut(string i_requestFullUrl, Method i_method, + object i_bodyObj, Dictionary<string, object> i_dicQueryTip, Dictionary<string, object> i_dicPathTip, + CheckMode i_checkMode, int i_timeout, bool i_isBasicService, byte[] i_result) + { + if (i_result == null || i_result.Length == 0 || i_result[0] != '{' || i_result[i_result.Length - 1] != '}') + { + //浠ヤ笂閮戒笉鏄瑙勭殑json + return i_result; + } + var result = this.ConvertData(i_result); + if (result == null) + { + return i_result; + } + if (result.Code == HttpMessageEnum.A绻佸繖 || result.Code == HttpMessageEnum.A瓒呮椂) + { + HdlMessageLogic.Current.ShowNetCodeTipMsg(ShowNetCodeMode.YES, result); + return null; + } + + if (result.Code == HttpMessageEnum.A40001 //杩欎釜鏄痶oken杩囨湡 + || result.Code == HttpMessageEnum.A10006) //杩欎釜鏄痶oken涓嶅鍔� + { + bool seccess = false; + if (i_checkMode == CheckMode.A璐﹀彿鏉冮檺) + { + //閲嶆柊鍒锋柊涓讳汉鐨則oken + seccess = HdlAccountLogic.Current.InitMasterToken(); + } + else + { + //杩欎釜鏄痶oken杩囨湡 + var reponse = HdlAccountLogic.Current.LoginByRefreshToken(); + if (reponse == null || reponse.Code != HttpMessageEnum.A鎴愬姛) + { + seccess = false; + } + } + //濡傛灉鍒锋柊token澶辫触,鍒欓噸鏂扮櫥闄� + if (seccess == false) + { + HdlThreadLogic.Current.RunMain(() => + { + //鐧婚檰Token宸茬粡杩囨湡,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uLoginTokenIsTimeOutPleaseLoginAgain); + HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, msg); + + HdlAccountLogic.Current.ReLoginAgain(HdlUserCenterResourse.UserInfo.Account); + }); + return null; + } + + //閲嶆柊璋冪敤鎺ュ彛 + var httpToken = this.GetHttpToken(i_checkMode); + return this.DoRequestZigbeeHttps(i_requestFullUrl, Common.Config.Instance.Token, i_method, i_bodyObj, i_dicQueryTip, i_dicPathTip, i_checkMode, i_timeout, i_isBasicService); + } + return i_result; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鑾峰彇鎺ュ彛璁块棶鐨則oken + /// </summary> + /// <param name="i_checkMode">鏄惁妫�娴嬫潈闄�</param> + /// <returns></returns> + public string GetHttpToken(CheckMode i_checkMode) + { + if (i_checkMode == CheckMode.A涓嶆娴�) + { + return Common.Config.Instance.Token; + } + + if (HdlUserCenterResourse.ResidenceOption.AuthorityNo == 2) + { + //绠$悊鍛樺垯浣跨敤涓讳汉鐨則oken + return Common.Config.Instance.MasterToken; + } + return Common.Config.Instance.Token; + } + + /// <summary> + /// 閲嶇疆浜戠榛樿鐨勮闂湴鍧� + /// </summary> + public void ResetDefultHttpsHost() + { + this.RequestHttpsHost = DefultHttpsHost; + } + + /// <summary> + /// 杞崲鏁版嵁 + /// </summary> + /// <param name="i_result">浜戠璁块棶鐨刡yte鏁版嵁(涓嶆槸json鏁版嵁涓嶈璋冪敤)</param> + /// <returns></returns> + public ResponsePack ConvertData(byte[] i_result) + { + if (i_result == null) + { + return null; + } + try + { + var resultData = Encoding.UTF8.GetString(i_result); + var data = JsonConvert.DeserializeObject<ResponsePack>(resultData); + return data; + } + catch { } + + return null; + } + + #endregion + } +} -- Gitblit v1.8.0