using Newtonsoft.Json.Linq; using QWPlatform.SystemLibrary.LogManager; using System; using QWPlatform.SystemLibrary; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using PMS.Plugins.PluginsModels; namespace PMS.Plugins.Common { /// /// 微信工具类 /// public static class WechatHelper { private static Logger Log = Logger.Instance; /// /// 微信get请求 /// /// 带参数拼接URL地址 /// public static dynamic InvokeMedicalWebApiMethod(string url) { try { var client = new HttpClient(); var wx_result = client.GetAsync(url).Result; if (!wx_result.IsSuccessStatusCode) return string.Empty; var result = wx_result.Content.ReadAsStringAsync().Result; return result; } catch (Exception ex) { Logger.Instance.Error("微信get请求:", ex); } return null; } /// /// 微信Post请求 /// /// json格式数据 /// 请求地址 /// 请求格式类型 /// public static string GetResponseData(string json_data, string url, string mediaType) { var client = new HttpClient(); var content = new StringContent(json_data, Encoding.UTF8, mediaType); var statereslut = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result; JObject jResult = JObject.Parse(statereslut); string strResult = jResult.ToString(); return strResult; } /// /// 获取公众号token /// /// /// /// public static WxAccessTokenInfo GetAccessToken(string appId, string appSecret) { var cacheData = new WxAccessTokenInfo(); try { cacheData = (WxAccessTokenInfo)HashtableHelper.GetCacheIitems("GetAccessToken");//获取缓存中的GetAccessToken|失效时间 if (cacheData == null) { cacheData = GetNewAccessToken(appId, appSecret); } else { if (Convert.ToDateTime(cacheData.access_token_expire_time) < DateTime.Now)//时间已经过期 { cacheData = GetNewAccessToken(appId, appSecret); } Logger.Instance.Info("微信公众号缓存的信息:" + cacheData.access_token + "|" + cacheData.access_token_expire_time); } } catch (Exception ex) { cacheData = GetNewAccessToken(appId, appSecret); Logger.Instance.Error("获取公众号token:", ex); } return cacheData; } /// /// 获取新GetNewAccessToken /// /// access_token private static WxAccessTokenInfo GetNewAccessToken(string appId, string appSecret) { WxAccessTokenInfo wx = new WxAccessTokenInfo(); try { var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret); var client = new HttpClient(); var result = client.GetAsync(url).Result; if (!result.IsSuccessStatusCode) return wx; var wxInfo = result.Content.ReadAsStringAsync().Result; Logger.Instance.Info("获取微信Token【21】:" + wxInfo); JObject jObject = JObject.Parse(wxInfo); wx.access_token = jObject["access_token"].ToString(); wx.access_token_expire_time = DateTime.Now.AddSeconds(7100); HashtableHelper.AddCacheIitems("GetAccessToken", wx);//当前时间加上7100秒 } catch (Exception ex) { Logger.Instance.Error("获取公众号新GetNewAccessToken:", ex); } return wx; } /// /// jsTickect----① /// /// 微信token /// public static WxTickectInfo GetTickect(string access_token) { var cacheData = (WxTickectInfo)HashtableHelper.GetCacheIitems("GetTickect");//获取缓存中的GetAccessToken|失效时间 try { if (cacheData == null) { cacheData = GetNewTickect(access_token); } else { if (Convert.ToDateTime(cacheData.access_token_expire_time) < DateTime.Now)//时间已经过期 { cacheData = GetNewTickect(access_token); } } } catch (Exception ex) { Log.Error("获取GetTickect异常:" + ex.Message); } return cacheData; } /// /// 获取新的GetNewTickect /// /// /// private static WxTickectInfo GetNewTickect(string access_token) { WxTickectInfo wx = new WxTickectInfo(); try { var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token); var client = new HttpClient(); var result = client.GetAsync(url).Result; if (!result.IsSuccessStatusCode) return wx; JObject jObject = JObject.Parse(result.Content.ReadAsStringAsync().Result); wx.js_ticket = jObject["ticket"].ToString(); wx.access_token_expire_time = DateTime.Now.AddSeconds(7100); HashtableHelper.AddCacheIitems("GetTickect", wx);//当前时间加上7100秒 } catch (Exception ex) { Log.Error("获取GetTickect异常:" + ex.Message); } return wx; } /// /// 签名算法 /// /// jsapi_ticket /// 随机字符串(必须与wx.config中的nonceStr相同) /// 时间戳(必须与wx.config中的timestamp相同) /// 当前网页的URL,不包含#及其后面部分(必须是调用JS接口页面的完整URL) /// public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url) { try { var string1Builder = new StringBuilder(); string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&") .Append("noncestr=").Append(noncestr).Append("&") .Append("timestamp=").Append(timestamp).Append("&") .Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url); var string1 = string1Builder.ToString(); return GetSHA1(string1).ToLower(); } catch (Exception ex) { Log.Error("获取GetSignature,签名异常:" + ex.Message); } return "NO"; } private static string GetSHA1(string strSource) { string strResult = ""; //Create System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create(); byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource)); for (int i = 0; i < bytResult.Length; i++) { strResult = strResult + bytResult[i].ToString("X2"); } return strResult; } } }