1.配置微信公众服务器

2.提前下好公众号SHA1算法生成安全签名类

/*** SHA1 class** 计算公众平台的消息签名接口.*/
public class SHA1 {/*** 用SHA1算法生成安全签名* @param token 票据* @param timestamp 时间戳* @param nonce 随机字符串* @param encrypt 密文* @return 安全签名*/public static String getSHA1(String token, String timestamp, String nonce, String encrypt){try {String[] array = new String[] { token, timestamp, nonce, encrypt };StringBuffer sb = new StringBuffer();// 字符串排序Arrays.sort(array);for (int i = 0; i < 4; i++) {sb.append(array[i]);}String str = sb.toString();// SHA1签名生成MessageDigest md = MessageDigest.getInstance("SHA-1");md.update(str.getBytes());byte[] digest = md.digest();StringBuffer hexstr = new StringBuffer();String shaHex = "";for (int i = 0; i < digest.length; i++) {shaHex = Integer.toHexString(digest[i] & 0xFF);if (shaHex.length() < 2) {hexstr.append(0);}hexstr.append(shaHex);}return hexstr.toString();} catch (Exception e) {e.printStackTrace();return null;}}}

3.创建一个接口,就是配置公众号服务的接口

 //微信公众号验证@RequestMapping("openWx/gzhVerification")public String gzhVerification(HttpServletRequest request){log.info("微信公众号验证");String signature=request.getParameter("signature");String timestamp=request.getParameter("timestamp");String nonce=request.getParameter("nonce");String echostr=request.getParameter("echostr");String token="token";//这里填基本配置中的tokenString jiami="";try {jiami= SHA1.getSHA1(token, timestamp, nonce,"");//这里是对三个参数进行加密if(echostr!=null && jiami.equals(signature)){log.info("第一次申请验证成功");return  echostr;}//判断是否是公众号发来的请求if(jiami==null || !jiami.equals(signature)){log.info("错误的请求");return null;}//----------------------事件推送Map<String, String> stringStringMap = parseXml(request);//---按钮事件if("CLICK".equalsIgnoreCase(stringStringMap.get("Event"))){log.info("按钮事件");//因为只有一个按钮所以不用判断key了String fromUserName = toXML(stringStringMap.get("FromUserName"),stringStringMap.get("ToUserName"));log.info("fromUserName:"+fromUserName);//发送消息return  fromUserName;//关注公众号数据}else if("subscribe".equalsIgnoreCase(stringStringMap.get("Event")) && stringStringMap.get("EventKey")==null  && stringStringMap.get("Ticket")==null){log.info("关注公众号");customerWxGzhService._add(stringStringMap.get("FromUserName"),null);//取消关注}else if("unsubscribe".equalsIgnoreCase(stringStringMap.get("Event"))) {log.info("取消关注");customerWxGzhService._delete(stringStringMap.get("FromUserName"));//二维码关注}else if("subscribe".equalsIgnoreCase(stringStringMap.get("Event")) && stringStringMap.get("EventKey")!=null  && stringStringMap.get("Ticket")!=null){log.info("二维码关注");//获取二维码参数值String eventKey =stringStringMap.get("EventKey");eventKey= eventKey.substring(8);customerWxGzhService._add(stringStringMap.get("FromUserName"),eventKey);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return  null;}/*** dom4j 解析 xml 转换为 map* @param request* @return* @throws Exception*/public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {// 将解析结果存储在HashMap中Map<String, String> map = new HashMap<String, String>();// 从request中取得输入流InputStream inputStream = request.getInputStream();// 读取输入流SAXReader reader = new SAXReader();Document document = reader.read(inputStream);// 得到xml根元素Element root = document.getRootElement();// 得到根元素的所有子节点List<Element> elementList = root.elements();// 遍历所有子节点for (Element e : elementList)map.put(e.getName(), e.getText());// 释放资源inputStream.close();inputStream = null;return map;}//发送联系我们public String toXML(String toUserName,String fromUserName){StringBuilder sb = new StringBuilder();sb.append("<xml>");sb.append("<ToUserName><![CDATA["+toUserName+"]]></ToUserName>");sb.append("<FromUserName><![CDATA["+fromUserName+"]]></FromUserName>");sb.append("<CreateTime>"+System.currentTimeMillis()/1000+"</CreateTime>");sb.append("<MsgType><![CDATA[text]]></MsgType>");sb.append("<Content><![CDATA[您好]]></Content>");sb.append("</xml>");return sb.toString();}

公众号事件的提示只有一个接口 就是不断判断Event参数来处理事件,

java微信公众号开发之各种事件推送相关推荐

