【公众号-个人订阅号开发】接受文本消息&响应文本消息

2025-10-14 04:28:28

服务器接受文本消息

用户给公众号发送的信息都会发送到之前你配置服务器(不清楚服务器配置的可以参考之前的文章【个人小程序订阅号开发】微信后台服务端接入 Java实现)。我们可以接受消息体解析并对相应的消息做出自动回复。

假设有如下场景

A 向公众号发送“人工服务”文本信息公众号回复A用户如下内容:“好的,正在为你转接中”

开发代码

基于上一章节代码基础开发新的代码。

接收文本消息实体类

官方文本数据说明如下

xml 样例

1348831860

1234567890123456

xxxx

xxxx

字段说明

参数描述ToUserName开发者微信号FromUserName发送方账号(一个OpenID)CreateTime消息创建时间 (整型)MsgType消息类型,文本为textContent文本消息内容MsgId消息id,64位整型MsgDataId消息的数据ID(消息如果来自文章时才有)Idx多图文时第几篇文章,从1开始(消息如果来自文章时才有)

添加 XML Maven 依赖

由于接收到的消息是XML格式的,添加如下maven 依赖

jakarta.xml.bind

jakarta.xml.bind-api

4.0.2

com.sun.xml.bind

jaxb-impl

4.0.0

runtime

ReceiveTextMessage实体类Java

package top.xyx0123.wx.entity;

import io.swagger.v3.oas.annotations.media.Schema;

import jakarta.xml.bind.annotation.XmlAccessType;

import jakarta.xml.bind.annotation.XmlAccessorType;

import jakarta.xml.bind.annotation.XmlRootElement;

import lombok.Data;

/**

* ReceiveTextMessage.

*/

@XmlRootElement(name = "xml")

@XmlAccessorType(XmlAccessType.FIELD)

@Data

@Schema(example =

"\n" +

"\n" +

"\t你好\n" +

"\t0\n" +

"\tB\n" +

"\tA\n" +

"\tmsgDataId\n" +

"\tmsgId\n" +

"\ttext\n" +

"")

public class ReceiveTextMessage {

private String ToUserName;

private String FromUserName;

private long CreateTime;

private String MsgType;

private long MsgId;

private String MsgDataId;

private String Content;

}

响应文本消息实体类

xml 样例

12345678

字段说明

参数是否必须描述ToUserName是接收方账号(收到的OpenID)FromUserName是开发者微信号CreateTime是消息创建时间 (整型)MsgType是消息类型,文本为textContent是回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

ResponseTextMessage实体类Java

package top.xyx0123.wx.entity;

import jakarta.xml.bind.annotation.XmlAccessType;

import jakarta.xml.bind.annotation.XmlAccessorType;

import jakarta.xml.bind.annotation.XmlRootElement;

import lombok.Data;

/**

* ResponseTextMessage.

*/

@XmlRootElement(name = "xml")

@XmlAccessorType(XmlAccessType.FIELD)

@Data

public class ResponseTextMessage {

private String ToUserName;

private String FromUserName;

private long CreateTime;

private String MsgType;

private String Content;

}

Controller定义Post消息接收接口

Notice: consumes = {"text/xml; charset=UTF-8"}) 经过测试,微信以Content-Type: text/xml;charset=UTF-8请求。

@RequestMapping(value = "/wechat/validate", method = RequestMethod.POST,

produces = {"application/xml; charset=UTF-8",},

consumes = {"text/xml; charset=UTF-8"})

public ResponseTextMessage receiveMessage(

@RequestBody ReceiveTextMessage receiveTextMessage) {

log.info("Receive message: {}", receiveTextMessage);

// 响应的消息

ResponseTextMessage responseTextMessage = new ResponseTextMessage();

responseTextMessage.setToUserName(receiveTextMessage.getFromUserName());

responseTextMessage.setFromUserName(receiveTextMessage.getToUserName());

responseTextMessage.setCreateTime(new Date().getTime());

responseTextMessage.setMsgType(receiveTextMessage.getMsgType());

responseTextMessage.setContent("好的,正在为你转接中");

return responseTextMessage;

}

测试

本地swagger测试

正式环境测试

为了测试开发公众号的功能,我也是新申请了一个订阅号。和大家一样从0开始的。大家可以关注我的公众号(软件老许)去验证实现的功能,或者扫描下方二维码测试本次内容功能。目前实现了发送文本自动回复文本消息如文章中提到的功能。后面开发的功能也都会集成到这个公众号上面。接下来我再看看有什么比较好玩有趣的功能都会开发分享。 最后谢谢大家! 十一国庆快乐!