微信公众号快速开发(三)多种消息类型处理

之前介绍了自动回复,下面介绍一些常见的消息处理样式

开始开发——关键字回复

功能描述

当我们公众号发送一些关键词的时候,公众号会回复自动回复有关关键词的信息。

实现思路

  1. 消息类型为文本样式
  2. 接收的客服端消息中要包含该关键字

代码开发

为便于扩展,将消息处理的方法写到服务层,新建收发信息的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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值