开发者社区 问答 正文

钉钉如何回调?

钉钉如何回调?

展开
收起
三分钟热度的鱼 2023-08-15 15:05:58 121 分享 版权
1 条回答
写回答
取消 提交回答
  • lQLPJyKCrhK-WuzNAijNA6SwBzRkZGzSXPgEynmUMkDDAA_932_552.png
    public Map callBack(HttpServletRequest request,
    @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) {
    try {
    // 1. 从http请求中获取加解密参数

        // 2. 使用加解密类型
        // Constant.OWNER_KEY 说明:
        // 1、开发者后台配置的订阅事件为应用级事件推送,
        //      此时OWNER_KEY为应用的APP_KEY(企业内部应用)或SUITE_KEY(三方应用)。
        // 2、调用订阅事件接口订阅的事件为企业级事件推送,
        //      此时OWNER_KEY为:企业的CORP_ID(企业内部应用)或SUITE_KEY(三方应用)
        DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(Constant.AES_TOKEN, Constant.AES_KEY, Constant.OWNER_KEY);
        String encryptMsg = json.getString("encrypt");
        String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encryptMsg);
    
        // 3. 反序列化回调事件json数据
        JSONObject eventJson = JSON.parseObject(decryptMsg);
        String eventType = eventJson.getString("EventType");
    
        // 4. 根据EventType分类处理
        bizLogger.info("发生了:" + eventType + "事件");
    
        // 5. 返回success的加密数据
        Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");
        return successMap;
    
    } catch (DingTalkEncryptException e) {
        e.printStackTrace();
    }
    return null;
    

    } https://open.dingtalk.com/document/isvapp/configure-synchttp-push# 此回答整理自钉群“钉钉开发者社区(互助群)”

    2023-08-15 15:18:34
    赞同 展开评论
问答标签: