Java-钉钉订阅事件
文章目录
- 背景
- 什么是钉钉订阅事件
- 钉钉订阅事件的应用场景
- 整体思路
- 查看钉钉文档
- 什么是钉钉回调
- 钉钉回调具体实操
- 创建自己的应用
- 钉钉回调
- 开发过程中遇到的问题
- 总结
背景
最近需要做一个业务:钉钉组织架构下添加人员之后,要对该人员的数据信息做一个处理,比如:存储表。
于是查阅了有关钉钉的订阅事件,直接让钉钉回调自己的接口即可。也就是当钉钉的组织架构下有人员新增的时候,就让他去调用给他配置的接口(回调)。
什么是钉钉订阅事件
钉钉订阅事件是指钉钉开放平台提供的一种机制,允许开发者订阅企业内部发生的各类事件,例如员工加入、离职、部门变动、审批进度更新等。当这些事件在企业内部发生时,钉钉会向开发者事先指定的回调地址发送相应的通知,开发者可以根据通知进行进一步处理。
钉钉订阅事件的应用场景
钉钉订阅事件广泛应用于企业内部信息的实时监控和处理。以下是几个常见的应用场景:
人事管理:及时了解员工加入、离职以及岗位调整等人事变动,方便进行人力资源管理。
审批流程跟踪:实时获取审批进度更新,帮助相关人员掌握工作流程状态。
部门协作:订阅部门变动事件,及时调整团队工作布局,保持组织结构的同步性。
数据分析与监控:通过订阅特定数据变动事件,实时监控关键业务数据,并进行进一步分析与处理。
整体思路
查看钉钉文档
我们要先去看一个钉钉的开发文档,可以看到他有一个通讯录事件:添加链接描述

