123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- 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
- {
- /// <summary>
- /// 微信工具类
- /// </summary>
- public static class WechatHelper
- {
- private static Logger Log = Logger.Instance;
- /// <summary>
- /// 微信get请求
- /// </summary>
- /// <param name="url">带参数拼接URL地址</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 微信Post请求
- /// </summary>
- /// <param name="json_data">json格式数据</param>
- /// <param name="url">请求地址</param>
- /// <param name="mediaType">请求格式类型</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 获取公众号token
- /// </summary>
- /// <param name="appId"></param>
- /// <param name="appSecret"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 获取新GetNewAccessToken
- /// </summary>
- /// <returns>access_token</returns>
- 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;
- }
- /// <summary>
- /// jsTickect----①
- /// </summary>
- /// <param name="access_token">微信token</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 获取新的GetNewTickect
- /// </summary>
- /// <param name="access_token"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 签名算法
- /// </summary>
- /// <param name="jsapi_ticket">jsapi_ticket</param>
- /// <param name="noncestr">随机字符串(必须与wx.config中的nonceStr相同)</param>
- /// <param name="timestamp">时间戳(必须与wx.config中的timestamp相同)</param>
- /// <param name="url">当前网页的URL,不包含#及其后面部分(必须是调用JS接口页面的完整URL)</param>
- /// <returns></returns>
- 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;
- }
- }
- }
|