JLChen
2020-12-09 e87985ec1dcb69beedaf9f95e8e7aba14b7c08d6
HDL_ON/DAL/Server/HttpUtil.cs
@@ -4,18 +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 全局常量
        /// <summary>
        /// 请求成功的状态码
        /// </summary>
        public const string SUCCESS_CODE = "0";
        ///// <summary>
        ///// API_HTTPS
        ///// </summary>
@@ -40,9 +37,9 @@
        #endregion
        /// <summary>
        /// 固定域名
        /// 固定域名,正式环境
        /// </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>
@@ -84,6 +81,27 @@
        //    }
        //    return mResponsePackNew;
        //}
        /// <summary>
        /// POST请求方法 body参数
        /// 针对住宅相关接口封装
        /// 调用住宅当前所在区域域名
        /// 如果是分享住宅,使用主人的token进行相关操作
        /// </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.residenceData.residecenInfo.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参数
@@ -133,15 +151,16 @@
            try
            {
                //if (string.IsNullOrEmpty (urlHead)) {
                //    urlHead = APIInfoConfig.Current.RequestHttpsHost;
                //}
                //string requestFullUrl = urlHead + apiPath;
                if (string.IsNullOrEmpty(urlHead))
                {
                    urlHead = UserInfo.Current.RequestHttpsHost;
                }
                string requestFullUrl = urlHead + apiPath;
                //**************测试**************
                string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                //**************测试**************
                ////**************测试**************
                //string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                ////**************测试**************
                RestClient client = new RestClient(requestFullUrl);
@@ -152,9 +171,9 @@
                if (string.IsNullOrEmpty(replaceToken))
                {
                    if (MainPage.LoginUser != null)
                    if(UserInfo.Current != null)
                    {/* 如果不需要验证Token可以不用传入 */
                        request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString);
                        request.AddHeader("Authorization",  UserInfo.Current.LoginTokenString);
                    }
                }
                else
@@ -188,6 +207,7 @@
                {
                    try
                    {
                        ResponsePackNew revertObj = new ResponsePackNew() { };
                        revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePackNew>(response.Content);
                        //*****一些判空处理*****************
@@ -208,20 +228,20 @@
                    }
                    catch (Exception ex)
                    {
                        HDL_ON.Common.Utlis.WriteLine(ex.Message);
                        HDL_ON.Utlis.WriteLine(ex.Message);
                        return new ResponsePackNew() { Code = "DATA_EXCEPTION" };
                    }
                }
                else
                {
                    HDL_ON.Common.Utlis.WriteLine(response.Content);
                    HDL_ON.Utlis.WriteLine(response.Content);
                    return new ResponsePackNew() { Code = "NETWORK_ERROR" };
                }
            }
            catch (Exception ex)
            {
                HDL_ON.Common.Utlis.WriteLine(ex.Message);
                HDL_ON.Utlis.WriteLine(ex.Message);
                return new ResponsePackNew() { Code = "NETWORK_ERROR" };
            }
@@ -244,14 +264,15 @@
            #region RestRequest
            try
            {
                //if (string.IsNullOrEmpty (urlHead)) {
                //    urlHead = APIInfoConfig.Current.RequestHttpsHost;
                //}
                //string requestFullUrl = urlHead + apiPath;
                if (string.IsNullOrEmpty(urlHead))
                {
                    urlHead = UserInfo.Current.RequestHttpsHost;
                }
                string requestFullUrl = urlHead + apiPath;
                //**************测试**************
                string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                //**************测试**************
                ////**************测试**************
                //string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                ////**************测试**************
                RestClient client = new RestClient(requestFullUrl);
                //client.Timeout = mTimeout * 1000;
@@ -261,9 +282,9 @@
                if (string.IsNullOrEmpty(replaceToken))
                {
                    if (MainPage.LoginUser != null)
                    if ( UserInfo.Current != null)
                    {/* 如果不需要验证Token可以不用传入 */
                        request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString);
                        request.AddHeader("Authorization",  UserInfo.Current.LoginTokenString);
                    }
                }
                else
