.net core完成微信公众号的消息接收和请求处理
来源:互联网 发布:windows电脑装mac系统 编辑:程序博客网 时间:2024/06/08 02:18
上一篇完成了.net core 搭建微信公众号的基础设施搭建,下面开始做请求处理和响应
原理:
首先看这个图:
用户在给公众号号发送请求获得响应时,需要经历两个服务器,第一个是微信服务器,还有一个就是我们自己创建的项目服务器,而在整个过程中,微信服务器实际上就是一个桥梁,获取用户的消息给我们创建的项目服务器,再把项目服务器处理的逻辑结果(消息)传递给用户。因此,我们最基础也是最必须的,就是学会如何处理request 和response.
所以重要的就是接收消息和处理响应
1.在我们创建的controller中添加post方法,上一步上创建的get方法只用于token的验证,现在我们做的post方法才是我们最终使用的。
这里要注意一下,在.net core中处理request的输入流的方式:
var memoryStream = new MemoryStream();
Request.Body.CopyTo(memoryStream);
/// <summary> /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。 /// PS:此方法为简化方法,效果与OldPost一致。 /// v0.8之后的版本可以结合Senparc.Weixin.MP.MvcExtension扩展包,使用WeixinResult,见MiniPost方法。 /// </summary> [HttpPost] [ActionName("Index")] public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return Content("参数错误!"); } postModel.Token = Token;//根据自己后台的设置保持一致 postModel.EncodingAESKey = EncodingAESKey;//根据自己后台的设置保持一致 postModel.AppId = AppId;//根据自己后台的设置保持一致 //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 //获取request的响应 var memoryStream = new MemoryStream(); Request.Body.CopyTo(memoryStream); var messageHandler = new CustomMessageHandler(memoryStream, postModel);//接收消息 messageHandler.Execute();//执行微信处理过程 return new FixWeixinBugWeixinResult(messageHandler);//返回结果、、 }
其中,CustomMessageHandler是我们自己创建的一个类,用于对接收到的消息进行逻辑处理。
这个类继承了Senparc.Weixin.MP.MessageHandlers<TC>这个抽象类,
注意DefaultResponseMessage必须重写,用于返回没有处理过的消息类型(也可以用于默认消息,如帮助信息等);其中所有原OnXX的抽象方法已经都改为虚方法,可以不必每个都重写。若不重写,默认返回DefaultResponseMessage方法中的结果。
否则CustomMessageHandler这个类就会报错:
CustomMessageHandler不实现继承的抽象成员 MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>>
所以正确的代码如下:
using System.Collections.Generic;using System.IO;using Senparc.Weixin.MP.Entities;using Senparc.Weixin.MP.Entities.Request;using Senparc.Weixin.MP.MessageHandlers;using Senparc.Weixin.Context;namespace WechatTest.Services{ public partial class CustomMessageHandler : MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>> { public CustomMessageHandler(Stream inputStream, PostModel postModel):base (inputStream, postModel) { } public CustomMessageHandler(RequestMessageBase requestMessage):base(requestMessage) { } public override IResponseMessageBase OnEventRequest(IRequestMessageEventBase requestMessage) { return base.OnEventRequest(requestMessage); } public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { var responseMessage = this.CreateResponseMessage<ResponseMessageText>(); responseMessage.Content = "这条消息来自于DefaultResponseMessage"; return responseMessage; } public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //responseMessage.Content = "您的OpenID是:" + responseMessage.FromUserName+".\r\n您发送的文字是:"+requestMessage.Content; if (requestMessage.Content == "ID") responseMessage.Content = "您的OpenID是:" + responseMessage.FromUserName; if (requestMessage.Content == "天气") responseMessage.Content = "抱歉,还未开通此功能!"; return responseMessage; } }}
其中OnTextRequest是对接收到的文字的处理方法,我们在这做了判断,在用户发送给公众号各种文字时,能够对用户做出不同的响应
最基础的。好好学习,天天向上,加油吧
- .net core完成微信公众号的消息接收和请求处理
- 微信公众号开发手册<一>——接收消息的处理
- 接收(解析)公众号发来的消息--微信公众平台开发(四)
- 微信公众号开发--消息的接收与被动回复消息
- 微信公众号消息处理-工厂模式的实例
- 微信公众帐号开发-消息的接收与响应
- 微信公众平台开发【二】 消息的接收和响应
- PHP微信公众平台接口(四)——消息的接收和发送
- java servlet接收微信公众号消息
- 微信公众号开发之接收普通消息
- 微信公众号开发之接收普通消息
- 3、微信公众号开发之接收用户消息
- 微信公众号开发-接收与回复消息
- 微信公众号开发接收语音消息时权限
- 微信公众平台开发【接收消息】接收普通消息
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
- 用java开发微信公众号:接收和被动回复普通消息(三)
- Mysql批量删除带有相同前缀表名的表
- Mybatis中模糊查询的各种写法(转)
- 单元测试(一)-NUnit基础
- Duilib版视频监控客户端(简易版)
- 【推荐】基于Spark的ALS算法
- .net core完成微信公众号的消息接收和请求处理
- mapreduce 中文版 中文翻译
- jdbc对照表
- Linux下Ubuntu16.04用锐捷上网的配置方式
- 源码解析之路--spring解析(一)
- Android5.0 按键kl文件加载过程分析
- 阿里-应届生面试求职基础题
- C# 学习——静态(第四天)
- 韦东山第10课-内核启动