Detailed explanation of examples of developing WeChat verification messages with asp.net

Y2J
Release: 2017-04-25 11:28:17
Original
1807 people have browsed it

Verify the authenticity of the message

Add a filter in the project where the MVC Controller is located, and rewrite it in the filter

public override void OnActionExecuting( ActionExecutingContext filterContext) method

New data model

Note: When the server receives the message, it is no longer signature but msg_signature

HTTP request message example of WeChat server pushing message to the server

POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nonce=1372623149 HTTP/1.1

Host: qy. weixin.qq.com

Method rewriting to implement message verification

The verification method when calling WeChat access, but the parameters need to be slightly changed, using the newly created data model

Add filter properties in the Action method or on the Controller

Code example

Model


/// <summary>
  /// 微信推送消息模型
  /// </summary>
  public class WeChatMsgRequestModel
  {
    public string timestamp { get; set; }
    public string nonce { get; set; }
    public string msg_signature { get; set; }
  }
Copy after login

Filter

public class WeChatRequestValidAttribute : ActionFilterAttribute
  {
    private const string Token = "StupidMe";

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      //参数适配
      Model.FormatModel.WeChatMsgRequestModel model = new Model.FormatModel.WeChatMsgRequestModel() { nonce= filterContext.HttpContext.Request.QueryString["nonce"],msg_signature= filterContext.HttpContext.Request.QueryString["msg_signature"],timestamp= filterContext.HttpContext.Request.QueryString["timestamp"] };
      //验证
      if (CheckSignature(model))
      {
        base.OnActionExecuting(filterContext);
      }      
    }

    private bool CheckSignature(Model.FormatModel.WeChatMsgRequestModel model)
    {
      string signature, timestamp, nonce, tempStr;
      //获取请求来的参数
      signature = model.msg_signature;
      timestamp = model.timestamp;
      nonce = model.nonce;
      //创建数组,将 Token, timestamp, nonce 三个参数加入数组
      string[] array = { Token, timestamp, nonce };
      //进行排序
      Array.Sort(array);
      //拼接为一个字符串
      tempStr = String.Join("", array);
      //对字符串进行 SHA1加密
      tempStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tempStr, "SHA1").ToLower();
      //判断signature 是否正确
      if (tempStr.Equals(signature))
      {
        return true;
      }
      else
      {
        return false;
      }
    }
  }
Copy after login

Controller Code

/// <summary>
    /// 日志助手
    /// </summary>
    private static Common.LogHelper logger = new Common.LogHelper(typeof(HomeController));

    [Filters.WeChatRequestValid]
    public void Valid(Model.FormatModel.WeChatMsgRequestModel model)
    {
      if (ModelState.IsValid)
      {
        try
        {
          //判断是否是POST请求
          if (HttpContext.Request.HttpMethod.ToUpper() == "POST")
          {
            //从请求的数据流中获取请求信息
            using (Stream stream = HttpContext.Request.InputStream)
            {
              byte[] postBytes = new byte[stream.Length];
              stream.Read(postBytes, 0, (int)stream.Length);
              string postString = System.Text.Encoding.UTF8.GetString(postBytes);
              Handle(postString,model);
            }
          }
        }
        catch (Exception ex)
        {
          logger.Error("发生异常,异常信息:" + ex.Message + ex.StackTrace);
        }
      }
    }
Copy after login

The above is the detailed content of Detailed explanation of examples of developing WeChat verification messages with asp.net. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template