OpenPlatformConfig.cs 14 KB

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