  1. 微信公众号关注/取消关注事件推送开发记录

    一.奉上官方文档 关注/取消关注事件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/offiaccount/Message_Managem ...

  2. Java 微信公众号每日自动给女朋友推送问候

    近期网上又出现一股给女朋友做微信公众号推送的潮流,那么别人有的我女朋友也得有不是O.o 简单研究了一下做微信公众号推送的原理,简单来说就是后台服务器做个定时任务,然后定时调用微信公众平台提供的Web ...

  3. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  4. Java微信公众号开发梳理

    Java微信公众号开发梳理 现在微信公众平台的开发已经越来越普遍,这次开发需要用到微信公众平台.因此做一个简单的记录,也算是给那些没踩过坑的童鞋一些启示吧.我将分几块来简单的描述一下,之后会做详细的说 ...

  5. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  6. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  7. Java微信公众号开发(一:接入平台,验证token)

    Java微信公众号开发(一:接入平台,验证token) 开发环境: 环境:JDK1.8 框架:springBoot 首先,在我们接入微信公众平台之前,我们需要注册微信公众号的开发者账号,获取开发者ID ...

  8. JAVA微信公众号开发第8篇JSSDK图片上传预览

    简介 博主微信JSSDK&图片上传预览基于微信分享做拓展,所以一些配置操作请点击查阅JAVA微信公众号开发第7篇JSSDK&微信分享博文 页面 <html><head ...

  9. 微信公众号如何无限制的定向推送消息--模板消息的应用

    微信公众号如何无限制的定向推送消息–模板消息的应用 最近开发的OA平台有一个需求:将待办消息推送到微信公众号的指定用户.但是为了避免用户受到垃圾消息的骚扰,微信对相关的接口做了非常严格的限制. 查阅开 ...

最新文章

  1. R语言ggplot2可视化配置多个子图中的相同分组使用相同的填充色实战
  2. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?
  3. Leetcode 45. 跳跃游戏 II (每日一题 20210922)
  4. python 操作ps_使用Python分离出ps的输出
  5. iOS 开发之获取时间到年底可能会踩到的坑
  6. KVM halt-polling机制分析
  7. docker运行jenkins挂掉_docker搭建jenkins
  8. 人工智能和计算机程序有什么区别,AI与计算机程序的区别?
  9. 亿图图示edraw max mac版
  10. java运维工程师简历模板_系统运维工程师个人个人简历模板.doc
  11. 驾驶证体检医院(114---2 挂对应的医院司机体检)
  12. 让计算机u盘启动,U盘启动设置|电脑如何设置U盘启动?
  13. 蒙特卡洛方法到底有什么用
  14. C#中(int)、Conver.Toint32()、int.Parse()三种类型转换方式的区别与联系--C#基础知识
  15. php 微信公众号图片外链,如何制作微信图文链接?微信图文链接生成
  16. 用计算机弹奏体面6,抖音计算器乐谱汇总 抖音计算器按出的音乐乐谱有哪些
  17. 6月小红书博主排行,谁是最佳创作者?
  18. 面向对象程序设计(c++)面试常问——for考研复试面试
  19. 一行代码“黑”掉任意网站
  20. 前端实现lottie案例

热门文章

  1. 怎样用计算机画景色,电脑绘画风景画
  2. (二十八:2021.01.10)MICCAI 2019 追踪之论文纲要(中)
  3. 【分治思想】12627 Erratic Expansion
  4. WiFi碰碰贴开发方案
  5. [UDA]Unsupervised Data Augmentation for Consistency Training
  6. 怎么建立客户的小档案?
  7. vimdiff对比文件夹
  8. Linux服务器磁盘扩容步骤
  9. UE4 基本动画设置
  10. vscode 设置代码格式化缩进为4个空格