手机版

asp.net开发微信公众平台之验证消息的真实性

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

验证消息的真实性

在手动音量调节控制器所在项目中添加过滤器,在过滤器中重写

公共覆盖无效操作执行(操作执行上下文过滤器上下文)方法

新建数据模型

注:服务器接收消息时,不再是签名而是消息签名

微信服务器推送消息到服务器的超文本传送协议请求报文示例

POST /cgi-bin/wxpush?msg _ signature=477715d 11 CDB 4164915 debcba 66 CB 864d 751 F3 E6时间戳=1409659813 once=1372623149 HTTP/1.1

qy.weixin.qq.com :号主机

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

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

在行动方法或在控制器上添加过滤器属性

代码示例

模型

///摘要///微信推送消息模型////汇总公共类微信sgRequestModel {公共字符串时间戳{获取设置;}公共字符串nonce { get设置;}公共字符串消息签名{ get设置;} }过滤器

公共类微信request valid attribute : ActionFilterAttribute { private const string Token=' Stupidme ';action executing(action executing context筛选器上下文){//参数适配模特FormatModel .微信服务请求模型模型=新模型FormatModel .微信内存请求模型(){ nonce=filterContext .http上下文。请求。查询字符串[' nonce '],msg_signature=filterContext .http上下文。请求。查询字符串[' msg _ signature '],时间戳=filterContext .http上下文。请求。查询字符串['时间戳']};//验证if(检查签名(模型)){ base .操作执行(过滤器上下文);} }私有bool检查签名(模型FormatModel .微信sgrequest model){ 0字符串签名,时间戳,nonce,tempStr//获取请求来的参数signature=model . msg _ signature timestamp=model . timestamponce=model.nonce//创建数组,将令牌、时间戳、随机数三个参数加入数组字符串[]数组={令牌,时间戳,nonce };//进行排序数组。排序(数组);//拼接为一个字符串tempStr=字符串Join(“”,array);//对字符串进行SHA1加密tempStr=FormsAuthentication .hashpasswordfortringconfigfile(tempStr,' SHA1 ').toLower();//判断签名是否正确if (tempStr .Equals(签名)){ 0返回true} else {返回false} } }控制器代码

///摘要///日志助手////摘要私有静态公共。日志助手记录器=新的公共LogHelper(类型为(Homecontroller));[过滤器。微信请求有效]公共无效有效(模型FormatModel .微信内存请求模型(模型){ if(模型状态).IsValid) { try { //判断是否是邮政请求if (HttpContext .请求。httpmethod。Toupper()==' POST '){//从请求的数据流中获取请求信息使用(stream=HttpContext .请求。InputStream){ byte[]PostBytes=新字节[stream .长度];小溪读取(后置字节,0,(整数)流。长度);字符串后置字符串=系统文本。编码。utf8。get string(PostBytes);句柄(postString,模型);} } } catch (Exception ex) { logger .错误('发生异常,异常信息:' ex .留言ex .堆栈跟踪);} } } 以上所述就是本文的全部内容了,希望大家能够喜欢。

版权声明:asp.net开发微信公众平台之验证消息的真实性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。