服务器接受文本消息
用户给公众号发送的信息都会发送到之前你配置服务器(不清楚服务器配置的可以参考之前的文章【个人小程序订阅号开发】微信后台服务端接入 Java实现)。我们可以接受消息体解析并对相应的消息做出自动回复。
假设有如下场景
A 向公众号发送“人工服务”文本信息公众号回复A用户如下内容:“好的,正在为你转接中”
开发代码
基于上一章节代码基础开发新的代码。
接收文本消息实体类
官方文本数据说明如下
xml 样例
字段说明
参数描述ToUserName开发者微信号FromUserName发送方账号(一个OpenID)CreateTime消息创建时间 (整型)MsgType消息类型,文本为textContent文本消息内容MsgId消息id,64位整型MsgDataId消息的数据ID(消息如果来自文章时才有)Idx多图文时第几篇文章,从1开始(消息如果来自文章时才有)
添加 XML Maven 依赖
由于接收到的消息是XML格式的,添加如下maven 依赖
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" +
"
"\t
"\t
"\t
"\t
"\t
"\t
"\t
"")
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 样例
字段说明
参数是否必须描述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开始的。大家可以关注我的公众号(软件老许)去验证实现的功能,或者扫描下方二维码测试本次内容功能。目前实现了发送文本自动回复文本消息如文章中提到的功能。后面开发的功能也都会集成到这个公众号上面。接下来我再看看有什么比较好玩有趣的功能都会开发分享。 最后谢谢大家! 十一国庆快乐!