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