-
第5、6课 MessageHandler:简化消息处理流程
课程地址:
https://study.163.com/course/courseMain.htm?courseId=1004873017
本课项目地址:
https://github.com/wechatdeveloper/WechatVideoCourse
课程目标:
从0开始新建Asp.Net MVC Web项目引入Senparc.Weixin SDK,并把Web项目发布到应用服务器实现和微信公众号服务器的通讯接口对接,实现对用户不同消息(文本、图片、地理位置等)的处理以及根据需求返回不同的消息(文本、图片、图片消息等)。
课程准备: ①域名(需要备案) ②基础版云服务器一台
课程主题:消息通讯的过程,如下图
课程代码参考:
1,Sample项目 https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/net45-mvc
2,视频课程对应的项目WechatVideoCourse:https://github.com/JeffreySu/WechatVideoCourse
由于在视频录制之后,SDK有了很多个版本的更新迭代,部分接口和实现方法有更新;
所以我也新建立了课程对应的项目,使用的是最新版本的Senparc SDK。
项目名称:SenparcCourse , 大家也可作为参考,项目地址:https://github.com/wechatdeveloper/WechatVideoCourse
课程项目创建步骤和过程:
-
创建Asp.net MVC Web项目(.Net Framework 4.5):
-
项目名称 :SenparcCourse
-
-
解决方案下添加新的类库项目:
-
类库名称 :SenparcCourse.Service , 给Web项目提供基础服务
-
Web项目引用类库项目
-
-
Web 项目和类库都安装Nuget包:
-
Senparc.Weixin.mp
-
-
SenparcCourse.Service 项目下添加类:
-
消息上下文类:CustomerMessageContext.cs
-
消息处理类:CustomerMessageHandler.cs
-
-
MVC Web项目下添加Controller
-
WeixinController.cs ,添加方法实现和微信服务器的验证
-
-
复制Github Sample中的web.config 配置参数
-
WeixinAppId,Secret ,Token配置为和测试公众号一致
-
-
测试号配置应用服务器的URL信息
-
配置后,返回是否成功的消息
-
-
WeixinController 接收微信服务器消息交给MessageHandler处理后,再返回给微信服务器:
Wexin/Index 接收处理用户消息
-
messageHandler , 接收、处理、返回用户消息
-
messageHandler.SaveRequestMessageLog(); //记录Request日志
-
messageHandler.SaveResponseMessageLog(); //记录Response日志
-
postModel.EncodingAESKey = EncodingAESKey;//根据自己后台的设置保持一致,消息加密处理
-
messageHandler.OmitRepeatedMessage = true;//消息去重,如果微信服务器发给应用服务器的消息没有得到响应,5秒内 微信服务器会连续发送相同MsgId的消息
-
var maxRecordCount = 10; // 配置每个人上下文消息储存的最大数量
消息处理类:CustomerMessageHandler.cs
-
用户请求消息 (RequestMessage)
-
响应消息返回给用户(ResponseMessage)
-
TextKeywordHandler 用户消息关键字处理
-
OnTextRequest 文字消息处理
-
OnTextOrEventRequest 文字、消息统一处理方法
-
关键字消息回复
`var keyWordHandler = requestMessage.StartHandler(false)
.Keyword("",()=>{}) //关键字处理
Keywords(new string[] { "exit", "quit", "close" }, () => {})//多个关键字`
.Regex(@"^http", () => {}) //正则表达式
-
OnExcuteing 消息的前置处理,如检查消息的合法性
-
OnExcuted 消息后置处理 ,如添加签名
-
base.GetCurrentMessageContext().Result.ExpireMinutes = 10; ///消息没有响应时候的会话过期时间
-
base.CancelExcute = true;//取消以后所有的消息回复
-
return new ResponseMessageNoResponse(); //不返回任何消息
-
DefaultResponseMessage , MessageHandler中没有处理到的消息类型给个默认的处理
-
Web项目发布后,在测试号管理后台填写接口配置信息的URL 和 Token
如果配置失败,可F12打开调试窗口,查看失败原因: