From 5eeafe3af80bfd88306bd8ad9e76c8f4b51ca35f Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 17 十二月 2020 14:16:20 +0800 Subject: [PATCH] 增加本地发送的重发机制 --- HDL_ON/DAL/Server/HttpUtil.cs | 328 ++++++++++++++++++++++++++---------------------------- 1 files changed, 160 insertions(+), 168 deletions(-) diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs index 154e4b3..512e33b 100644 --- a/HDL_ON/DAL/Server/HttpUtil.cs +++ b/HDL_ON/DAL/Server/HttpUtil.cs @@ -4,14 +4,15 @@ using System.Net; using System.Security.Cryptography; using System.Text; +using HDL_ON.Entity; using RestSharp; -using Shared; namespace HDL_ON.DAL.Server { public class HttpUtil { - #region HttpUtil 鍏ㄥ眬甯搁噺 + + #region **********鍏ㄥ眬甯搁噺********** ///// <summary> ///// API_HTTPS ///// </summary> @@ -35,10 +36,11 @@ #endregion + #region **********缃戠粶璇锋眰灏佽********** /// <summary> - /// 鍥哄畾鍩熷悕 + /// 鍥哄畾鍩熷悕,姝e紡鐜 /// </summary> - //public const string GlobalRequestHttpsHost = "https://center.hdlcontrol.com"; + //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com"; /// <summary> @@ -83,6 +85,27 @@ /// <summary> /// POST璇锋眰鏂规硶 body鍙傛暟 + /// 閽堝浣忓畢鐩稿叧鎺ュ彛灏佽 + /// 璋冪敤浣忓畢褰撳墠鎵�鍦ㄥ尯鍩熷煙鍚� + /// 濡傛灉鏄垎浜綇瀹咃紝浣跨敤涓讳汉鐨則oken杩涜鐩稿叧鎿嶄綔 + /// </summary> + /// <param name="apiPath"></param> + /// <param name="bodyParameterJson"></param> + /// <param name="mTimeout"></param> + /// <returns></returns> + public static ResponsePackNew RequestHttpsPostFroHome(string apiPath, string bodyParameterJson, int mTimeout = 10) + { + string urlHead = DB_ResidenceData.Instance.CurrentRegion.regionUrl; + //var replaceToken = ""; + //if (DB_ResidenceData.residenceData.residecenInfo.IsOthreShare) + //{ + // replaceToken = DB_ResidenceData.residenceData.MasterToken; + //} + return RequestHttps(Method.POST, apiPath, bodyParameterJson, null, null, urlHead, "", mTimeout); + } + + /// <summary> + /// POST璇锋眰鏂规硶 body鍙傛暟 /// </summary> /// <param name="apiPath"></param> /// <param name="bodyParameterJson"></param> @@ -123,34 +146,34 @@ /// <param name="replaceToken"></param> /// <param name="mTimeout"></param> /// <returns></returns> - public static ResponsePackNew RequestHttps(Method method, string apiPath, string bodyParameterJson = null, Dictionary<string, object> queryDictionary = null, Dictionary<string, object> urlSegmentDictionary = null, string urlHead = "", string replaceToken = "", int mTimeout = 10) + static ResponsePackNew RequestHttpsBase(Method method, string apiPath, string bodyParameterJson = null, Dictionary<string, object> queryDictionary = null, Dictionary<string, object> urlSegmentDictionary = null, string urlHead = "", string replaceToken = "", int mTimeout = 10) { #region HttpWebRequest try { - //if (string.IsNullOrEmpty (urlHead)) { - // urlHead = APIInfoConfig.Current.RequestHttpsHost; - //} - //string requestFullUrl = urlHead + apiPath; + if (string.IsNullOrEmpty(urlHead)) + { + urlHead = OnAppConfig.Instance.RequestHttpsHost; + } + string requestFullUrl = urlHead + apiPath; - //**************娴嬭瘯************** - string requestFullUrl = GlobalRequestHttpsHost + apiPath; - //**************娴嬭瘯************** + ////**************娴嬭瘯************** + //string requestFullUrl = GlobalRequestHttpsHost + apiPath; + ////**************娴嬭瘯************** RestClient client = new RestClient(requestFullUrl); RestRequest request = new RestRequest(method); request.Timeout = mTimeout * 1000; request.AddHeader("content-type", "application/json"); - //request.AddHeader ("cache-control", "no-cache"); if (string.IsNullOrEmpty(replaceToken)) { - if (MainPage.LoginUser != null) + if(UserInfo.Current != null) {/* 濡傛灉涓嶉渶瑕侀獙璇乀oken鍙互涓嶇敤浼犲叆 */ - request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString); + request.AddHeader("Authorization", UserInfo.Current.LoginTokenString); } } else @@ -198,8 +221,6 @@ } //*****涓�浜涘垽绌哄鐞�***************** - ////缁熶竴杞垚澶у啓 - //revertObj.StateCode = revertObj.StateCode.ToUpper (); return revertObj; } catch (Exception ex) @@ -226,6 +247,69 @@ } /// <summary> + /// 閫氱敤 璇锋眰鏈嶅姟鍣ㄦ柟娉� + /// 澧炲姞token杩囨湡澶勭悊 + /// </summary> + /// <param name="method"></param> + /// <param name="apiPath"></param> + /// <param name="bodyParameterJson"></param> + /// <param name="queryDictionary"></param> + /// <param name="urlSegmentDictionary"></param> + /// <param name="urlHead"></param> + /// <param name="replaceToken"></param> + /// <param name="mTimeout"></param> + /// <returns></returns> + public static ResponsePackNew RequestHttps(Method method, string apiPath, string bodyParameterJson = null, Dictionary<string, object> queryDictionary = null, Dictionary<string, object> urlSegmentDictionary = null, string urlHead = "", string replaceToken = "", int mTimeout = 10) + { + var responsePackNew = RequestHttpsBase(method, apiPath, bodyParameterJson, queryDictionary, urlSegmentDictionary, urlHead, replaceToken, mTimeout); + //*****************Token杩囨湡澶勭悊***************** + if (responsePackNew.Code == StateCode.TOKEN_EXPIRED) + { + //鍒锋柊Token + if (RefreshToken()) { + return RequestHttpsBase(method, apiPath, bodyParameterJson, queryDictionary, urlSegmentDictionary, urlHead, replaceToken, mTimeout); + } + else + { + return responsePackNew; + } + } + //*****************Token杩囨湡澶勭悊***************** + return responsePackNew; + } + + + /// <summary> + /// 鍒锋柊Token + /// </summary> + /// <returns></returns> + static bool RefreshToken() + { + try + { + var requestJson = GetSignRequestJson(new RefreshTokenObj() + { + refreshToken = UserInfo.Current.RefreshToken, + }); + var revertObj = RequestHttpsBase(Method.POST, NewAPI.API_POST_Login, requestJson); + if (revertObj.Code == StateCode.SUCCESS) + { + var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes>(revertObj.Data.ToString()); + UserInfo.Current.LoginTokenString = revertData.headerPrefix + revertData.accessToken; + UserInfo.Current.RefreshToken = revertData.refreshToken; + UserInfo.Current.LastTime = DateTime.Now; + UserInfo.Current.SaveUserInfo(); + return true; + } + return false; + } + catch + { + return false; + } + } + + /// <summary> /// 涓嬭浇鏂囦欢 璇锋眰鏈嶅姟鍣ㄦ柟娉� /// </summary> /// <param name="apiPath"></param> @@ -240,26 +324,26 @@ #region RestRequest try { - //if (string.IsNullOrEmpty (urlHead)) { - // urlHead = APIInfoConfig.Current.RequestHttpsHost; - //} - //string requestFullUrl = urlHead + apiPath; + if (string.IsNullOrEmpty(urlHead)) + { + urlHead = OnAppConfig.Instance.RequestHttpsHost; + } + string requestFullUrl = urlHead + apiPath; - //**************娴嬭瘯************** - string requestFullUrl = GlobalRequestHttpsHost + apiPath; - //**************娴嬭瘯************** + ////**************娴嬭瘯************** + //string requestFullUrl = GlobalRequestHttpsHost + apiPath; + ////**************娴嬭瘯************** RestClient client = new RestClient(requestFullUrl); - //client.Timeout = mTimeout * 1000; RestRequest request = new RestRequest(Method.POST); request.Timeout = mTimeout * 1000; request.AddHeader("content-type", "application/json"); if (string.IsNullOrEmpty(replaceToken)) { - if (MainPage.LoginUser != null) + if ( UserInfo.Current != null) {/* 濡傛灉涓嶉渶瑕侀獙璇乀oken鍙互涓嶇敤浼犲叆 */ - request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString); + request.AddHeader("Authorization", UserInfo.Current.LoginTokenString); } } else @@ -310,14 +394,15 @@ try { - //if (string.IsNullOrEmpty (urlHead)) { - // urlHead = APIInfoConfig.Current.RequestHttpsHost; - //} - //string requestFullUrl = urlHead + apiPath; + if (string.IsNullOrEmpty(urlHead)) + { + urlHead = OnAppConfig.Instance.RequestHttpsHost; + } + string requestFullUrl = urlHead + apiPath; - //**************娴嬭瘯************** - string requestFullUrl = GlobalRequestHttpsHost + apiPath; - //**************娴嬭瘯************** + ////**************娴嬭瘯************** + //string requestFullUrl = GlobalRequestHttpsHost + apiPath; + ////**************娴嬭瘯************** RestClient client = new RestClient(requestFullUrl); //client.Timeout = mTimeout * 1000; @@ -328,9 +413,9 @@ if (string.IsNullOrEmpty(replaceToken)) { - if (MainPage.LoginUser != null) + if ( UserInfo.Current != null) {/* 濡傛灉涓嶉渶瑕侀獙璇乀oken鍙互涓嶇敤浼犲叆 */ - request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString); + request.AddHeader("Authorization", UserInfo.Current.LoginTokenString); } } else @@ -398,6 +483,40 @@ } /// <summary> + /// 涓嬭浇鏂囦欢 璇锋眰鏈嶅姟鍣ㄦ柟娉� + /// </summary> + /// <param name="apiPath"></param> + /// <param name="bodyParameterJson"></param> + /// <param name="queryDictionary"></param> + /// <param name="urlHead"></param> + /// <param name="replaceToken"></param> + /// <param name="mTimeout"></param> + /// <returns></returns> + public static byte[] HttpsDownload(string requestFullUrl, int mTimeout = 30) + { + #region RestRequest + try + { + RestClient client = new RestClient(requestFullUrl); + RestRequest request = new RestRequest(Method.GET); + request.Timeout = mTimeout * 1000; + + IRestResponse response = client.Execute(request); + return response.RawBytes; + } + catch (Exception ex) + { + HDL_ON.Utlis.WriteLine(ex.Message); + return null; + } + #endregion + + } + + #endregion + + #region **********绛惧悕鏍¢獙********** + /// <summary> /// /// </summary> const string APP_KEY = "HDL-HOME-APP-TEST"; @@ -413,7 +532,8 @@ static string GetTimestamp() { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 褰撳湴鏃跺尯 - return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 鐩稿樊绉掓暟 + return ((long)(DateTime.Now - startTime).TotalMilliseconds).ToString(); // 鐩稿樊绉掓暟 + //return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 鐩稿樊绉掓暟 } /// <summary> @@ -479,7 +599,8 @@ //2.4 MD5杞崲+杞皬鍐� var signstr = SignMD5Encrypt(str); paramDictionary.Add("sign", signstr); - return Newtonsoft.Json.JsonConvert.SerializeObject(paramDictionary); + var signResult = Newtonsoft.Json.JsonConvert.SerializeObject(paramDictionary); + return signResult; } else { @@ -492,6 +613,7 @@ } } + #endregion } /// <summary> @@ -528,134 +650,4 @@ } - - -} - -namespace Shared.Securitys -{ - /// <summary> - /// - /// </summary> - public partial class EncryptionService - { - #region 鍔犲瘑 - /// <summary> - /// 鍔犲瘑涓婚涓築ase64 - /// </summary> - /// <param name="pToEncrypt"></param> - /// <param name="key"></param> - /// <returns></returns> - public static string AesEncryptTopic(string pToEncrypt, string key) - { - if (string.IsNullOrEmpty(pToEncrypt)) return null; - if (string.IsNullOrEmpty(key)) return pToEncrypt; - //闇�瑕佸姞瀵嗗唴瀹圭殑鏄庢枃娴� - Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt); - - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - RijndaelManaged rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES鍔犲瘑鍣ㄥ璞� - ICryptoTransform cTransform = rm.CreateEncryptor(); - - //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 - Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - - //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓� - return Convert.ToBase64String(resultArray, 0, resultArray.Length); - } - - - /// <summary> - /// 鍔犲瘑璐熻浇涓轰簩杩涘埗娴� - /// </summary> - /// <param name="toEncryptArray"></param> - /// <param name="key"></param> - /// <returns></returns> - public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key) - { - if (string.IsNullOrEmpty(key)) return toEncryptArray; - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - var rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES鍔犲瘑鍣ㄥ璞� - var cTransform = rm.CreateEncryptor(); - //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 - return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - } - #endregion - - - #region 瑙e瘑 - /// <summary> - /// 瑙e瘑涓婚鏁版嵁 - /// </summary> - /// <param name="pToDecrypt"></param> - /// <param name="key"></param> - /// <returns></returns> - public static string AesDecryptTopic(string pToDecrypt, string key) - { - //AES瀵嗘枃Base64杞垚瀛楃涓� - Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt); - - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - RijndaelManaged rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES瑙e瘑鍣ㄥ璞� - ICryptoTransform cTransform = rm.CreateDecryptor(); - - //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� - Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - - //杞垚瀛楃涓� - return Encoding.UTF8.GetString(resultArray); - } - - /// <summary> - /// 閲囩敤Aes瑙e瘑璐熻浇鏁版嵁 - /// </summary> - /// <param name="toEncryptArray"></param> - /// <param name="key"></param> - /// <returns></returns> - public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key) - { - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - var rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES瑙e瘑鍣ㄥ璞� - var cTransform = rm.CreateDecryptor(); - - //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� - return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - } - #endregion - - - - } } -- Gitblit v1.8.0