在使用前阅读官方文档:回调配置文档

一、配置回调服务

一、在企业微信管理后台配置三个配置

分别是:URLTokenEncodingAESKey。打开企业微信后台-->管理工具-->通讯录同步配置回调地址如下所示

1.1、URL为回调服务地址,由开发者搭建(直白点就是后台回调域名地址,你给企业微信的URL,例如http://127.0.0.1:8085/qiyewx/getCallBack)服务器如果是云服务要配置域名

1.2、Token用于计算签名,由英文或数字组成且长度不超过32位的自定义字符串。(可随机获取,但要复制到本地代码,后面会用到)

1.3、EncodingAESKey用于消息内容加密,由英文或数字组成且长度为43位的自定义字符串。(可随机获取,但要复制到本地代码,后面会用到)

二、在代码中配置Token和EncodingAESKey

# 企业微信配置
qiyewx:url: corpid: corpsecret: #回调配置token: XXXXXXencodingAESKey: XXXXXX

三、官方加解密库下载

1、点击如下链接自行下载,下载后结构如下图所示:

有json版本和xml版本

json版本:

xml版本:

加解密库下载与返回码 - 接口文档 - 企业微信开发者中心

2、将下载的示例代码复制到你的项目代码中

二、编码实现

一、引入相关项目依赖

<!--企业微信相关--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><!-- 企业微信json格式包--><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20200518</version></dependency>
<!-- dom4j解析xml --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>

二、支持Http Get请求验证URL有效性与支持Http Post请求接收业务数据

切记:将将下载的示例代码复制到你的项目代码中,下面的代码中有使用。

1、coontroller

/*** 企业微信回调* 3.1 支持Http Get请求验证URL有效性* 3.2 支持Http Post请求接收业务数据** @return*/@RequestMapping(value = "/getCallBack", method = {RequestMethod.GET, RequestMethod.POST})public Object CompanyWeChatChangeNotice(HttpServletRequest request, @RequestBody(required = false) String body) {Map<String, String[]> parameterMap = request.getParameterMap();String jsonString = JSONObject.toJSONString(parameterMap);log.info("企业微信回调参数:{},  解析参数:{}", jsonString, body);if (body == null) {Object result = qyWxService.verificationUrl(request);return result;}Map<String, String> resultMap = qyWxService.getRequestParameter(request, body);System.err.println(resultMap);return "success";}

2、验证URL有效性

 /*** 验证回调URL** @param request* @return*/public Object verificationUrl(HttpServletRequest request) {log.info("=========验证URL有效性开始=========");String sEchoStr; //需要返回的明文try {WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qyWxConfig.getToken(), qyWxConfig.getEncodingAESKey(), qyWxConfig.getCorpid());String msgSignature = request.getParameter("msg_signature");String timeStamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");log.info("企业微信加密签名: {},时间戳: {},随机数: {},加密的字符串: {}", msgSignature, timeStamp, nonce, echostr);sEchoStr = wxcpt.VerifyURL(msgSignature,timeStamp,nonce,echostr);log.info("给企业微信返回的明文,{}", sEchoStr);log.info("=========验证URL有效性结束=========");return sEchoStr;} catch (AesException e) {log.error("验证URL失败,错误原因请查看异常:{}", e.getCode());throw new AesException(e.getCode());}}

3、回调参数解析

 /*** 企业微信回调参数解析** @param request* @param body* @return*/public Map<String, String> getRequestParameter(HttpServletRequest request, String body) {log.info("=========参数解析开始=========");try {WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qyWxConfig.getToken(), qyWxConfig.getEncodingAESKey(), qyWxConfig.getCorpid());String msgSignature = request.getParameter("msg_signature");String timeStamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");log.info("企业微信加密签名: {},时间戳: {},随机数: {}", msgSignature, timeStamp, nonce);String sMsg = wxcpt.DecryptMsg(msgSignature, timeStamp, nonce, body);Map<String, String> resultMap = new HashMap<String, String>(16);resultMap = ConstantUtil.parseXmlToMap(sMsg, resultMap);log.info("decrypt密文转为map结果为{}", resultMap);log.info("=========参数解析结束=========");return resultMap;} catch (AesException e) {log.error("密文参数解析失败,错误原因请查看异常:{}", e.getMessage());throw new AesException(e.getCode());}}

4、XML转map工具

package com.ruoyi.system.qiwechat.utils;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.StringReader;
import java.util.Iterator;
import java.util.Map;/*** @author XiYuan* @date 2023/2/20* @Description: XML转换Map*/
public class ConstantUtil {/*** 将xml转换为Map。 支持xml标签多层嵌套,并以"."分隔多级标签(不包括根节点)。 不支持XML标签重复时的情况** @param xml* @param map* @return*/public static Map<String, String> parseXmlToMap(String xml, Map<String, String> map) {try {SAXReader reader = new SAXReader();Document doc = reader.read(new StringReader(xml));Element root = doc.getRootElement();String path = "";if (map.containsKey(root.getName().trim())) {path = map.get(root.getName().trim());map.remove(root.getName().trim());}for (Iterator i = root.elementIterator(); i.hasNext();) {Element element = (Element) i.next();if (element.isTextOnly()) {if (path.length() > 0) {map.put(path + element.getName().trim(), element.getTextTrim());} else {map.put(element.getName().trim(), element.getTextTrim());}} else {map.put(element.getName().trim(), path+ element.getName().trim() + ".");parseXmlToMap(element.asXML(), map);}}} catch (Exception e) {e.printStackTrace();}return map;}
}

5、配置文件config

package com.ruoyi.common.config;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
public class QyWxConfig {/***  请求路径*/@Value("${qiyewx.url}")private String url;/*** 企业微信ID*/@Value("${qiyewx.corpid}")private String corpid;/*** 企业应用的凭证密钥*/@Value("${qiyewx.corpsecret}")private String corpsecret;/*** 开发者设置的token*/@Value("${qiyewx.token}")private String token;/*** 开发者设置的EncodingAESKey*/@Value("${qiyewx.encodingAESKey}")private String encodingAESKey;
}

三、测试示例

一、测试3.1 支持Http Get请求验证URL有效性

企业微信开发者中心测试工具

所要参数依次写入,测试

二、测试3.2支持Http Post请求接收业务数据

1、演示关于接收客户变更事件回调通知,企业微信开发者中心 回调

2、通俗点就是手机企业微信添加客户将数据回调到本地,按照文档说明讲相关参数设置好。如图所示:

3、对返回结果按照自己需求进行处理

如下红框所示:

备注:要根据事件的类型Event判断回调的事件,在回调事件中根据ChangeType判断事件性质

4、查看日志

看完有所帮助请点点赞,送人玫瑰,手留余香。给作者一个

Java实现企业微信回调配置相关推荐

  1. 【企业微信急速救心丸】(一)第三方应用开发 - Java整合企业微信回调

    一.首先要了解开发场景,第三方应用开发.企业内部开发.智慧硬件开发的区别. 企业微信对应有三个开发文档,要注意三个开发文档虽然说部分接口是通用的,但是其接口获取的内容.调用的本质却大有不同,我建议先把 ...

  2. 企业微信回调接口开发

    企业微信回调接口开发 1.从企业微信api获取加解密方法 地址:企业微信api 注意事项:这里肯定会出现下面说的异常,按照说明下载jar替换jdk原来的jar就能解决问题,如果不行那就重启电脑. 2. ...

  3. 企业微信回调接口验签

    文章目录 一.企业微信配置参数 二.验签 三.企业微信客户联系回调 四.相关工具类 企业微信提供了回调接口,允许企业服务商和企业应用接收到企业微信的事件通知和用户操作通知.在接收到回调通知时,需要进行 ...

  4. 关于JAVA调用企业微信审批流程的接口

    关于JAVA调用企业微信审批流程的接口 具体代码在最下面前半部分主要讲配置 第一步获取企业的获取access_token 参数: 1. corpid 公司的id 2. corpsecret 公司用的s ...

  5. 基于Java实现企业微信群聊机器人-文件上传+消息推送(保证可用)

    基于Java实现企业微信群聊机器人-文件上传+消息推送 1.pom.xml(注意版本尽量保持一致) 2.文件工具类 3.企业微信请求类 4.企业微信响应类 5.发送方法 6.企业微信机器人创建和配置 ...

  6. EasySQLMAIL中企业微信的配置方法

    EasySQLMAIL1.0.1208中提供了企业微信消息的发送功能.可以发送文字消息和文件消息(如Excel和PDF). 企业微信的配置分两步:1-添加企业信息(要用到企业微信的"企业ID ...

  7. Zabbix 系统监控(三)VMware 虚拟平台监控、邮件告警、企业微信告警配置

    Vmware 虚拟平台监控.邮件告警.企业微信告警配置 8 Vmware 虚拟平台监控 阅读 zabbix 官方文档,官方提供了 Vmware 虚拟机监控模板,并对模板进行了解释说明,但未对相应名词做 ...

  8. linux12企业实战 -- 37zabbix企业微信通知配置

    文章目录 一.需求来源 二.原始数据来源 三. 原数据审查确认 1.检查jira数据是否完整 2.数据异常 四.zabbix操作 1.创建账号 2.报警媒介类型 3.创建动作 4.添加告警人 5.测试 ...

  9. java集成企业微信完成授权登录

    java集成企业微信完成授权登录 文章目录 前言 一.背景 二.使用步骤 1.前端请求链接获取Code 2.后端接收Code,请求微信链接完成返回用户信息 总结 前言 java集成企业微信完成授权登录 ...

最新文章

  1. 人大附中高中生学Python获数据挖掘竞赛一等奖,将去旷视科技实习
  2. AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术
  3. webpack-插件机制杂记
  4. 放在每个定义前的html语言,html基础
  5. android平台上持久化存储3种手段_深入学习Redis :持久化
  6. 【Java】java Arrays.asList 在idea 下 debug 不同结果的表现 非常诡异 胆小勿入
  7. 前端知识点总结——VUE
  8. Layui 数据表格动态cols(字段)动态变化
  9. 用Java简单实现单例模式
  10. Android 接入美洽
  11. C++ #pragma once用法总结
  12. 计算机三维艺术设计基础,计算机艺术设计基础(修订版)
  13. SitePoint播客#26:力量在于您
  14. android光照传感器,Android 传感器--光照传感器详解及使用
  15. Matlab App Designer自学笔记(九):容器及图窗控件
  16. Java Web基础知识之安全:人生苦短,注意安全
  17. 【ALGO】模拟退火(1)
  18. 智能手机功能设计实现
  19. 计算机电脑显卡基础知识,基础电脑显卡知识,你还不知道吗?别再被坑了!
  20. 智能控制导论 # 模糊控制 1 理论及实例

热门文章

  1. Win7 突然没声音 无法播放测试音调
  2. 从‘心’出发,乐跑向前——德州站健心跑公益活动盛大开跑
  3. 英语词性-句子成分-构词法
  4. 使用 EasyExcel 操作exsel文件
  5. 在计算机领域,美国信息交换标准代码的缩写符号是.,计算机基础在线作业.docx...
  6. 几款常见开源php博客体验
  7. Docker——Dockerfile(构建自己的CentOS镜像和Tomcat镜像)并打包镜像发布上线
  8. 迪赛智慧数——饼图(玫瑰饼图):世界厨师日之-从业时间
  9. redis数据库(一)
  10. Vue验证手机号的同时验证座机号