之前介绍了自动回复,下面介绍一些常见的消息处理样式
开始开发——关键字回复
功能描述
当我们公众号发送一些关键词的时候,公众号会回复自动回复有关关键词的信息。
实现思路
- 消息类型为文本样式
- 接收的客服端消息中要包含该关键字
代码开发
为便于扩展,将消息处理的方法写到服务层,新建收发信息的dto
一、便于扩展为不同类型的消息,修改收发消息的封装,改用dto模式
- 基础消息实体类
@Data
@XmlAccessorType(XmlAccessType.FIELD) // 映射类中的所有字段到XML
public class MsgSendEntity {
/**
* 公有部分
*/
// 开发者微信号
@XmlElement(name = "ToUserName") // 指定名称映射
private String toUserName;
// 发送方帐号(一个OpenID)
@XmlElement(name = "FromUserName")
private String fromUserName;
// 消息创建时间 (整型)
@XmlElement(name = "CreateTime")
private Long createTime;
// 消息类型
@XmlElement(name = "MsgType")
private String msgType;
// 消息id,64位整型
@XmlElement(name = "MsgId")
private Long msgId;
}
@Data
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgReplyEntity {
// 用户的OpenID
@XmlElement(name = "ToUserName")
private String toUserName;
// 测试号的微信号
@XmlElement(name = "FromUserName")
private String fromUserName;
// 消息创建时间 (整型)
@XmlElement(name = "CreateTime")
private Long createTime;
// 消息类型
@XmlElement(name = "MsgType")
private String msgType;
// 文本消息内容
@XmlElement(name = "Content")
private String content;
}
- 新建消息实体类的dto
@Data
@XmlRootElement(name = "xml") // 根节点
@XmlAccessorType(XmlAccessType.FIELD) // 映射类中的所有字段到XML
public class MsgSendDto extends MsgSendEntity {
// 文本消息内容
@XmlElement(name = "Content")
private String content;
}
@Data
@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgReplyDto extends MsgReplyEntity {
}
二、抽取消息处理的服务类与消息处理的方法到服务层
@Service
public class MsgHandleServiceImpl implements IMsgHandleService {
@Override
public MsgReplyEntity handle(MsgSendEntity msgSend) {
WeChatUtil.getLogger().info("客户端接收的内容为:{}"+msgSend);
// 服务端消息回复的实体类
MsgReplyEntity msgReply = new MsgReplyEntity();
// 根据接收的信息回复,接收和发送方相反
msgReply.setFromUserName(msgSend.getToUserName());
msgReply.setToUserName(msgSend.getFromUserName());
msgReply.setCreateTime(new Date().getTime());
String msgType = msgSend.getMsgType();
String contentReply = null;
// 处理不同类型的消息
if (msgType.equals(WeChatConstants