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;
}
}
}