ASP.NET MVC 微信公共平台开发之验证消息的真实性

时间:2022-08-28 08:21:51

ASP.NET MVC 微信公共平台开发

验证消息的真实性

  1. 在MVC Controller所在项目中添加过滤器,在过滤器中重写

    public override void OnActionExecuting(ActionExecutingContext filterContext)方法

  1. 新建数据模型

    ASP.NET MVC 微信公共平台开发之验证消息的真实性

    注:服务器接收消息时,不再是signature而是msg_signature

    微信服务器推送消息到服务器的HTTP请求报文示例

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

    Host: qy.weixin.qq.com

  2. 方法重写,实现对消息的验证

    调用微信接入时验证的方法,不过参数需要小改动一下,采用新建的数据模型

    ASP.NET MVC 微信公共平台开发之验证消息的真实性

    ASP.NET MVC 微信公共平台开发之验证消息的真实性

  3. 在Action方法或在Controller上添加过滤器属性

    ASP.NET MVC 微信公共平台开发之验证消息的真实性

  4. 代码示例
         /// <summary>
    /// 微信推送消息模型
    /// </summary>
    public class WeChatMsgRequestModel
    {
    public string timestamp { get; set; }
    public string nonce { get; set; } public string msg_signature { get; set; }
    }

    Model

     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;
    }
    }
    }

    Filter

             /// <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, , (int)stream.Length);
    string postString = System.Text.Encoding.UTF8.GetString(postBytes);
    Handle(postString,model);
    }
    }
    }
    catch (Exception ex)
    {
    logger.Error("发生异常,异常信息:" + ex.Message + ex.StackTrace);
    }
    }
    }

    Controller Code

ASP.NET MVC 微信公共平台开发之验证消息的真实性的更多相关文章

  1. ASP&period;NET MVC 微信公共平台开发之获取用户消息并处理

    ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...

  2. ASP&period;NET MVC 微信公共平台开发之 微信接入

    ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注 ...

  3. 微信公众平台开发,模板消息,网页授权,微信JS-SDK,二维码生成(4)

    微信公众平台开发,模板消息,什么是模板消息,模板消息接口指的是向用户发送重要的服务通知,只能用于符合场景的要求中去,如信用卡刷卡通知,购物成功通知等等.不支持广告营销,打扰用户的消息,模板消息类有固定 ...

  4. php版微信公众平台开发之验证步骤实例详解

    本文实例讲述了php版微信公众平台开发之验证步骤.分享给大家供大家参考,具体如下: 微信公众平台开发我们现在做得比较多了,这里给各位介绍的是一个入门级别的微信公众平台验证基础知识了,有兴趣的和小编来看 ...

  5. &lbrack;ASP&period;NET MVC&rsqb;如何定制Numeric属性&sol;字段验证消息

    原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字, ...

  6. &lbrack;转&rsqb;&lbrack;ASP&period;NET MVC&rsqb;如何定制Numeric属性&sol;字段验证消息

    本文转自:http://www.cnblogs.com/artech/archive/2012/02/13/NumericPropertyValidation.html 对于一个Numeric属性/字 ...

  7. 微信公共平台开发-(&period;net实现)1--成为开发者

    刚换了个新环境,哎这都快一个月了,还没适应过来,还是怀念老地方呀.老板让开发一个基于微信平台的开发项目,而且是用net实现.当时就蒙了,微信就用了一会个人赶脚不好,所以果断不用,现在让开发,而且查了一 ...

  8. 微信公共平台开发1 &period;net

    如果想通过微信去开发(当然,指的是开发模式下),首先 建议先申请一个服务号,因为服务号的功能与接口也多,有些功能订阅号是实现不了的.另外申请过以后必须得通过微信 认证才能开发,好像是得付300大洋,高 ...

  9. 微信公共平台开发-(&period;net实现)5--access&lowbar;token过期的问题

    每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token ...

随机推荐

  1. Spring学习笔记 1&period; 尚硅谷&lowbar;佟刚&lowbar;Spring&lowbar;HelloWorld

    1,准备工作 (1)安装spring插件 搜索https://spring.io/tools/sts/all就可以下载最新的版本 下载之后不用解压,使用Eclipse进行安装.在菜单栏最右面的Help ...

  2. &lbrack;改善Java代码&rsqb;警惕泛型是不能协变和逆变的

    什么叫做协变(covariance)和逆变(contravariance)? 在变成语言的类型框架中,协变和逆变是指宽类型和窄类型在某种情况下(如参数,泛型,返回值)替换或交换的特性,简单的说,协变是 ...

  3. hdu 2871 Memory Control&lpar;伸展树splay tree&rpar;

    hdu 2871 Memory Control 题意:就是对一个区间的四种操作,NEW x,占据最左边的连续的x个单元,Free x 把x单元所占的连续区间清空 , Get x 把第x次占据的区间输出 ...

  4. VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表

    原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那 ...

  5. MongoDB对应SQL语句

    -------------------MongoDB对应SQL语句------------------- 1.Create and Alter     1.     sql:         crea ...

  6. &lbrack;UWP&rsqb;针对UWP程序多语言支持的总结,含RTL

    UWP 对 Globalization and localization 的支持非常好,可以非常容易地实现应用程序本地化. 所谓本地化,表现最为直观的就是UI上文字和布局方式了,针对文字,提供不同的语 ...

  7. 微信小程序开发入门篇

    本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果. 开发准备工作 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的& ...

  8. Android向系统日历中添加日程事件

    转自Android向系统日历中添加日程事件 总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: ...

  9. keras实例学习-双向LSTM进行imdb情感分类

    源码:https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py 及keras中文文档 1. ...

  10. FB工作流相关

    1.初始化项目 gitlab上建立一个仓库 在命令行中运行git clone,将仓库克隆到本地 在命令行中找到前端模版文件(模版文件夹(front-template)有个sao.js脚本,用来在本地按 ...