暫無描述

WxReceiveController.cs 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using CallCenter.Utility;
  7. using CallCenterAPI.WechatSDK;
  8. using System.IO;
  9. using CallCenterAPI.WechatSDK.Code;
  10. namespace CallCenterApi.Interface.Controllers.weixin
  11. {
  12. public class WxReceiveController : Controller
  13. {
  14. /// <summary>
  15. /// 本系统提供给微信服务端调用的接口
  16. /// </summary>
  17. /// <returns></returns>
  18. public ActionResult Index()
  19. {
  20. Log log = LogFactory.GetLogger("WxReceive");
  21. #region 基本数据配置
  22. string signature = Request["signature"]; //响应微信发送的Token验证需要的签名
  23. string timestamp = Request["timestamp"];
  24. string nonce = Request["nonce"];
  25. string echostr = Request["echostr"];
  26. string msg_signature = Request["msg_signature"]; //解密微信推送的消息需要的签名
  27. //微信公众号-基本设置-服务器配置-令牌(Token)【必需】
  28. var token = Configs.GetValue("WechatToken"); ;
  29. //微信公众号-基本设置-服务器配置-消息加解密密钥(EncodingAESKey)【必需】
  30. var encodingAESKey = Configs.GetValue("WechatEncodingAESKey"); ;
  31. #endregion
  32. #region 响应微信发送的Token验证, GET
  33. if (!RequestString.IsPost())
  34. {
  35. if (!WxHelper.CheckSignature(signature, timestamp, nonce, token))
  36. return Content("error");
  37. else
  38. return Content(echostr);
  39. }
  40. #endregion
  41. #region 获取微信推送消息,POST
  42. StreamReader srResult = new StreamReader(RequestString.GetInputStream());
  43. string dataEncrypt = srResult.ReadToEnd();
  44. string dataDecrypt = "";
  45. int ret = 0;
  46. WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, Configs.GetValue("WechatAppid"));
  47. ret = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, dataEncrypt, ref dataDecrypt);
  48. if (ret != 0)
  49. {
  50. log.Error($"微信消息推送解密失败,错误代码:{ret}");
  51. return Content("error");
  52. }
  53. XmlHelper xml = new XmlHelper();
  54. xml.LoadFromXmlString(dataDecrypt);
  55. string openid = xml.GetValue("FromUserName");
  56. string type = xml.GetValue("MsgType");
  57. if (type != "event")
  58. {
  59. WxHelper.CreateSession(openid);
  60. }
  61. return Content("success");
  62. #endregion
  63. }
  64. }
  65. }