Maison > Applet WeChat > Développement WeChat > Explication détaillée d'exemples de développement de messages de vérification WeChat avec asp.net

Explication détaillée d'exemples de développement de messages de vérification WeChat avec asp.net

Y2J
Libérer: 2017-04-25 11:28:17
original
1850 Les gens l'ont consulté

Vérifiez l'authenticité du message

Ajoutez un filtre dans le projet où se trouve le contrôleur MVC, et réécrivez-le dans le filtre

public override void OnActionExecuting( ActionExecutingContext filterContext) méthode

Nouveau modèle de données

Remarque : lorsque le serveur reçoit le message, ce n'est pas le cas. signature plus longue mais msg_signature

Exemple de message de requête HTTP du serveur WeChat pour envoyer le message au serveur

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

Hôte : qy. weixin.qq.com

réécriture de la méthode pour implémenter la vérification des messages

La méthode de vérification lors de l'appel de l'accès WeChat, mais les paramètres doivent être légèrement modifiés, en utilisant le nouveau modèle de données

Ajouter un attribut de filtre dans la méthode Action ou sur le contrôleur

Exemple de code

Modèle


/// <summary>
  /// 微信推送消息模型
  /// </summary>
  public class WeChatMsgRequestModel
  {
    public string timestamp { get; set; }
    public string nonce { get; set; }
    public string msg_signature { get; set; }
  }
Copier après la connexion

Filtre

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;
      }
    }
  }
Copier après la connexion

Code du contrôleur

/// <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);
        }
      }
    }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal