微信公众平台开发(10)--接收并回复用户消息(被动回复)

简介: 本文目录1. 用户消息的类型2. 消息路由器与消息处理器3. 接受并回复消息4. 发送方与接收方5. 小结

1. 用户消息的类型

用户消息是指关注我们公众号的用户,发送给公众号的各类消息。例如:


用户关注了公众号

用户取消关注公众号

用户给公众号发送文本消息

用户给公众号发送图片消息

用户给公众号发送位置消息

用户点击自定义菜单click类型按钮(click类型按钮点击后会将按钮key值作为参数)

用户点击自定义菜单view类型按钮(view类型按钮点击后跳转指定URL)

我们可以接收各种类型的消息,并进行被动回复。


2. 消息路由器与消息处理器

消息处理器比较容易理解,就是接受消息并返回应答消息。


消息路由器,是设置路由规则的,路由规则是指消息类型与消息处理器之间的对应关系。通过消息路由器,我们可以自定义哪种消息由哪一个消息处理器处理。


我们在配置类中定义消息路由器,注意为了方便演示,我们简化了路由规则,只设置了最简单的一条规则:即所有消息都交给myMesssageHandler消息处理器负责。


/**

 * 注入消息处理器

 */

@Autowired

private MyMessageHandler myMesssageHandler;


/**

 * 配置消息路由器

 */

@Bean

public WxMpMessageRouter wxMessageRouter() {

 WxMpMessageRouter router = new WxMpMessageRouter(wxMpService());

 router.rule().async(false).handler(myMesssageHandler).end();

 return router;

}

然后定义消息处理器组件,通过@Component注解为类注册一个组件。



/**

* 消息处理器

*/

@Component

public class MyMessageHandler implements WxMpMessageHandler {


@Override

public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {

 return null;

}

}


3. 接受并回复消息

上面的代码中,我们通过消息路由器,设置了所有消息均由MyMessageHandler处理,所以我们在MyMessageHandler中编写代码回复消息即可。


@Override

public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {

 System.out.println(wxMessage.toString());

 String resultMsg = "";

 if (wxMessage.getEvent() == null) {

  if (wxMessage.getMsgType().equals("text")) {

   resultMsg = "您发送了文本消息";

  } else if (wxMessage.getMsgType().equals("image")) {

   resultMsg = "您发送了图片消息";

  } else if (wxMessage.getMsgType().equals("location")) {

   resultMsg = "您发送了位置消息";

  }

 } else if (wxMessage.getEvent().equals("CLICK")) {

  resultMsg = "您点击了自定义菜单的按钮:"+wxMessage.getEventKey();

 } else if (wxMessage.getEvent().equals("VIEW")) {

  resultMsg = "您点击了自定义菜单的网页跳转";

 } else if (wxMessage.getEvent().equals("subscribe")) {

  resultMsg = "您订阅了公众号";

 } else if (wxMessage.getEvent().equals("unsubscribe")) {

  resultMsg = "您取消订阅了公众号";

 } else {

  resultMsg = "其他类型";

 }

 WxMpXmlOutTextMessage out = WxMpXmlOutMessage.TEXT().content(resultMsg).fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).build();

 return out;

}


通过代码能很直观的看出,我们可以通过wxMessage.getEvent()获取用户与公众号交互类型,然后通过wxMessage.getMsgType()获取用户发送的消息类型。


最后我们通过WxMpXmlOutTextMessage类型的对象回复消息。


4. 发送方与接收方

在回复消息代码中,有如下1行:


WxMpXmlOutMessage.TEXT().content(resultMsg).fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()).build();

1

我们将回复消息的fromUser设为接收消息的toUser,将回复消息的toUser设为接收消息的fromUser。


这个不难理解,接收消息是用户发送给公众号的,所以toUser是公众号,fromUser是发送消息的用户。


当我们回复消息的时候正好是反过来的,公众号发送给对应用户,所以有如上代码。


5. 小结

在实际项目开发中,如果逻辑比较复杂,可以通过路由器设置多个处理器,分别处理不同的消息。


当然也可以在一个消息处理器中处理多种消息,本质上也没啥区别。


拓展下的话,此处使用了经典的策略模式,感兴趣的同学可以去了解下。

相关文章
|
小程序 PHP
微信公众号开发(一)打通服务器与微信之间的通信
说来惭愧PHP做了这么久,好像就没有从头开发过一个微信公众号,这次刚好有机会从头接入开发一个完整的公众号,也不能说完整,但是这些微信的接口我基本上都试一试~看看大概是什么情况。 首先:打通服务器与微信之间的通信。
226 0
|
7月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
8月前
|
机器人 API 语音技术
企业微信接收语音消息并自动回复
本文介绍如何在企业微信中通过应用机器人实现语音消息的自动回复。具体步骤包括:创建企业微信应用,获取AgentID和Secret;使用AppFlow模版创建连接流并配置鉴权凭证;选择语音识别模型和大模型应用(如通义系列)进行自动回复;配置企业微信应用接收消息API及可信IP;最后测试应用功能。通过这些步骤,用户可以高效地利用大模型技术提升企业微信的使用体验。
1029 3
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
465 0
|
Go
【微信公众号】基于golang的公众号开发基本配置
【微信公众号】基于golang的公众号开发基本配置
272 0
|
Java API
java进行微信公众号开发
java进行微信公众号开发
264 0
|
XML 人工智能 数据安全/隐私保护
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
311 0
|
人工智能 Python
【Python + 微信】微信公众号开发避坑指南
【Python + 微信】微信公众号开发避坑指南
301 0
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
245 0
|
XML 数据格式 Python
【超详细!】Python微信公众号开发(2)
【超详细!】Python微信公众号开发(2)
369 0

热门文章

最新文章