配置服务器信息


URL是后台回调接口地址,Token是为了验证回调信息的合法性的,EncodingAESKey随机生成即可

开发公众号配置校验回调开发

配置校验回调是以GET方式回调的,同消息事件回调是一个地址,只是请求方式不同。
如果验证成功,则响应回调请求的echostr值,否则啥也不返回。
代码示例:

/*** 微信公众号配置校验** @param appId* @param request* @param response*/
@RequestMapping(value = "/webchat/{appId}", method = {RequestMethod.GET})
@ApiOperation(value="微信公众号配置校验回调", notes="微信公众号配置校验回调")
public void receiveOfficialMsgGet(@PathVariable("appId") String appId, HttpServletRequest request, HttpServletResponse response) {logger.info("收到微信回调GET:{}", appId);// 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");Map<String, String[]> map = request.getParameterMap();for (Map.Entry<String, String[]> entry : map.entrySet()) {logger.info("{}={}", entry.getKey(), entry.getValue() != null ? entry.getValue()[0] : "");}// 获取公众号信息SingleParamRequest<String> singleParamRequest = new SingleParamRequest<>();singleParamRequest.setData(appId);ServiceJsonBean<OfficialAccount> officialAccountJsonBean = weiXinOfficialAccountService.getOfficialAccountByAppId(singleParamRequest);logger.info("获取到微信公众号信息:{}", JSONObject.toJSONString(officialAccountJsonBean));String officialToken = "";if (officialAccountJsonBean.getCode() == ErrorCode.SUCCESS.getCode() && officialAccountJsonBean.getData() != null) {officialToken = officialAccountJsonBean.getData().getOfficialToken();}String curSign = SecurityUtils.encryptSHA1(officialToken, timestamp, nonce);if (StringUtils.isEquals(signature, curSign) && StringUtils.isNotEmpty(echostr)) {logger.info("验证成功!");try {response.getWriter().write(echostr);} catch (IOException e) {logger.error("response输出异常", e);}}
}

消息、事件回调

消息、事件回调跟校验回调是同一个接口地址,但是请求方式为POST
消息、事件会以xml格式的传输到后台,后台解析xml进行处理

/*** 接收微信公众号消息或事件** @param appId* @param request* @return*/
@RequestMapping(value = "/webchat/{appId}", method = {RequestMethod.POST})
@ResponseBody
@ApiOperation(value="微信公众号消息或事件回调", notes="微信公众号消息或事件回调")
public void receiveOfficialMsgPost(@PathVariable("appId") String appId, HttpServletRequest request) {logger.info("收到微信回调POST:{}", appId);try {BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));String line = "";StringBuffer buffer = new StringBuffer();while ((line = br.readLine()) != null) {buffer.append(line);}String notifyXml = buffer.toString();logger.info("收到微信回调:{}", notifyXml);Map<String, String> xmlMap = XmlUtils.xmlToMap(notifyXml);// 发布事件NormalMsgEvent normalMsgEvent = new NormalMsgEvent(applicationContext, xmlMap, appId);applicationContext.publishEvent(normalMsgEvent);} catch (Exception e) {logger.error("微信消息回调异常", e);}
}

微信公众号自定义回调开发相关推荐

  1. 自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...

    本章主要讲解微信公众号自定义菜单.微信网页开发.模板消息推送等功能的实现: 发福利了,下方关注公众号,就能免费获取项目源码 1.自定义菜单 开发前需要了解以下几点: 1.微信公众号的自定义菜单最多包括 ...

  2. 微信公众号自定义功能页开发流程

    1.申请微信公众号(服务号类型),且是企业认证通过的: 2.购买服务器,购买域名,申请域名备案(微信公众平台授权配置只允许配置域名,不接受ip及端口号):本人这里用的是阿里云服务器及域名,也是在阿里云 ...

  3. springboot微信公众号自定义菜单创建及响应

    微信公众号自定义菜单创建及响应 前言 本篇博客是为了速度开发微信公众号而进行讲解,对于深入的原理性讲解推荐去观看微信公众平台的官方文档. 微信公众号分为订阅号,服务号,小程序,本篇主要是介绍的订阅号开 ...

  4. 微信公众号后台服务开发(一):自动消息回复

    微信公众号后台服务开发 简述 微信平台提供的自动回复机制 后台服务开发 配置指定服务器 消息自动回复功能开发 简述 使用Java SpringBoot框架搭建微信工作号后台实现自定义逻辑自动回复 先注 ...

  5. 微信公众号的简单开发

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能. 今天给大家分享一下,修真院官网 ...

  6. 微信 SHA1 签名_微信公众号自动回复功能开发

    微信公众号自动回复功能开发 本篇主要讲解 微信公众号自动回复功能开发,让我们自己去托管公众号回复的功能,这样可以更加灵活的根据公众号收到的信息来制定特定的回复信息,一起来了解吧! 1.注册公众号 如果 ...

  7. 微信公众号成绩查询开发-Leo老师

    微信公众号现在可分为两种-订阅号和服务号,两者又可在做区分一是未认证,二是微信认证号;服务号支持功能多于订阅号,认证号的功能支持多于未认证账号. 在工作学习中,我们经常会遇到微信公众号成绩查询开发 这 ...

  8. 微信公众号H5页面开发--微信JS-SDK引用

    微信公众号H5页面开发–微信JS-SDK引用 微信提供了微信公众号开发者手册,官方地址:https://mp.weixin.qq.com/ 公众号内许多复杂的业务场景,都是通过网页形式来提供服务,这时 ...

  9. java 创建自定义菜单_Java实现微信公众号自定义菜单的创建方法示例

    本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微 ...

最新文章

  1. 流程控制if、while、for
  2. OpenCV4.4 CUDA编译与加速全解析
  3. Document对象内容集合
  4. ASP.NET MVC入门到精通——Spring.net-业务层仓储
  5. 页面jlabel背景色设置_(六)使用elementUI搭建管理员页面布局
  6. 用python画花瓣-Python教程:使用Turtles画出带有花瓣的花
  7. JavaScript 私有成员
  8. 基于Conditional Layer Normalization的条件文本生成
  9. 国产手机都会用鸿蒙吗,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?来看看...
  10. fork()请问下面的程序一共输出多少个“A”?多少个-?
  11. [css] 如何给文字的color设置渐变
  12. Start Developing iOS Apps Today系列(二)
  13. Clipboard.js – 现代方式实现复制文本到剪贴板
  14. redhat rhel 7中如何切换中英文输入法。
  15. java多线程Thread.sleep方法用法详解
  16. 西门子Step7的AT指令示例
  17. 本人博客目录 [实时更新]
  18. 安卓adb问题处理总结
  19. 365天口才训练计划
  20. Python-opencv:将文件夹中的图片序列按顺序转化为视频

热门文章

  1. Google Authenticator SSH双重验证技术
  2. Java正则表达式(一看就懂)
  3. JMeter压测及测试报告生成
  4. Matlab初入门之高斯滤波
  5. 蓝松SDK-android版本错误码
  6. H3C 胖AP设置(VLAN模式)——高级配置
  7. SDUT L - 土拨鼠掷鼬鼠(二分查找)
  8. 鼠标突然变慢或变快:有多个键多功能的鼠标误触
  9. 多层高速PCB设计学习笔记(四)四层板实战(上)之常见模块要求
  10. [python]比较文章相似度