Weixin.aspx.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using LYFZ.WXLibrary;
  8. using LYFZ.Weixin.SDK;
  9. using System.IO;
  10. namespace LYFZ.WeixinServers.WeiXinAPP
  11. {
  12. public partial class Weixin : System.Web.UI.Page
  13. {
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. WriteContent("测试服务器已关闭");
  17. return;
  18. // WeixinConfig.Register(); 暂时关闭
  19. /* string signature = Request["signature"];
  20. string timestamp = Request["timestamp"];
  21. string nonce = Request["nonce"];
  22. string echostr = Request["echostr"];
  23. var token = WeixinConfig.Token;//微信公众平台后台设置的Token
  24. if (Request.HttpMethod == "GET")
  25. {
  26. // LYFZ.WXLibrary.CommonHandleClass.WriteLog("GET:开始验证");
  27. //get method - 仅在微信后台填写URL验证时触发
  28. if (string.IsNullOrEmpty(token))
  29. {
  30. WriteContent("请先设置Token!");
  31. }
  32. else
  33. {
  34. var ent = "";
  35. if (BasicAPI.CheckSignature(signature, timestamp, nonce, token, out ent))
  36. {
  37. CommonHandleClass.WriteLog("GET:验证通过");
  38. WriteContent(echostr); //返回随机字符串则表示验证通过
  39. }
  40. else
  41. {
  42. WriteContent("failed:" + signature + "," + BasicAPI.GetSignature(timestamp, nonce, token) + "。" +
  43. "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
  44. }
  45. }
  46. Response.End();
  47. }
  48. else
  49. {
  50. // CommonHandleClass.WriteLog("POST:开始处理");
  51. //post method - 当有用户向公众账号发送消息时触发
  52. var ent = "";
  53. if (!BasicAPI.CheckSignature(signature, timestamp, nonce, token, out ent))
  54. {
  55. CommonHandleClass.WriteLog("POST:参数错误");
  56. WriteContent("参数错误!");
  57. return;
  58. }
  59. try
  60. {
  61. WeixinMessage message = null;
  62. var safeMode = Request.QueryString.Get("encrypt_type") == "aes";
  63. using (var streamReader = new StreamReader(Request.InputStream))
  64. {
  65. var decryptMsg = string.Empty;
  66. var msg = streamReader.ReadToEnd();
  67. #region 解密
  68. if (safeMode)
  69. {
  70. var msg_signature = Request.QueryString.Get("msg_signature");
  71. var wxBizMsgCrypt = new Tencent.WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID);
  72. var ret = wxBizMsgCrypt.DecryptMsg(msg_signature, timestamp, nonce, msg, ref decryptMsg);
  73. if (ret != 0)//解密失败
  74. {
  75. //TODO:开发者解密失败的业务处理逻辑
  76. CommonHandleClass.WriteLog(string.Format("解密失败,解密消息返回{0},请身体{1}", ret, msg));
  77. }
  78. }
  79. else
  80. {
  81. decryptMsg = msg;
  82. }
  83. #endregion
  84. message = AcceptMessageAPI.Parse(decryptMsg);
  85. }
  86. var response = new WeixinExecutor().Execute(message);
  87. var encryptMsg = string.Empty;
  88. #region 加密
  89. if (safeMode)
  90. {
  91. var msg_signature = Request.QueryString.Get("msg_signature");
  92. var wxBizMsgCrypt = new Tencent.WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID);
  93. var ret = wxBizMsgCrypt.EncryptMsg(response, timestamp, nonce, ref encryptMsg);
  94. if (ret != 0)//加密失败
  95. {
  96. //TODO:开发者加密失败的业务处理逻辑
  97. CommonHandleClass.WriteLog(string.Format("加密失败,加密消息返回{0},响应体{1}", ret, response));
  98. }
  99. }
  100. else
  101. {
  102. encryptMsg = response;
  103. }
  104. #endregion
  105. WriteContent(encryptMsg);
  106. return;
  107. }
  108. catch (Exception ex)
  109. {
  110. LYFZ.WXLibrary.CommonHandleClass.WriteLog("POST:错误:" + ex.Message);
  111. }
  112. finally
  113. {
  114. Response.End();
  115. //HttpContext.Current.ApplicationInstance.CompleteRequest();
  116. }
  117. }*/
  118. }
  119. private void WriteContent(string str)
  120. {
  121. Response.Output.Write(str);
  122. }
  123. }
  124. }