钉钉回调加解密类库和对应demo
温馨提示:该仓库中代码较早,而且早期事件订阅的数据安全方案设计上过于复杂,导致开发成本高,建议新的应用开发采用 DingTalk Stream Mode 代替 Webhook 方式,详见:https://open.dingtalk.com/document/orgapp/stream
Stream Mode 交流群:
// 1. 从http请求中获取加解密参数
String msg_signature = request.getParameter("msg_signature");
if (msg_signature == null) {
msg_signature = request.getParameter("signature");
}
String timeStamp = request.getParameter("timeStamp");
if (timeStamp == null) {
timeStamp = request.getParameter("timestamp");
}
String nonce = request.getParameter("nonce");
String encrypt = bodyJson.getString("encrypt");
// 2. 使用加解密类型
DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(TOKEN, AES_KEY, OWNER_KEY);
final String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encrypt);
// 3. 反序列化回调事件json数据
JSONObject eventJson = JSON.parseObject(decryptMsg);
String eventType = eventJson.getString("EventType");
// 4. 根据EventType分类处理
if ("check_url".equals(eventType)) {
// 测试回调url的正确性
} else if ("user_add_org".equals(eventType)) {
// 处理通讯录用户增加时间
} else {
// 添加其他已注册的
}
// 5. 返回success的加密数据
Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");
return successMap;
目前还没验证,暂不合并,仅在此推荐: