Java实现微信公众号自动回复

本文最先发表于我的个人博客,为同步发布,如有需要,请访问 获取更多内容

背景

准备工作

注册完毕后需要完成认证操作

代码

<dependency>
  <groupId>dom4j</groupId>
  <artifactId>dom4j</artifactId>
  <version>1.6.1</version>
</dependency>
<dependency>
  <groupId>com.thoughtworks.xstream</groupId>
  <artifactId>xstream</artifactId>
  <version>1.4.19</version>
</dependency>

自动回复内容一共需要两个接口(两个接口路由完全一致,一个为GET请求,一个为POST请求)

    消息接收接口

消息回复service

文本回复service

/**
 * @author C.W
 * @date 2022/5/18 9:57
 * @desc 文本回复
 */
@Service
public class TextReplyService {
          
   

    private static final String FROM_USER_NAME = "FromUserName";
    private static final String TO_USER_NAME = "ToUserName";
    private static final String CONTENT = "Content";

    @Autowired
    private WechatKeywordDao wechatKeywordDao;

    @Autowired
    private WechatMsgRecordDao wechatMsgRecordDao;

    /**
     * 自动回复文本内容
     *
     * @param requestMap
     * @return
     */
    public String reply(Map<String, String> requestMap) {
          
   
        String wechatId = requestMap.get(FROM_USER_NAME);
        String gongzhonghaoId = requestMap.get(TO_USER_NAME);

        TextMessage textMessage = WechatMessageUtils.getDefaultTextMessage(wechatId, gongzhonghaoId);

        String content = requestMap.get(CONTENT);
        if (content == null) {
          
   
            textMessage.setContent(WechatConstants.DEFAULT_MSG);
        } else {
          
   
            Example example = new Example(WechatKeywordPO.class);
            example.createCriteria().andEqualTo("wechatId", gongzhonghaoId).andEqualTo("keyword", content);
            List<WechatKeywordPO> keywordPOList = wechatKeywordDao.selectByExample(example);
            if (CollectionUtils.isEmpty(keywordPOList)) {
          
   
                textMessage.setContent(WechatConstants.DEFAULT_MSG);
            } else {
          
   
                textMessage.setContent(keywordPOList.get(0).getReplyContent());
            }
        }
        // 记录消息记录
        wechatMsgRecordDao.insertSelective(WechatMsgRecordPO.builder()
                .fromUser(wechatId)
                .wechatId(gongzhonghaoId)
                .content(content)
                .replyContent(textMessage.getContent())
                .build()
        );

        return WechatMessageUtils.textMessageToXml(textMessage);
    }

}

文本消息model

/**
 * @author C.W
 * @date 2021/11/26 22:21
 * @description 文本消息
 */
@Data
public class TextMessage extends BaseMessage {
          
   

    /**
     * 回复的消息内容
     */
    private String Content;

}

基础消息model

消息工具

消息类型枚举

其他内容为一些数据库相关操作,此处不再列出,仅为:查询关键词及其回复内容,存储消息记录
    服务器配置
    填写服务器地址
    生成你的令牌Token

验证方法

经验分享 程序员 微信小程序 职场和发展