微信公众平台开发(10)--接收并回复用户消息(被动
本文目录
- 1. 用户消息的类型
- 2. 消息路由器与消息处理器
- 3. 接受并回复消息
- 4. 发送方与接收方
- 5. 小结
用户消息是指关注我们公众号的用户,发送给公众号的各类消息。例如
- 用户关注了公众号
- 用户取消关注公众号
- 用户给公众号发送文本消息
- 用户给公众号发送图片消息
- 用户给公众号发送位置消息
- 用户点击自定义菜单click类型按钮(click类型按钮点击后会将按钮key值作为参数)
- 用户点击自定义菜单vie类型按钮(vie类型按钮点击后跳转指定URL)
我们可以接收各种类型的消息,并进行被动回复。
2. 消息路由器与消息处理器消息处理器比较容易理解,就是接受消息并返回应答消息。
消息路由器,是设置路由规则的,路由规则是指消息类型与消息处理器之间的对应关系。通过消息路由器,我们可以自定义哪种消息由哪一个消息处理器处理。
我们在配置类中定义消息路由器,注意为了方便演示,我们简化了路由规则,只设置了最简单的一条规则即所有消息都交给myMesssageHandler消息处理器负责。
@Autoired
private MyMessageHandler myMesssageHandler;
@Bean
public WxMpMessageRouter xMessageRouter() {
WxMpMessageRouter router = ne WxMpMessageRouter(xMpService());
router.rule().async(false).handler(myMesssageHandler).end();
return router;
}
然后定义消息处理器组件,通过@Component注解为类注册一个组件。
@Component
public class MyMessageHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage xMessage, Map context, WxMpService xMpService, WxSessionManager sessionManager) thros WxErrorException {
return null;
}
}
3. 接受并回复消息
上面的代码中,我们通过消息路由器,设置了所有消息均由MyMessageHandler处理,所以我们在MyMessageHandler中编写代码回复消息即可。
@Override public WxMpXmlOutMessage handle(WxMpXmlMessage xMessage, Mapcontext, WxMpService xMpService, WxSessionManager sessionManager) thros WxErrorException { System.out.println(xMessage.toString()); String resultMsg = ""; if (xMessage.getEvent() == null) { if (xMessage.getMsgType().equals("text")) { resultMsg = "您发送了文本消息"; } else if (xMessage.getMsgType().equals("image")) { resultMsg = "您发送了图片消息"; } else if (xMessage.getMsgType().equals("location")) { resultMsg = "您发送了位置消息"; } } else if (xMessage.getEvent().equals("CLICK")) { resultMsg = "您点击了自定义菜单的按钮:"+xMessage.getEventKey(); } else if (xMessage.getEvent().equals("VIEW")) { resultMsg = "您点击了自定义菜单的网页跳转"; } else if (xMessage.getEvent().equals("subscribe")) { resultMsg = "您订阅了公众号"; } else if (xMessage.getEvent().equals("unsubscribe")) { resultMsg = "您取消订阅了公众号"; } else { resultMsg = "其他类型"; } WxMpXmlOutTextMessage out = WxMpXmlOutMessage.TEXT().content(resultMsg).fromUser(xMessage.getToUser()).toUser(xMessage.getFromUser()).build(); return out; }
通过代码能很直观的看出,我们可以通过xMessage.getEvent()获取用户与公众号交互类型,然后通过xMessage.getMsgType()获取用户发送的消息类型。
我们通过WxMpXmlOutTextMessage类型的对象回复消息。
4. 发送方与接收方在回复消息代码中,有如下1行
WxMpXmlOutMessage.TEXT().content(resultMsg).fromUser(xMessage.getToUser()).toUser(xMessage.getFromUser()).build();
我们将回复消息的fromUser设为接收消息的toUser,将回复消息的toUser设为接收消息的fromUser。
这个不难理解,接收消息是用户发送给公众号的,所以toUser是公众号,fromUser是发送消息的用户。
当我们回复消息的时候正好是反过来的,公众号发送给对应用户,所以有如上代码。
5. 小结在实际项目开发中,如果逻辑比较复杂,可以通过路由器设置多个处理器,分别处理不同的消息。
也可以在一个消息处理器中处理多种消息,本质上也没啥区别。
拓展下的话,此处使用了经典的策略模式,感兴趣的同学可以去了解下。
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风