Java实现企业微信回调配置
在使用前阅读官方文档:回调配置文档
一、配置回调服务
一、在企业微信管理后台配置三个配置
分别是:URL, Token, EncodingAESKey。打开企业微信后台-->管理工具-->通讯录同步配置回调地址如下所示
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、查看日志
看完有所帮助请点点赞,送人玫瑰,手留余香。给作者一个
一.首先要了解开发场景,第三方应用开发.企业内部开发.智慧硬件开发的区别. 企业微信对应有三个开发文档,要注意三个开发文档虽然说部分接口是通用的,但是其接口获取的内容.调用的本质却大有不同,我建议先把 ... 企业微信回调接口开发 1.从企业微信api获取加解密方法 地址:企业微信api 注意事项:这里肯定会出现下面说的异常,按照说明下载jar替换jdk原来的jar就能解决问题,如果不行那就重启电脑. 2. ... 文章目录 一.企业微信配置参数 二.验签 三.企业微信客户联系回调 四.相关工具类 企业微信提供了回调接口,允许企业服务商和企业应用接收到企业微信的事件通知和用户操作通知.在接收到回调通知时,需要进行 ... 关于JAVA调用企业微信审批流程的接口 具体代码在最下面前半部分主要讲配置 第一步获取企业的获取access_token 参数: 1. corpid 公司的id 2. corpsecret 公司用的s ... 基于Java实现企业微信群聊机器人-文件上传+消息推送 1.pom.xml(注意版本尽量保持一致) 2.文件工具类 3.企业微信请求类 4.企业微信响应类 5.发送方法 6.企业微信机器人创建和配置 ... EasySQLMAIL1.0.1208中提供了企业微信消息的发送功能.可以发送文字消息和文件消息(如Excel和PDF). 企业微信的配置分两步:1-添加企业信息(要用到企业微信的"企业ID ... Vmware 虚拟平台监控.邮件告警.企业微信告警配置 8 Vmware 虚拟平台监控 阅读 zabbix 官方文档,官方提供了 Vmware 虚拟机监控模板,并对模板进行了解释说明,但未对相应名词做 ... 文章目录 一.需求来源 二.原始数据来源 三. 原数据审查确认 1.检查jira数据是否完整 2.数据异常 四.zabbix操作 1.创建账号 2.报警媒介类型 3.创建动作 4.添加告警人 5.测试 ... java集成企业微信完成授权登录 文章目录 前言 一.背景 二.使用步骤 1.前端请求链接获取Code 2.后端接收Code,请求微信链接完成返回用户信息 总结 前言 java集成企业微信完成授权登录 ...Java实现企业微信回调配置相关推荐
最新文章
热门文章