OpenPlatformConfig.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. using LYFZ.Weixin.SDK;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. namespace LYFZ.WXLibrary
  8. {
  9. /// <summary>
  10. /// 开放平台 配置信息
  11. /// </summary>
  12. public class OpenPlatformConfig
  13. {
  14. public OpenPlatformConfig()
  15. {
  16. }
  17. /// <summary>
  18. /// 微信后台专用测试公众号APPID (wx570bc396a51b8ff8)
  19. /// </summary>
  20. public static string MicroLetterTestAPPID { get; } = "wx570bc396a51b8ff8";
  21. /// <summary>
  22. /// 微信后台专用测试公众号 (gh_76705a519b76)
  23. /// </summary>
  24. public static string MicroLetterTestUsername { get; } = "gh_76705a519b76";
  25. /// <summary>
  26. /// 授权回调地址 AuthorizeCallback
  27. /// </summary>
  28. public static string Redirect_uri { get; set; } = "http://kf.lyfz.net/AuthorizeCallback.aspx";
  29. /// <summary>
  30. /// 第三方开放平台的AppID
  31. /// </summary>
  32. public static string OpenAppID { get; set; } = "wxab4873842bdb30b6";
  33. /// <summary>
  34. /// 第三方开放平台的AppSecret
  35. /// </summary>
  36. public static string OpenAppSecret { get; set; } = "dcda055876be4b0e6133058216aaa930";
  37. /// <summary>
  38. /// 公众号消息校验Token
  39. /// </summary>
  40. public static string OpenToken { get; set; } = "WMHEDRD4NWZACPCXZ8JYXOOC";
  41. /// <summary>
  42. /// 公众号消息加解密Key
  43. /// </summary>
  44. public static string OpenEncodingAESKey { get; set; } = "BZy405POqT7Jg4QgSyyAEq0Ve4Ih4QyNCSJMswSG6kI";
  45. static string _component_verify_ticket = "";
  46. /// <summary>
  47. /// Component_verify_ticket
  48. /// </summary>
  49. public static string Component_verify_ticket
  50. {
  51. get
  52. {
  53. if (string.IsNullOrEmpty(OpenPlatformConfig._component_verify_ticket))
  54. {
  55. OpenPlatformConfig._component_verify_ticket = OpenPlatformConfig.ReadComponent_verify_ticket();
  56. }
  57. return OpenPlatformConfig._component_verify_ticket;
  58. }
  59. set { OpenPlatformConfig._component_verify_ticket = value; }
  60. }
  61. static string Component_verify_ticketFilename = LYFZ.WinAPI.CustomPublicMethod.BasePath + "\\Temp\\Component_verify_ticket.txt";
  62. public static bool SaveComponent_verify_ticket(string _Component_verify_ticket)
  63. {
  64. try
  65. {
  66. if (!Directory.Exists(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename)))
  67. Directory.CreateDirectory(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename));
  68. File.WriteAllText(Component_verify_ticketFilename, _Component_verify_ticket, Encoding.UTF8);
  69. }
  70. catch
  71. {
  72. return false;
  73. }
  74. return true;
  75. }
  76. public static string ReadComponent_verify_ticket()
  77. {
  78. try
  79. {
  80. if (System.IO.File.Exists(Component_verify_ticketFilename))
  81. {
  82. return File.ReadAllText(Component_verify_ticketFilename, Encoding.UTF8);
  83. }
  84. else
  85. {
  86. return "";
  87. }
  88. }
  89. catch
  90. {
  91. return "";
  92. }
  93. }
  94. static Dictionary<string, AuthorizedAPPIDHandle> _AuthorizedAPPIDHandleList = new Dictionary<string, AuthorizedAPPIDHandle>();
  95. /// <summary>
  96. /// 已授权公众号的授权信息处理集合
  97. /// </summary>
  98. public static Dictionary<string, AuthorizedAPPIDHandle> AuthorizedAPPIDHandleList
  99. {
  100. get { return OpenPlatformConfig._AuthorizedAPPIDHandleList; }
  101. set { OpenPlatformConfig._AuthorizedAPPIDHandleList = value; }
  102. }
  103. /// <summary>
  104. /// 获取令牌时的时间
  105. /// </summary>
  106. private static DateTime GetAccessToken_Time;
  107. /// <summary>
  108. /// 过期时间为7200秒
  109. /// </summary>
  110. private static int Expires_Period = 7200;
  111. private static string mComponent_Access_Token = "";
  112. /// <summary>
  113. /// 获取新的有效Component_Access_Token令牌
  114. /// </summary>
  115. public static string Component_Access_Token
  116. {
  117. get
  118. {
  119. // 如果为空,或者过期,需要重新获取;
  120. if (string.IsNullOrEmpty(mComponent_Access_Token) || HasExpired())
  121. {
  122. // 获取;
  123. LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取新的有效Component_Access_Token令牌", "-2");
  124. mComponent_Access_Token = GetComponent_AccessToken(OpenAppID, OpenAppSecret, Component_verify_ticket);
  125. }
  126. return mComponent_Access_Token;
  127. }
  128. }
  129. /// <summary>
  130. ///
  131. /// </summary>
  132. static string _pre_auth_code = "";
  133. /// <summary>
  134. /// 获取预授权码pre_auth_code
  135. /// 该API用于获取预授权码。预授权码用于公众号授权时的第三方平台方安全验证。
  136. /// </summary>
  137. public static string Pre_auth_code
  138. {
  139. get
  140. {
  141. // 如果为空,或者过期,需要重新获取;
  142. if (string.IsNullOrEmpty(_pre_auth_code) || HasExpiredPreAuthCode())
  143. {
  144. // 获取;
  145. LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取预授权码pre_auth_code", "-2");
  146. _pre_auth_code = GetComponent_PreAuthCode(OpenAppID);
  147. }
  148. return _pre_auth_code;
  149. }
  150. }
  151. /// <summary>
  152. /// 获取预授权码pre_auth_code
  153. /// </summary>
  154. /// <param name="appId"></param>
  155. /// <param name="appSecret"></param>
  156. /// <returns></returns>
  157. private static string GetComponent_PreAuthCode(string appId)
  158. {
  159. try
  160. {
  161. Dictionary<string, string> dic = new Dictionary<string, string>
  162. {
  163. {"component_appid",appId},
  164. };
  165. string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
  166. string retmsg = "";
  167. var retObj = BasicAPI.GetApi_Component_PreAuthCode(OpenPlatformConfig.Component_Access_Token, json, out retmsg);
  168. LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码返回信息:" + retmsg, "-2");
  169. if (retObj != null)
  170. {
  171. string retPreAuthCode = retObj.pre_auth_code.Trim();
  172. if (retPreAuthCode.Trim().Length > 0)
  173. {
  174. Get_PreAuthCode_Time = DateTime.Now;
  175. Expires_Period_PreAuthCode = Convert.ToInt32(retObj.expires_in);
  176. return retPreAuthCode;
  177. }
  178. else
  179. {
  180. Get_PreAuthCode_Time = DateTime.MinValue;
  181. }
  182. }
  183. else
  184. {
  185. Get_PreAuthCode_Time = DateTime.MinValue;
  186. LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取预授权码pre_auth_code时出错:" + retmsg, "-2");
  187. }
  188. }
  189. catch (Exception ex)
  190. {
  191. Get_PreAuthCode_Time = DateTime.MinValue;
  192. LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码时出错:" + ex.Message, "-2");
  193. }
  194. return "";
  195. }
  196. /// <summary>
  197. /// 预授权码Pre_auth_code过期时间为600秒
  198. /// </summary>
  199. private static int Expires_Period_PreAuthCode = 600;
  200. /// <summary>
  201. /// 获取预授权码Pre_auth_code时的时间
  202. /// </summary>
  203. private static DateTime Get_PreAuthCode_Time;
  204. /// <summary>
  205. /// 判断预授权码Pre_auth_code是否过期 (有效期为)
  206. /// </summary>
  207. /// <returns>bool</returns>
  208. private static bool HasExpiredPreAuthCode()
  209. {
  210. if (Get_PreAuthCode_Time != null)
  211. {
  212. //过期时间,允许有一定的误差,二分钟。获取时间消耗
  213. if (DateTime.Now > Get_PreAuthCode_Time.AddSeconds(Expires_Period_PreAuthCode).AddSeconds(-520))
  214. {
  215. return true;
  216. }
  217. }
  218. return false;
  219. }
  220. /// <summary>
  221. /// 清除mAccessToken
  222. /// </summary>
  223. public static void ClearAccessToken()
  224. {
  225. mComponent_Access_Token = "";
  226. }
  227. /// <summary>
  228. /// 获取开放平台的接口令牌
  229. /// </summary>
  230. /// <param name="appId"></param>
  231. /// <param name="appSecret"></param>
  232. /// <returns></returns>
  233. private static string GetComponent_AccessToken(string appId, string appSecret, string component_verify_ticket)
  234. {
  235. try
  236. {
  237. Dictionary<string, string> dic = new Dictionary<string, string>
  238. {
  239. {"component_appid",appId},
  240. {"component_appsecret",appSecret},
  241. {"component_verify_ticket",component_verify_ticket}
  242. };
  243. string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
  244. /* string formatmsg = "{"
  245. + "\"component_appid\":\"" + sAppID + "\" ,"
  246. + "\"component_appsecret\": \"" + sAppSecret + "\","
  247. + "\"component_verify_ticket\": \"" + component_verify_ticket + "\" "
  248. +"\"}";*/
  249. //获取第三方平台access_token
  250. string retmsg = "";
  251. var retObj = BasicAPI.GetApi_Component_Token(json, out retmsg);
  252. LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌返回信息:" + retmsg, "-2");
  253. if (retObj != null)
  254. {
  255. string retComponent_access_token = retObj.component_access_token.Trim();
  256. if (retComponent_access_token.Trim().Length > 0)
  257. {
  258. GetAccessToken_Time = DateTime.Now;
  259. Expires_Period = Convert.ToInt32(retObj.expires_in);
  260. return retComponent_access_token;
  261. }
  262. else
  263. {
  264. GetAccessToken_Time = DateTime.MinValue;
  265. }
  266. }
  267. else
  268. {
  269. GetAccessToken_Time = DateTime.MinValue;
  270. LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取开放平台的接口令牌时出错:" + retmsg, "-2");
  271. }
  272. }
  273. catch (Exception ex)
  274. {
  275. GetAccessToken_Time = DateTime.MinValue;
  276. LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌时出错:" + ex.Message, "-2");
  277. }
  278. return "";
  279. }
  280. /// <summary>
  281. /// 判断Access_token是否过期
  282. /// </summary>
  283. /// <returns>bool</returns>
  284. private static bool HasExpired()
  285. {
  286. if (GetAccessToken_Time != null)
  287. {
  288. //过期时间,允许有一定的误差,五分钟。获取时间消耗
  289. if (DateTime.Now > GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-300))
  290. {
  291. return true;
  292. }
  293. }
  294. return false;
  295. }
  296. /// <summary>
  297. /// 是否转到多客户
  298. /// </summary>
  299. /// <param name="message"></param>
  300. /// <returns></returns>
  301. public static bool IsTransmitService(string message)
  302. {
  303. bool ret = false;
  304. if (message.ToLower().Contains("kf")
  305. || message.ToLower().Contains("客服")
  306. || message.ToLower().Contains("你好")
  307. || message.ToLower().Contains("您好")
  308. || message.ToLower().Contains("投诉")
  309. || message.ToLower().Contains("在吗")
  310. || message.ToLower().Contains("ni hao")
  311. || message.ToLower().Contains("ning hao")
  312. || message.ToLower().Contains("请问"))
  313. {
  314. ret = true;
  315. }
  316. return ret;
  317. }
  318. }
  319. }