我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java实现企业微信回调配置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java实现企业微信回调配置

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

一、配置回调服务

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

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

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

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

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

二、在代码中配置Token和EncodingAESKey

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

 三、官方加解密库下载

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

有json版本和xml版本 

json版本:

xml版本:

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

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

二、编码实现

一、引入相关项目依赖

                    commons-codec            commons-codec                                    org.json            json            20200518                            dom4j            dom4j            1.6.1        

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

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

1、coontroller

    @RequestMapping(value = "/getCallBack", method = {RequestMethod.GET, RequestMethod.POST})    public Object CompanyWeChatChangeNotice(HttpServletRequest request, @RequestBody(required = false) String body) {       Map parameterMap = request.getParameterMap();        String jsonString = JSONObject.toJSONString(parameterMap);        log.info("企业微信回调参数:{},  解析参数:{}", jsonString, body);        if (body == null) {            Object result = qyWxService.verificationUrl(request);            return result;        }        Map resultMap = qyWxService.getRequestParameter(request, body);        System.err.println(resultMap);               return "success";    }

2、验证URL有效性 

     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、回调参数解析

     public Map 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 resultMap = new HashMap(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;public class ConstantUtil {        public static Map parseXmlToMap(String xml, Map 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@Configurationpublic class QyWxConfig {        @Value("${qiyewx.url}")    private String url;        @Value("${qiyewx.corpid}")    private String corpid;        @Value("${qiyewx.corpsecret}")    private String corpsecret;        @Value("${qiyewx.token}")    private String token;        @Value("${qiyewx.encodingAESKey}")    private String encodingAESKey;}

三、测试示例

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

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

所要参数依次写入,测试

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

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

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

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

如下红框所示: 

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

4、查看日志

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

来源地址:https://blog.csdn.net/LIU_ZHAO_YANG/article/details/129137077

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java实现企业微信回调配置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

微信企业号如何配置和使用

这篇文章将为大家详细讲解有关微信企业号如何配置和使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、微信企业号的注册和登陆企业号是继公众号、订阅号的另外一种微信类型,它主要是面对企业的。企业号是微信为企
2023-06-17

java对接企业微信的实现步骤是什么

这篇文章给大家介绍java对接企业微信的实现步骤是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言最近实现社群对接企业微信,对接的过程遇到一些点,在此记录。企业微信介绍企业微信具有和微信一样的体验,用于企业内部成
2023-06-26

Asp.Net Core 企业微信静默授权的实现

企业微信接口文档 1. 构造授权网页链接2.回调获取到 Code 通过code+access_token去 请求用户信息3. 获取access_token调试准备工作 -->内网穿透+域名 推荐向日葵有免费的,免费的开发测试够用了 域名的配
2022-06-07

.NET Core如何实现企业微信消息推送

这篇文章主要介绍了.NET Core如何实现企业微信消息推送的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.NET Core如何实现企业微信消息推送文章都会有所收获,下面我们一起来看看吧。接口定义应用支持推送文
2023-07-02

使用python怎么实现企业微信发送消息

这篇文章给大家介绍使用python怎么实现企业微信发送消息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、需要的参数1、通讯用户:touser 或 通讯组:toparty 2、企业ID:corpid
2023-06-15

python使用jenkins发送企业微信通知的实现

如果只是想实现将jenkins的构建结果发送到企业微信进行通知,最简便的方式是安装Qy Wechat Notification Plugin插件,网上教程很多就不重复写了,可参考: 一、前言 最近使用Jenkins进行自动化部署,但是部署后
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录