这里就有相关的事件类型,我们需要去取对应的事件类型即可。而且钉钉也有对应的代码示例,可以在钉钉上进行测试调用。
什么是钉钉回调
通俗来将钉钉回调就是让钉钉来订阅我们的一个接口。还是看钉钉的文档介绍。
添加链接描述
钉钉回调具体实操
创建自己的应用
在钉钉上在钉钉开放平台注册并创建一个应用。然后,在应用中创建需要订阅的事件类型,例如员工变动事件、审批进度更新事件等。每个事件都有对应的标识符和描述,开发者可以根据需要选择订阅的事件。
这里加密aes_key和token钉钉自己生成。请求网址就需要自己在代码中写接口。
钉钉回调
具体的可以点击“了解更多”可以查看具体的代码应该怎么使用。这里先给大家看一下我在项目组中的使用。
@ApiOperation("钉钉回调同步变动的人员")@PostMapping(value = "/dingCallback/{id}")public Map<String, String> dingCallback(@RequestParam(value = "msg_signature", required = false) String msg_signature,@RequestParam(value = "timestamp", required = false) String timeStamp,@RequestParam(value = "nonce", required = false) String nonce,@RequestBody(required = false) JSONObject json,@PathVariable("id") String id){try {// 1. 从http请求中获取加解密参数// 2. 使用加解密类型// Constant.OWNER_KEY 说明:// 1、开发者后台配置的订阅事件为应用级事件推送,此时OWNER_KEY为应用的APP_KEY。// 2、调用订阅事件接口订阅的事件为企业级事件推送,// 此时OWNER_KEY为:企业的appkey(企业内部应用)或 SUITE_KEY(三方应用)Map<String,String> config= dingProjectConfig.getDingproject().get(id);//回调页面上的获取的值String token=config.get("token");String aesKey = config.get("aesKey");String corpId = config.get("corpId");String tenantId=config.get("tenantId");
// String appKey=config.get("appId");String appSecret=config.get("secret");DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(token, aesKey, corpId);String encryptMsg = json.getString("encrypt");String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encryptMsg);// 3. 反序列化回调事件json数据JSONObject eventJson = JSON.parseObject(decryptMsg);JSONObject eventType=JSON.parseObject(String.valueOf(eventJson));DingEntity dingEntity = JSONObject.parseObject(JSONObject.toJSONString(eventType),DingEntity.class);String event= dingEntity.getEventType();// 4. 根据EventType分类处理if ("check_url".equals(dingEntity.getEventType())) {// 测试回调url的正确性System.out.println("测试回调url的正确性");} else if ("user_add_org".equals(event)) {//用户增加事件organizationService.insertNewDingInformation(dingEntity,tenantId,corpId,appSecret);} else {// 添加其他已注册的System.out.println("发生了其他事件");}// 5. 返回success的加密数据Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");System.out.println("successMap@@@@@@@@@@@@"+successMap);return successMap;} catch (DingCallbackCrypto.DingTalkEncryptException e) {e.printStackTrace();}return null;}
需要注意的是在代码中需要把H5应用的token、加密aes_Key、appKey、Appsecret填写上


这两部分的内容。
主要是这两部分进行钉钉解密操作。
在这段代码中,如果解密成功会有判断的事件,也就是他会判断钉钉的是什么订阅,这里有它的一部分标识,比如:新增人员的标识是user_add_org,等等,这部分是在开篇有介绍过。
在这些if判断中可以去编写自己的代码业务处理逻辑。
开发过程中遇到的问题
1、这里需要特别注意的是token、appKey这些值一定要书写正确,
2、设置回调地址的时候,上面不能有空格
3、多看钉钉帮助文档
总结
钉钉订阅事件的优势和特点
1、实时性:钉钉订阅事件可以在事件发生之后立即通知开发者,保证了信息的实时性和准确性。
2、简化操作:开发者只需要创建订阅事件、配置回调地址和编写业务处理代码,即可轻松实现对企业内部3、变化的订阅,无需频繁查询和轮询。
4、扩展性:钉钉订阅事件支持多种类型的企业内部事件,方便根据具体需求进行订阅和处理,具有很好的扩展性和灵活性。
钉钉订阅事件为企业提供了一种便捷的方式,实时订阅并处理企业内部关键信息的变化。无论是人事管理、审批流程跟踪还是数据分析与监控,都能通过钉钉订阅事件及时获取所需的信息并进行相应的处理。通过合理利用这一功能,企业可以极大地提高工作效率和决策能力,实现更加高效精准的协同合作。
相关文章:
Java-钉钉订阅事件
文章目录 背景什么是钉钉订阅事件钉钉订阅事件的应用场景 整体思路查看钉钉文档 什么是钉钉回调钉钉回调具体实操创建自己的应用钉钉回调开发过程中遇到的问题 总结 背景 最近需要做一个业务:钉钉组织架构下添加人员之后,要对该人员的数据信息做一个处理…...
【DataV/echarts】vue中使用,修改地图和鼠标点击部分的背景色
引入:使用 DataV 引入地图的教程是参考别人的,主要介绍修改地图相关的样式; 引入地图 是参考别人的,这里自己再整理一遍,注意需要安装 5 版本以上的 echarts; DataV 网址:https://datav.aliyun.…...
系统设计类题目汇总四
25 十个异步入库任务,如何保证他们原子入库? 了解了你的问题背景,确保10个异步入库任务原子性执行(即要么全部成功,要么全部失败)有以下几种方法: 数据库事务: 如果所有的入库操作都是在同一个…...
【C++心愿便利店】No.5---构造函数和析构函数
文章目录 前言一、类的6个默认成员函数二、构造函数三、析构函数 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C 心愿便利店 🔑本章内容:类…...
微软研究院团队获得首届AI药物研发算法大赛总冠军
编者按:AI 药物研发是人工智能未来应用的重要方向之一。自新冠病毒(SARS-CoV-2)首次爆发以来,新冠病毒的小分子药物研发备受关注,于近期举行的首届 AI 药物研发算法大赛便聚焦于此。在比赛中,来自微软研究院…...
redis实战篇之导入黑马点评项目
1. 搭建黑马点评项目 链接:https://pan.baidu.com/s/1Q0AAlb4jM-5Fc0H_RYUX-A?pwd6666 提取码:6666 1.1 首先,导入SQL文件 其中的表有: tb_user:用户表 tb_user_info:用户详情表 tb_shop:商户…...
【C++】详解红黑树并模拟实现
前言: 上篇文章我们一起学习了AVL树比模拟实现,我们发现AVL树成功地把时间复杂度降低到了O(logN)。但是同时我们不难发现一个问题,在构建AVL树中我们也付出了不小的代价,频繁的旋转操作导致效率变低。为了解决这个问题,…...
Matlab图像处理-最大类间方差阈值选择法(Otsu)
基本思想 最大类间方差阈值选择法又称为Otsu 算法,该算法是在灰度直方图的基础上用最小二乘法原理推导出来的,具有统计意义上的最佳分割阈值。它的基本原理是以最佳阈值将图像的灰度直方图分割成两部分,使两部分之间的方差取得最大值&#x…...
Spring Cloud(Finchley版本)系列教程(三) 服务消费者(Feign)
Spring Cloud(Finchley版本)系列教程(三) 服务消费者(Feign) 一、Feign和OpenFeign的对比 Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端。OpenFeign是SpringCloud自己研发的,在Feign的基础上支…...
AI图片生成 discord 使用midjourney
参考: 不用找咒语了!Midjourney图生文功能特征解析,玩转Describe命令,快速搞定AI绘画_哔哩哔哩_bilibili 1 登录 discord 2 点发现 找 midjourney 3 创建 服务器 -> 亲自创建 4 选 仅供我和我的朋友使用 5 起个 服务器名字 6 加bot 由于…...
gitlab 点击Integrations出现500错误
背景:在新服务器重新搭建了gitlab,并导入原来gitlab的备份,在项目中点击点击Integrations出现500错误。 解决方法:1.进入新服务器,将 /etc/gitlab/gitlab-secrets.json重命名为 /etc/gitlab/gitlab-secrets.json.bak …...
【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型
【2023高教社杯】A题 定日镜场的优化设计 问题分析及数学模型 1 题目 构建以新能源为主体的新型电力系统,是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(…...
rac异常hang死故障分析(sskgxpsnd2)
x86虚拟化的平台麒麟系统的一套RAC。事件梳理20:24左右,发现一个节点hang死,关闭操作没有响应。关闭hang死节点,另一个节点也发生hang死,然后重启了另一个节点。 无效分析部分 检查gi的alert日志 有一个很大跨度的时间回退 再看…...
2023.9.7 关于 TCP / IP 的基本认知
目录 网络协议分层 TCP/IP 五层(四层)模型 应用层 传输层 网络层(互联网层) 数据链路层(网络接口层) 物理层 网络数据传输的基本流程 网络协议分层 为什么需要分层? 分层之后,…...
Python 图片处理
Step1 提取PDF中的图片,并另存 Step2 去除灰色纸张背景 import PyPDF2 from PIL import ImageEnhance,Image,ImageFilter import cv2 import numpy as np from skimage.filters import unsharp_mask from skimage.filters import gaussian from skimage.restora…...
信道估计 | 信道
文章目录 定义分类LS 估计MMSE估计LS vs MMSE 定义 从接收数据中将假定的某个信道模型参数估计出来的过程,如果信道是线性的,信道估计是对系统的冲击响应进行估计,需强调的是,信道估计是信道对输入信号影响的一种数学表示&#x…...
腾讯发布超千亿参数规模的混元大模型;深度学习与音乐分析与生成课程介绍
🦉 AI新闻 🚀 腾讯发布超千亿参数规模的混元大模型 摘要:腾讯在2023腾讯全球数字生态大会上发布混元大模型,该模型拥有超千亿的参数规模和超2万亿 tokens 的预训练语料。混元大模型将支持多轮对话、内容创作、逻辑推理、知识增强…...
[html]当网站搭建、维护的时候,你会放个什么界面?
效果图: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网站建设中</title><style>/* 基础样式 */body, html {margin: 0;padding: 0;height: 100%;font-family: Arial, sa…...
javaee spring aop 的五种通知方式
spring配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:aop"http://www.springframework.…...
【Redis】3、Redis主从复制、哨兵、集群
Redis主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
