3、关注、取消关注 与 关键字回复
上一篇结尾已经说了关注(取消) 与 普通消息发送区别,所以程序更改如下就可以实现关注、取消关注 与 关键字回复三种不同处理
package com.wenxi.controller; import com.wenxi.Entity.XmlMessageEntity; import com.wenxi.utils.SecurityUtil; import com.wenxi.utils.WeixinUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Arrays; import java.util.Date; @Controller public class ValidateController { @RequestMapping(value = "/weixinValidate",method = RequestMethod.GET) @ResponseBody public String weixinValidate(String signature, String timestamp, String nonce, String echostr ){ // 1)将token、timestamp、nonce三个参数进行字典序排序 String[] arrs = {WeixinUtil.TOKEN,timestamp,nonce}; //WeixinUtil.TOKEN: 抽取出来的TOKEN,为了重用 Arrays.sort(arrs); // 2)将三个参数字符串拼接成一个字符串进行sha1加密 String str = arrs[0] + arrs[1] + arrs[2]; // 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if (signature.equals(SecurityUtil.SHA1(str))){ //确认此次GET请求来自微信服务器,返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败 return echostr; }else return null; } /** * 自动回复信息 */ @RequestMapping(value = "weixinValidate",method = RequestMethod.POST) @ResponseBody public XmlMessageEntity weixinValidate(@RequestBody XmlMessageEntity entity){ System.out.println(entity); XmlMessageEntity returnMessageEntity = new XmlMessageEntity(); returnMessageEntity.setFromUserName(entity.getToUserName()); returnMessageEntity.setToUserName(entity.getFromUserName()); returnMessageEntity.setCreateTime(new Date().getTime()); returnMessageEntity.setMsgType("text"); String content = ""; //判断消息类型为event if ("event".equals(entity.getMsgType())) { //关注 if ("subscribe".equals(entity.getEvent())) { content = "欢迎大家关注!"; //TODO 插入关注记录到数据库 }else if ("unsubscribe".equals(entity.getEvent())) { //取消关注 //TODO 更改关注状态为取消关注 } }else { //普通消息 //根据关键字回复 if ("暑假放多久".equals(entity.getContent())){ content = "暑假为2个月!"; }else{ //不是关键字统一回复 content = "暂时没有匹配的回复!"; } //TODO 这里可以保存用户的消息用于统计问题 } returnMessageEntity.setContent(content); return returnMessageEntity; } }
微信测试结果如下: