Tools.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Runtime.Serialization.Json;
  7. using System.Security.Cryptography;
  8. using System.Text;
  9. namespace Common
  10. {
  11. public class Tools
  12. {
  13. //厂商编码:ZHONGLIAN
  14. //厂商名称:中联
  15. //AES密钥:fu7vttF6y4uzdy5L
  16. //校验码 / 授权码:ZLJR2022V
  17. //LogHelper.Info("医生编号");
  18. public static string accessToken = null;
  19. public static string pwd = "fu7vttF6y4uzdy5L";
  20. public static DateTime DateTimes;
  21. //public static string Time = "";//如互今日时间相等,则今日已上传,无需再上传
  22. public static string FormatStr(string str)
  23. {
  24. return str.Replace("\n", "").Replace("\t", "").Replace("\r", "");
  25. }
  26. public static string ReplaceString(string str)
  27. {
  28. return str.Replace("\\", "\\\\").Replace("\"", "\\\"");
  29. }
  30. /// <summary>
  31. /// 将指定文件转换成Base64字符串
  32. /// </summary>
  33. /// <param name="path">文件路径</param>
  34. /// <returns>返回Base64字符串</returns>
  35. public static string FileToBase64Str(string path)
  36. {
  37. string base64Str = string.Empty;
  38. try
  39. {
  40. // 空路径名是不合法的
  41. if (string.IsNullOrEmpty(path))
  42. {
  43. base64Str = null;
  44. return base64Str;
  45. }
  46. // 判断路径是否存在
  47. if (!File.Exists(path))
  48. {
  49. base64Str = null;
  50. return base64Str;
  51. }
  52. using (System.IO.FileStream fileStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read))
  53. {
  54. byte[] bt = new byte[fileStream.Length];
  55. // 调用read读取方法
  56. fileStream.Read(bt, 0, bt.Length);
  57. base64Str = Convert.ToBase64String(bt);
  58. }
  59. }
  60. catch (Exception ex)
  61. {
  62. LogHelper.Error(ex);
  63. }
  64. return base64Str;
  65. }
  66. /// <summary>
  67. /// AES加密 对应java中的 aes/cbc/pkcs5padding 模式的算法
  68. /// </summary>
  69. /// <param name="s">待加密的字符串</param>
  70. /// <param name="sKey">密钥</param>
  71. /// <returns></returns>
  72. public static string AESEncrypt(string str, string Key, string IV)
  73. {
  74. try
  75. {
  76. byte[] keyArray = Encoding.UTF8.GetBytes(Key);
  77. byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
  78. RijndaelManaged rDel = new RijndaelManaged();
  79. rDel.Key = keyArray;
  80. rDel.Mode = CipherMode.CBC;
  81. rDel.Padding = PaddingMode.PKCS7;
  82. rDel.IV = Encoding.UTF8.GetBytes(IV);
  83. ICryptoTransform cTransform = rDel.CreateEncryptor();
  84. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  85. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
  86. }
  87. catch (Exception ex)
  88. {
  89. LogHelper.Error(ex);
  90. }
  91. return "";
  92. }
  93. /// <summary>
  94. /// AES解密 对应java中的 aes/cbc/pkcs5padding 模式的算法
  95. /// </summary>
  96. /// <param name="s">待解密的字符串</param>
  97. /// <param name="sKey">密钥</param>
  98. /// <returns>返回空为解析失败</returns>
  99. public static string AESDecrypt(string str, string key, string IV)
  100. {
  101. try
  102. {
  103. RijndaelManaged rijndaelCipher = new RijndaelManaged();
  104. rijndaelCipher.Mode = CipherMode.CBC;
  105. rijndaelCipher.Padding = PaddingMode.PKCS7;
  106. rijndaelCipher.KeySize = 128;
  107. rijndaelCipher.BlockSize = 128;
  108. byte[] encryptedData = Convert.FromBase64String(str);
  109. byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
  110. byte[] keyBytes = new byte[16];
  111. int len = pwdBytes.Length;
  112. if (len > keyBytes.Length)
  113. len = keyBytes.Length;
  114. System.Array.Copy(pwdBytes, keyBytes, len);
  115. rijndaelCipher.Key = keyBytes;
  116. rijndaelCipher.IV = Encoding.UTF8.GetBytes(IV);
  117. ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
  118. byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
  119. return Encoding.UTF8.GetString(plainText);
  120. }
  121. catch (Exception ex)
  122. {
  123. LogHelper.Error(ex);
  124. }
  125. return "";
  126. }
  127. /// <summary>
  128. /// 异步请求
  129. /// </summary>
  130. /// <param name="num"></param>
  131. /// <param name="action"></param>
  132. //public static void GetDataAsync(string num, Action<IAsyncResult> action)
  133. //{
  134. // //这里需要的是一个string返回类型,int传入参数的委托
  135. // Func<string, Result> func = WSCenterData;
  136. // AsyncCallback callback = ar =>
  137. // {
  138. // try
  139. // {
  140. // action.Invoke(ar);
  141. // }
  142. // catch (Exception ex)
  143. // {
  144. // Log.Info("异常:" + ex.Message, true);
  145. // Log.Info("异常:" + ex.StackTrace, true);
  146. // }
  147. // };
  148. // func.BeginInvoke(num, callback, null);
  149. //}
  150. public static string WSCenterData(string url,string data,string vi,string token = "",int sign = 0)
  151. {
  152. //Result result = new Result();
  153. string srcString = string.Empty;
  154. //string data = "{\"KEY\":\"VALUE\",\"type\":\"JSON\",\"content\":" + str + "}";
  155. //string url = "http://40.26.204.3:8084/phimp-napi/token";
  156. try
  157. {
  158. Encoding myEncoding = Encoding.GetEncoding("UTF-8");
  159. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; //将提交的字符串数据转换成字节数组 //注意提交的编码,这里默认的是Default:系统当前编码
  160. byte[] postData = myEncoding.GetBytes(data); //设置提交的相关参数
  161. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  162. request.Method = "POST";
  163. request.KeepAlive = false;
  164. request.ProtocolVersion = HttpVersion.Version10;
  165. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
  166. //request.ContentType = "text/xml;charset=utf-8";
  167. request.ContentType = "application/json;charset=utf-8";
  168. request.Headers.Add("code", "ZHONGLIAN");
  169. if (sign == 0)
  170. {
  171. string vcode = AESEncrypt("ZLJR2022V", pwd, vi);
  172. request.Headers.Add("validCode", vcode);
  173. }
  174. else
  175. {
  176. request.Headers.Add("accessToken", token);
  177. }
  178. request.Headers.Add("vi", vi);
  179. request.ContentLength = postData.Length;
  180. using (System.IO.Stream writer = request.GetRequestStream())
  181. {
  182. writer.Write(postData, 0, postData.Length);
  183. }
  184. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  185. using (System.IO.Stream sr = response.GetResponseStream())
  186. {
  187. using (StreamReader reader = new StreamReader(sr, myEncoding))
  188. {
  189. srcString = reader.ReadToEnd();
  190. }
  191. }
  192. //result = JSON.JsonToObject<Result>(Tools.FormatStr(srcString), Encoding.UTF8);
  193. }
  194. catch (Exception ex)
  195. {
  196. LogHelper.Info("请求入参:" + data);
  197. LogHelper.Info("请求出参:" + srcString);
  198. LogHelper.Error(ex);
  199. }
  200. //Log.Info("入参:" + data, true);
  201. //Log.Info("出参:" + srcString, true);
  202. return srcString;
  203. }
  204. public static string WSDataToZlsoftInterface(string url, string data)
  205. {
  206. string srcString = string.Empty;
  207. try
  208. {
  209. Encoding myEncoding = Encoding.GetEncoding("UTF-8");
  210. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; //将提交的字符串数据转换成字节数组 //注意提交的编码,这里默认的是Default:系统当前编码
  211. byte[] postData = myEncoding.GetBytes(data); //设置提交的相关参数
  212. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  213. request.Method = "POST";
  214. request.KeepAlive = false;
  215. request.ProtocolVersion = HttpVersion.Version10;
  216. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
  217. //request.ContentType = "text/xml;charset=utf-8";
  218. request.ContentType = "application/json;charset=utf-8";
  219. request.ContentLength = postData.Length;
  220. using (System.IO.Stream writer = request.GetRequestStream())
  221. {
  222. writer.Write(postData, 0, postData.Length);
  223. }
  224. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  225. using (System.IO.Stream sr = response.GetResponseStream())
  226. {
  227. using (StreamReader reader = new StreamReader(sr, myEncoding))
  228. {
  229. srcString = reader.ReadToEnd();
  230. }
  231. }
  232. //result = JSON.JsonToObject<Result>(Tools.FormatStr(srcString), Encoding.UTF8);
  233. }
  234. catch (Exception ex)
  235. {
  236. LogHelper.Info("请求入参:" + data);
  237. LogHelper.Info("请求出参:" + srcString);
  238. LogHelper.Error(ex);
  239. }
  240. //Log.Info("入参:" + data, true);
  241. //Log.Info("出参:" + srcString, true);
  242. return srcString;
  243. }
  244. public static string GuidTo16String()
  245. {
  246. return DateTime.Now.ToString("yyyyMMddHHmmssff");
  247. }
  248. /// <summary>
  249. /// 实体类转换为JSON串
  250. /// </summary>
  251. /// <typeparam name="T">实体类类型</typeparam>
  252. /// <param name="jsonObject">实体类实例</param>
  253. /// <param name="encoding">编码</param>
  254. /// <returns></returns>
  255. public static string ObjectToJson<T>(Object jsonObject, Encoding encoding)
  256. {
  257. string result = String.Empty;
  258. DataContractJsonSerializer serializer = new DataContractJsonSerializer(jsonObject.GetType());
  259. using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
  260. {
  261. serializer.WriteObject(ms, jsonObject);
  262. result = encoding.GetString(ms.ToArray());
  263. }
  264. return result;
  265. }
  266. /// <summary>
  267. /// JSON串转换为实体类
  268. /// </summary>
  269. /// <typeparam name="T">实体类类型</typeparam>
  270. /// <param name="json">JSON串</param>
  271. /// <param name="encoding">编码</param>
  272. /// <returns></returns>
  273. public static T JsonToObject<T>(string json, Encoding encoding)
  274. {
  275. T resultObject = Activator.CreateInstance<T>();
  276. DataContractJsonSerializer serializer = new DataContractJsonSerializer(resultObject.GetType());
  277. using (System.IO.MemoryStream ms = new System.IO.MemoryStream(encoding.GetBytes(json)))
  278. {
  279. resultObject = (T)serializer.ReadObject(ms);
  280. }
  281. return resultObject;
  282. }
  283. }
  284. }