从官方文档可以看出,他做到了简简单单,但没有做到明明白白。

那么接下来我首先说下文中的url,很多人都不知道这个url,其实他就是

当这些正准备好之后,直接上代码

//微信推送事件 url@RequestMapping(value = "/wx", method = RequestMethod.GET)@ResponseBodypublic void get(HttpServletRequest request, HttpServletResponse response)throws Exception {boolean isGet = request.getMethod().toLowerCase().equals("get");if (isGet) {// 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {try {boolean flag = CheckoutUtil.checkSignature(signature, timestamp, nonce);System.out.println(flag);PrintWriter print = response.getWriter();print.write(echostr);System.out.println(echostr);print.flush();print.close();} catch (IOException e) {e.printStackTrace();}}}}

这个方法是你配置Url的时候他会请求这个地址,验证地址的准确性,请求通过下一步:

 @RequestMapping(value = "/wx", method = RequestMethod.POST)@ResponseBodypublic String responseMsg(HttpServletRequest req, HttpServletResponse resp) throws IOException {req.setCharacterEncoding("UTF-8");String message = "success";try {//把微信返回的xml信息转义成mapMap<String, String> map = XmlUtil.xmlToMap(req);String fromUserName = map.get("FromUserName");//这个就是你关注公众号的openId)String toUserName = map.get("ToUserName");//这个是用户微信的idString msgType = map.get("MsgType");//消息类型(event或者text)System.out.println("消息来自(公众号的openId):" + fromUserName);System.out.println("消息类型为:" + msgType);String eventType = map.get("Event");//事件类型JSONObject unionIdOpenId = getUnionIdOpenId(fromUserName);String unionid = unionIdOpenId.getStr("unionid");String nickname = unionIdOpenId.getStr("nickname");String subscribe_time = unionIdOpenId.getStr("subscribe_time");Date date=new Date();if (!StringUtil.isEmpty(subscribe_time)){date = DateUtil.LongToDate(Long.valueOf(subscribe_time));System.out.println("关注取消的时间是======"+date);}//根据unionid获取数据库里的用户增加公众号的openIdif (MessageUtil.MSGTYPE_EVENT.equals(msgType)) {//事件类型的监听if (MessageUtil.SUBSCIBE_EVENT.equals(eventType)) {//关注取消事件的监听String content = "欢迎关注,这里会带给你不一样的惊喜!";String msg = "@" + nickname + "," + content;System.out.println("事件类型为:关注公众号 =======" + eventType+";时间是:"+date);message = MessageUtil.subscribeForText(toUserName, fromUserName, msg);} else if (MessageUtil.UNSUBSCIBE_EVENT.equals(eventType)) {//处理取消订阅事件System.out.println("事件类型为:取消订阅事件------" + eventType+";时间是:"+date);message = MessageUtil.unsubscribe(toUserName, fromUserName);}} } catch (DocumentException e) {e.printStackTrace();}System.out.println("关注微信公众号自动回复的消息内容为:" + message);return message;}

这里面就可以写各种逻辑了,我这边是通过公众号发送小程序里的消息 获取到了unionid,然后通过unionid获取到了用户增加公众号的openid,这样发送消息的时候就可以通过公众号openId直接给用户推送消息,如下:

第一次写,可能也是简简单单。注意两个代码段的地址保持一致,只是请求方式不同。

交流微信:18611177866

微信公众号监听 关注/取消关注事件 消息接收与响应处理(比较细微)相关推荐

  1. 微信公众号监听手机返回键事件jssdk—wx.closeWindow

    需求场景: 只有扫码初始进入异业联盟活动页,0元券直接弹框领取成功(如图1) 抛出问题: 进入优惠券包后到另一个页面(如图1) 然后按手机返回会回到异业联盟活动页,始终弹出领取活动页面 解决方案: 在 ...

  2. 微信公众号监听返回按钮问题解决

    2017年12月21日 微信公众号监听返回按钮问题解决 //首页返回路径 $(function(){pushHistory();var bool = false;setTimeout(function ...

  3. vue微信公众号监听关闭页面

    试了网上找的pagehide,unload,都不管用,后来看到同志说下面的方法好使.用了果然可以,大家可以试试,也欢迎提出建议. addEventListener mounted() {// 微信公众 ...

  4. 微信公众号监听返回按钮关闭当前界面,部分安卓机监听popstate失败【小程序与公众号】

    需求: 微信公众号开发的时候,可能会出现这种需求: 微信公众号内指定某个网页在点击返回键时不回退到上一级,而是直接关闭微信浏览器窗口,用户点击返回按钮本身就是一个返回事件. 解决方案: 利用监听返回事 ...

  5. 微信公众号监听后退,关闭内置浏览器

    原理:在页面中我们可以使用javascript window history,后退到前面页面,但是由于安全原因javascript不允许修改history里已有的url链接,但可以使用pushStat ...

  6. 微信公众号监听取消扫码事件wx.scanQRCode

    wx.scanQRCode({needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ["qrCode"], // 可以指定扫二 ...

  7. 微信公众号监听安卓/ios关闭页面关闭方法大全

    之前看的网上说的用的什么pagehide,unload,都试了不管用都,然后我就用了下面的方法果然好使.大家可以试试都 let u = navigator.userAgent;var isiOS = ...

  8. 微信公众号开发(6)关注事件

    微信公众号开发(6)关注事件 学习目标 推送 event subscribe(关注) unsubscribe(取消关注) CLICK (自定义菜单点击事件) 关键代码如下: $ev = $postOb ...

  9. php如何判断是否关注,微信公众号判断用户是否已关注php代码解析

    搜索热词 <:微信公众号判断用户是否已关注PHP代码解析>要点: 本文介绍了:微信公众号判断用户是否已关注PHP代码解析,希望对您有用.如果有疑问,可以联系我们. 用户关注公众号,才能参与 ...

最新文章

  1. 最佳学习方法(3)听课--听一反三
  2. dev gridcontrol简单的动态设置动态表头
  3. freetextbox java_FreeTextBox3.2.2下载及使用详解(图)
  4. 动态规划——0-1背包问题
  5. python2.7虚拟环境
  6. pix2pix损失函数理解(精)
  7. scrapy 入门案例
  8. 【zepto学习笔记02】零碎点
  9. 源码实现 -- strdel
  10. sqlserver 没有备份误删数据_数据库服务器如何备份详细教程!
  11. 解决jQuery中dbclick事件触发两次click事件
  12. 全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同
  13. 电缆直径和电缆流过电流计算以及对照表
  14. Easy AR Unity开发
  15. HDU - 4565 So Easy!
  16. 申请永久免费空间、数据库空间、域名
  17. Android程序员二本出身、逆袭网易、一路孤独,flutter插件引用第三方库
  18. JFinal极速开发微信公众号
  19. 使用SDNN (space displacement neural network)进行多字体手写识别
  20. 数理统计内容整理(一)基本概念

热门文章

  1. 抓不住的年终奖,守不住的头发
  2. UC 浏览器曝中间人攻击漏洞,官方:已修复,国内版不受影响
  3. 路由器局域网IP(内网IP)和外网IP的关系
  4. 计算机专业研究生核心能力培养(0)——计算机专业要不要读研?
  5. vue中reject与provide使用
  6. 使用ffmpeg读取本地文件,进行推流
  7. Python练习3:求N的多次方
  8. EXCEL列乱序后内容重新对应
  9. STM32F407VET6
  10. Daniel Sabbah:软件工程的转折点