123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using PMS.Plugins.Common;
- using PMS.Plugins.PluginsModels;
- using QWPlatform.SystemLibrary.LogManager;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- namespace PMS.Plugins.WeChart
- {
- public class WeChartMessage
- {
- public static Logger Log = Logger.Instance;
- public static string AppID = ConfigurationManager.AppSettings["AppID"].ToStringEx();//AppID
- public static string AppSecret = ConfigurationManager.AppSettings["AppSecret"].ToStringEx();//AppSecret
- public static string IsWechatPush = ConfigurationManager.AppSettings["IsWechatPush"].ToStringEx();//是否推送消息
-
- /// <summary>
- /// 获取微信用户信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- public static WeChatUserInfo WeChatUserInfo(string code)
- {
-
- var _weChatUserInfo = new WeChatUserInfo();
- try
- {
- Log.Info("获取微信用户信息【0】用户code:" + code);
- var access_token_url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", AppID, AppSecret, code);
- var openid_result = WechatHelper.InvokeMedicalWebApiMethod(access_token_url);
- if (openid_result != null)
- {
- JObject jResult = JObject.Parse(openid_result);
- Logger.Instance.Info("获取微信用户信息【1】获取SNS:" + openid_result);
- JObject jObjectToken = JObject.Parse(openid_result);
- _weChatUserInfo.wx_openid = jObjectToken["openid"].ToString();
- var get_userinfo = UpdateToken(_weChatUserInfo.wx_openid);
- var jump = false;//不用再次请求token
- JObject jObject = JObject.Parse(get_userinfo);
- try
- {
- if (jObject["errcode"].ToString() == "40001")//防止微信无缘无故失效
- {
- jump = true;
- }
- }
- catch (Exception ex)
- {
- _weChatUserInfo.wx_nickname = jObject["nickname"].ToString();
- _weChatUserInfo.sex = jObject["sex"].ToString();
- _weChatUserInfo.headimgurl = jObject["headimgurl"].ToString();
- ///正常返回会在里面抛出异常
- }
- if (jump)//重新获取token,并获取信息
- {
- get_userinfo = UpdateToken(_weChatUserInfo.wx_openid);
- jObject = JObject.Parse(get_userinfo);
- }
- if (jObject["subscribe"].ToString() == "0")//未关注公众号
- {
- _weChatUserInfo.NoAttention = 0;
- }
-
- }
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("可能未关注公众号+获取微信用户信息异常:", ex);
- _weChatUserInfo.NoAttention = 0;
- }
- return _weChatUserInfo;
- }
- /// <summary>
- /// 根据openid获取用户信息
- /// </summary>
- /// <param name="wx_openid"></param>
- /// <returns></returns>
- public static dynamic UpdateToken(string wx_openid)
- {
- var wx_access_token = WechatHelper.GetAccessToken(AppID, AppSecret);
- var access_token_url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", wx_access_token.access_token, wx_openid);
- var get_userinfo = WechatHelper.InvokeMedicalWebApiMethod(access_token_url);//使用openid access_token 获取用户的信息[4]
- return get_userinfo;
- }
- /// <summary>
- /// 发送微信消息
- /// </summary>
- /// <param name="notification"></param>
- /// <returns></returns>
- public static string SendWeChartTempletMessge(WxMessgPush wxMessgPush)
- {
- string strReturn = string.Empty;
- if(IsWechatPush=="0")
- {
- return "推送关闭";
- }
- try
- {
- var cacheData = WechatHelper.GetAccessToken(AppID, AppSecret);
- var wx_access_token = cacheData.access_token;
- //ar wx_access_token = "59_2K4nWDN2YxJKvllR120Bm-Hk70c8WNtbCdTJ78ymQyfjML_83RX35OwcQnedfIIs5ZKlKXWSwXh17_Nc7kxKCk9peN5RuFuWWFpSBL2-XHZ_ErUmN_d_oA8eOyYO6G2MlNTFtJRgTHkqYbTFKPPjAJAAFF";
- string url = @"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + wx_access_token;
- string temp = "{\"touser\": \"" + wxMessgPush.wx_openid + "\"," +
- "\"url\": \"" + wxMessgPush.url + "\", " +
- "\"template_id\": \"" + wxMessgPush.template_id + "\", " +
- "\"topcolor\": \"#FF0000\", " +
- "\"data\": " + wxMessgPush.data + "}";
- //核心代码
- var state = WechatHelper.GetResponseData(temp, @url, "text/json");
- Log.Info("微信公众号准备第一次推送消息【1】:" + url + "\r\n\r\n" + "参数:" + temp + "\r\n\r\n" + "返回结果:" + state);
- JObject jObject = JObject.Parse(state);
- var jump = false;//不用再次请求token
- try
- {
- if (jObject["errcode"].ToString() == "40001")//防止微信无缘无故失效
- {
- jump = true;
- }
- }
- catch (Exception ex)
- {
- ///正常返回会在里面抛出异常
- }
- if (jump)//重新获取token,并获取信息
- {
- WxTickectInfo wx = new WxTickectInfo();
- HashtableHelper.AddCacheIitems("GetAccessToken", wx);//当前时间加上7100秒
- cacheData = WechatHelper.GetAccessToken(AppID, AppSecret);
- wx_access_token = cacheData.access_token;
- url = @"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + wx_access_token;
- state = WechatHelper.GetResponseData(temp, @url, "text/json");
- Log.Info("微信公众号准备第二次推送消息【2】:" + @url + "\r\n\r\n" + "参数:" + temp + "\r\n\r\n" + "返回结果:" + state);
- }
- strReturn = "推送成功";
-
- }
- catch (Exception ex)
- {
- strReturn = ex.Message;
- }
- return strReturn;
- }
- }
-
- }
|