Detaillierte Erläuterung von Beispielen für die Entwicklung von WeChat-Verifizierungsnachrichten mit asp.net

Y2J
Freigeben: 2017-04-25 11:28:17
Original
1789 Leute haben es durchsucht

Überprüfen Sie die Authentizität der Nachricht

Fügen Sie einen Filter in dem Projekt hinzu, in dem sich der MVC-Controller befindet, und schreiben Sie ihn im Filter neu

öffentlich override void OnActionExecuting( ActionExecutingContext filterContext) method

Neues Datenmodell

Hinweis: Wenn der Server die Nachricht empfängt, ist sie nein längere Signatur, aber msg_signature

Beispiel einer HTTP-Anforderungsnachricht vom WeChat-Server, um die Nachricht an den Server zu senden

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

Host: qy.weixin.qq.com

Methodenumschreibung zur Implementierung der Nachrichtenüberprüfung

Die Überprüfungsmethode beim Aufrufen des WeChat-Zugriffs, aber die Parameter müssen mithilfe der neuen leicht geändert werden Datenmodell

Filterattribut in Aktionsmethode oder auf Controller hinzufügen

Codebeispiel

Modell


/// <summary>
  /// 微信推送消息模型
  /// </summary>
  public class WeChatMsgRequestModel
  {
    public string timestamp { get; set; }
    public string nonce { get; set; }
    public string msg_signature { get; set; }
  }
Nach dem Login kopieren

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;
      }
    }
  }
Nach dem Login kopieren

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);
        }
      }
    }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die Entwicklung von WeChat-Verifizierungsnachrichten mit asp.net. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!