@@ -289,7 +310,7 @@
            }
            catch (Exception ex)
            {
                HDL_ON.Common.Utlis.WriteLine(ex.Message);
                HDL_ON.Utlis.WriteLine(ex.Message);
                return null;
            }
            #endregion
@@ -314,14 +335,15 @@
            try
            {
                //if (string.IsNullOrEmpty (urlHead)) {
                //    urlHead = APIInfoConfig.Current.RequestHttpsHost;
                //}
                //string requestFullUrl = urlHead + apiPath;
                if (string.IsNullOrEmpty(urlHead))
                {
                    urlHead = UserInfo.Current.RequestHttpsHost;
                }
                string requestFullUrl = urlHead + apiPath;
                //**************测试**************
                string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                //**************测试**************
                ////**************测试**************
                //string requestFullUrl = GlobalRequestHttpsHost + apiPath;
                ////**************测试**************
                RestClient client = new RestClient(requestFullUrl);
                //client.Timeout = mTimeout * 1000;
@@ -332,9 +354,9 @@
                if (string.IsNullOrEmpty(replaceToken))
                {
                    if (MainPage.LoginUser != null)
                    if ( UserInfo.Current != null)
                    {/* 如果不需要验证Token可以不用传入 */
                        request.AddHeader("Authorization", MainPage.LoginUser.loginTokenString);
                        request.AddHeader("Authorization",  UserInfo.Current.LoginTokenString);
                    }
                }
                else
@@ -380,26 +402,58 @@
                    }
                    catch (Exception ex)
                    {
                        HDL_ON.Common.Utlis.WriteLine(ex.Message);
                        HDL_ON.Utlis.WriteLine(ex.Message);
                        return new ResponsePackNew() { Code = "DATA_EXCEPTION" };
                    }
                }
                else
                {
                    HDL_ON.Common.Utlis.WriteLine(response.Content);
                    HDL_ON.Utlis.WriteLine(response.Content);
                    return new ResponsePackNew() { Code = "NETWORK_ERROR" };
                }
            }
            catch (Exception ex)
            {
                HDL_ON.Common.Utlis.WriteLine(ex.Message);
                HDL_ON.Utlis.WriteLine(ex.Message);
                return new ResponsePackNew() { Code = "NETWORK_ERROR" };
            }
            #endregion
        }
        /// <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
        }
        /// <summary>
        /// 
@@ -417,7 +471,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>
@@ -459,11 +514,25 @@
                    string str = string.Empty;
                    foreach (KeyValuePair<string, object> item in paramDictionary)
                    {
                        //Value为null不参加校验
                        if (item.Value != null)
                        {
                            str += item.Key + "=" + item.Value.ToString() + "&";
                            //Value.ToString()为null或者""也不参加校验
                            if (!string.IsNullOrEmpty(item.Value.ToString()))
                            {
                                //如果是bool类型,要转小写
                                if (item.Value is bool)
                                {
                                    str += item.Key + "=" + item.Value.ToString().ToLower() + "&";
                                }
                                else
                                {
                                    str += item.Key + "=" + item.Value.ToString() + "&";
                                }
                            }
                        }
                    }
                    //2.3 拼接SECRET_KEY
                    str = str.Substring(0, str.Length - 1) + SECRET_KEY;
                    //2.4 MD5转换+转小写
@@ -520,132 +589,4 @@
}
namespace Shared.Securitys
{
    /// <summary>
    ///
    /// </summary>
    public partial class EncryptionService
    {
        #region 加密
        /// <summary>
        /// 加密主题为Base64
        /// </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);
            //将AES生成的密文字节数组转成Base64字符串
            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 解密
        /// <summary>
        /// 解密主题数据
        /// </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解密器对象
            ICryptoTransform cTransform = rm.CreateDecryptor();
            //使用AES将密文流转成明文的字节数组
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            //转成字符串
            return Encoding.UTF8.GetString(resultArray);
        }
        /// <summary>
        /// 采用Aes解密负载数据
        /// </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解密器对象
            var cTransform = rm.CreateDecryptor();
            //使用AES将密文流转成明文的字节数组
            return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        }
        #endregion
    }
}