手把手教钉钉配置事件订阅

1,075 阅读1分钟

一、登录钉钉后台,在开发管理配置服务器出口IP

image.png

二、在后台事件与回调中刷新aes_key和签名 token

image.png

三、后台代码实现(注意在后台事件与回调下面还有一个请求地址为请求该方法)

@RestController
@RequestMapping("dingding/event")
public class DingDingEvent {

    //钉钉事件订阅aeskey
    private String aeskey = "填写自己应用的";

    //钉钉事件订阅token
    private String token = "填写自己应用的";

    //钉钉appkey
    private String ownerkey = "填写自己应用的";

    @PostMapping
    public Map<String, String> dealData(@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) throws DingCallbackCrypto.DingTalkEncryptException {
        // 1. 从http请求中获取加解密参数
        String encrypt = json.getString("encrypt");

        // 2. 使用加解密类型
        DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(token, aeskey, ownerkey);
        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 if ("bpms_task_change".equals(eventType)) {
            // 处理审批实例变更(审批任务开始、结束、转交)
        } else if ("bpms_instance_change".equals(eventType)) {
            // 处理审批实例始末(审批任务开始、结束)
        }
        System.out.println(decryptMsg);

        // 5. 返回success的加密数据
        Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");
        return successMap;
    }
}

四、至此钉钉事件订阅配置完成(加解密工具附上)去下载