using LYFZ.Weixin.SDK; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace LYFZ.WXLibrary { /// /// 开放平台 配置信息 /// public class OpenPlatformConfig { public OpenPlatformConfig() { } /// /// 微信后台专用测试公众号APPID (wx570bc396a51b8ff8) /// public static string MicroLetterTestAPPID { get; } = "wx570bc396a51b8ff8"; /// /// 微信后台专用测试公众号 (gh_76705a519b76) /// public static string MicroLetterTestUsername { get; } = "gh_76705a519b76"; /// /// 授权回调地址 AuthorizeCallback /// public static string Redirect_uri { get; set; } = "http://kf.lyfz.net/AuthorizeCallback.aspx"; /// /// 第三方开放平台的AppID /// public static string OpenAppID { get; set; } = "wxab4873842bdb30b6"; /// /// 第三方开放平台的AppSecret /// public static string OpenAppSecret { get; set; } = "dcda055876be4b0e6133058216aaa930"; /// /// 公众号消息校验Token /// public static string OpenToken { get; set; } = "WMHEDRD4NWZACPCXZ8JYXOOC"; /// /// 公众号消息加解密Key /// public static string OpenEncodingAESKey { get; set; } = "BZy405POqT7Jg4QgSyyAEq0Ve4Ih4QyNCSJMswSG6kI"; static string _component_verify_ticket = ""; /// /// Component_verify_ticket /// public static string Component_verify_ticket { get { if (string.IsNullOrEmpty(OpenPlatformConfig._component_verify_ticket)) { OpenPlatformConfig._component_verify_ticket = OpenPlatformConfig.ReadComponent_verify_ticket(); } return OpenPlatformConfig._component_verify_ticket; } set { OpenPlatformConfig._component_verify_ticket = value; } } static string Component_verify_ticketFilename = LYFZ.WinAPI.CustomPublicMethod.BasePath + "\\Temp\\Component_verify_ticket.txt"; public static bool SaveComponent_verify_ticket(string _Component_verify_ticket) { try { if (!Directory.Exists(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename))) Directory.CreateDirectory(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename)); File.WriteAllText(Component_verify_ticketFilename, _Component_verify_ticket, Encoding.UTF8); } catch { return false; } return true; } public static string ReadComponent_verify_ticket() { try { if (System.IO.File.Exists(Component_verify_ticketFilename)) { return File.ReadAllText(Component_verify_ticketFilename, Encoding.UTF8); } else { return ""; } } catch { return ""; } } static Dictionary _AuthorizedAPPIDHandleList = new Dictionary(); /// /// 已授权公众号的授权信息处理集合 /// public static Dictionary AuthorizedAPPIDHandleList { get { return OpenPlatformConfig._AuthorizedAPPIDHandleList; } set { OpenPlatformConfig._AuthorizedAPPIDHandleList = value; } } /// /// 获取令牌时的时间 /// private static DateTime GetAccessToken_Time; /// /// 过期时间为7200秒 /// private static int Expires_Period = 7200; private static string mComponent_Access_Token = ""; /// /// 获取新的有效Component_Access_Token令牌 /// public static string Component_Access_Token { get { // 如果为空,或者过期,需要重新获取; if (string.IsNullOrEmpty(mComponent_Access_Token) || HasExpired()) { // 获取; LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取新的有效Component_Access_Token令牌", "-2"); mComponent_Access_Token = GetComponent_AccessToken(OpenAppID, OpenAppSecret, Component_verify_ticket); } return mComponent_Access_Token; } } /// /// /// static string _pre_auth_code = ""; /// /// 获取预授权码pre_auth_code /// 该API用于获取预授权码。预授权码用于公众号授权时的第三方平台方安全验证。 /// public static string Pre_auth_code { get { // 如果为空,或者过期,需要重新获取; if (string.IsNullOrEmpty(_pre_auth_code) || HasExpiredPreAuthCode()) { // 获取; LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取预授权码pre_auth_code", "-2"); _pre_auth_code = GetComponent_PreAuthCode(OpenAppID); } return _pre_auth_code; } } /// /// 获取预授权码pre_auth_code /// /// /// /// private static string GetComponent_PreAuthCode(string appId) { try { Dictionary dic = new Dictionary { {"component_appid",appId}, }; string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic); string retmsg = ""; var retObj = BasicAPI.GetApi_Component_PreAuthCode(OpenPlatformConfig.Component_Access_Token, json, out retmsg); LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码返回信息:" + retmsg, "-2"); if (retObj != null) { string retPreAuthCode = retObj.pre_auth_code.Trim(); if (retPreAuthCode.Trim().Length > 0) { Get_PreAuthCode_Time = DateTime.Now; Expires_Period_PreAuthCode = Convert.ToInt32(retObj.expires_in); return retPreAuthCode; } else { Get_PreAuthCode_Time = DateTime.MinValue; } } else { Get_PreAuthCode_Time = DateTime.MinValue; LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取预授权码pre_auth_code时出错:" + retmsg, "-2"); } } catch (Exception ex) { Get_PreAuthCode_Time = DateTime.MinValue; LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码时出错:" + ex.Message, "-2"); } return ""; } /// /// 预授权码Pre_auth_code过期时间为600秒 /// private static int Expires_Period_PreAuthCode = 600; /// /// 获取预授权码Pre_auth_code时的时间 /// private static DateTime Get_PreAuthCode_Time; /// /// 判断预授权码Pre_auth_code是否过期 (有效期为) /// /// bool private static bool HasExpiredPreAuthCode() { if (Get_PreAuthCode_Time != null) { //过期时间,允许有一定的误差,二分钟。获取时间消耗 if (DateTime.Now > Get_PreAuthCode_Time.AddSeconds(Expires_Period_PreAuthCode).AddSeconds(-520)) { return true; } } return false; } /// /// 清除mAccessToken /// public static void ClearAccessToken() { mComponent_Access_Token = ""; } /// /// 获取开放平台的接口令牌 /// /// /// /// private static string GetComponent_AccessToken(string appId, string appSecret, string component_verify_ticket) { try { Dictionary dic = new Dictionary { {"component_appid",appId}, {"component_appsecret",appSecret}, {"component_verify_ticket",component_verify_ticket} }; string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic); /* string formatmsg = "{" + "\"component_appid\":\"" + sAppID + "\" ," + "\"component_appsecret\": \"" + sAppSecret + "\"," + "\"component_verify_ticket\": \"" + component_verify_ticket + "\" " +"\"}";*/ //获取第三方平台access_token string retmsg = ""; var retObj = BasicAPI.GetApi_Component_Token(json, out retmsg); LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌返回信息:" + retmsg, "-2"); if (retObj != null) { string retComponent_access_token = retObj.component_access_token.Trim(); if (retComponent_access_token.Trim().Length > 0) { GetAccessToken_Time = DateTime.Now; Expires_Period = Convert.ToInt32(retObj.expires_in); return retComponent_access_token; } else { GetAccessToken_Time = DateTime.MinValue; } } else { GetAccessToken_Time = DateTime.MinValue; LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取开放平台的接口令牌时出错:" + retmsg, "-2"); } } catch (Exception ex) { GetAccessToken_Time = DateTime.MinValue; LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌时出错:" + ex.Message, "-2"); } return ""; } /// /// 判断Access_token是否过期 /// /// bool private static bool HasExpired() { if (GetAccessToken_Time != null) { //过期时间,允许有一定的误差,五分钟。获取时间消耗 if (DateTime.Now > GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-300)) { return true; } } return false; } /// /// 是否转到多客户 /// /// /// public static bool IsTransmitService(string message) { bool ret = false; if (message.ToLower().Contains("kf") || message.ToLower().Contains("客服") || message.ToLower().Contains("你好") || message.ToLower().Contains("您好") || message.ToLower().Contains("投诉") || message.ToLower().Contains("在吗") || message.ToLower().Contains("ni hao") || message.ToLower().Contains("ning hao") || message.ToLower().Contains("请问")) { ret = true; } return ret; } } }