Foxtable(狐表)用户栏目专家坐堂 → 求助钉钉回调地址验证设置办法


  共有3194人关注过本帖树形打印复制链接

主题:求助钉钉回调地址验证设置办法

帅哥哟,离线,有人找我吗?
gudao123456
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
求助钉钉回调地址验证设置办法  发帖心情 Post By:2021/7/20 11:40:00 [显示全部帖子]

在关于回调验证,foxtable的帮助文档只是针对了微信开发举例,而且对其逻辑说得不是很细,不是很理解。现要对钉钉接口进行回调验证,无法模仿,特求助老师。
钉钉开发文档的示例代码如下:
      @RequestMapping(value = "dingCallback", method = RequestMethod.POST)
    public Object dingCallback(
        @RequestParam(value = "signature") String signature,
        @RequestParam(value = "timestamp") Long timestamp,
        @RequestParam(value = "nonce") String nonce,
        @RequestBody(required = false) JSONObject json
    ) {
        String params = " signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " json:" + json;
        try {
            bizLogger.info("begin callback:" + params);
            DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(Constant.TOKEN, Constant.ENCODING_AES_KEY, Constant.SUITE_KEY);

            // 从post请求的body中获取回调信息的加密数据进行解密处理
            String encrypt = json.getString("encrypt");
            String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp.toString(), nonce, encrypt);
            JSONObject callBackContent = JSON.parseObject(plainText);

            // 根据回调事件类型做不同的业务处理
            String eventType = callBackContent.getString("EventType");
            if (EVENT_CHECK_CREATE_SUITE_URL.equals(eventType)) {
                bizLogger.info("验证新创建的回调URL有效性: " + plainText);
            } else if (EVENT_CHECK_UPADTE_SUITE_URL.equals(eventType)) {
                bizLogger.info("验证更新回调URL有效性: " + plainText);
            } else if (EVENT_SUITE_TICKET.equals(eventType)) {
                // suite_ticket用于用签名形式生成accessToken(访问钉钉服务端的凭证),需要保存到应用的db。
                // 钉钉会定期向本callback url推送suite_ticket新值用以提升安全性。
                // 应用在获取到新的时值时,保存db成功后,返回给钉钉success加密串(如本demo的return)
                bizLogger.info("应用suite_ticket数据推送: " + plainText);
            } else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {
                // 本事件应用应该异步进行授权开通企业的初始化,目的是尽最大努力快速返回给钉钉服务端。用以提升企业管理员开通应用体验
                // 即使本接口没有收到数据或者收到事件后处理初始化失败都可以后续在用户试用应用时从前端获取到corpId并拉取授权企业信息,进而初始化开通及企业。
                bizLogger.info("企业授权开通应用事件: " + plainText);
            } else {
                // 其他类型事件处理
            }

            // 返回success的加密信息表示回调处理成功
            return dingTalkEncryptor.getEncryptedMap("success", timestamp, nonce);
        } catch (Exception e) {
            //失败的情况,应用的开发者应该通过告警感知,并干预修复
            mainLogger.error("process callback fail." + params, e);
            return "fail";
        }
    }
开发文档链接:验证和更新回调URL事件 - 钉钉开放平台  https://developers.dingtalk.com/document/app/validating-and-updating-callback-url-events-1
麻烦老师能给出这个钉钉接口验证的示例代码,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 16:00:00 [显示全部帖子]

谢谢!  dim dingTalkEncryptor as new DingTalkEncryptor("TOKEN", "ENCODING_AES_KEY", "SUITE_KEY") 中的 dingTalkEncryptor 就是解密函数吧?

与foxtable 帮助文档中的 strTmp = Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strTmp, "SHA1")   
中的  Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile 作用一样,都是用来加密解密用的吗?
[此贴子已经被作者于2021/7/20 16:04:09编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 16:48:00 [显示全部帖子]

但是提示错误:没有“dingTalkEncryptor没有定义类型

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 17:02:00 [显示全部帖子]

是topsdk.ll 吧?已经拷贝进去了的 也引用了,还命名了空间
[此贴子已经被作者于2021/7/20 17:04:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 18:11:00 [显示全部帖子]

经过反复尝试,都没有成功,显示的错误都是未定义类。在之前的模块中,只要补全命名空间:在头添加DingTalk.Api. 或添加:DingTalk.Api.Request. 就能解决。现在不行,不知问题在哪。已经重新引用和命名空间了(在引用和空间命名里都有东西了应该是引用成功了吧)。就是搞不定

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 21:01:00 [显示全部帖子]

已经下载,在SDK源码中,都查不到包含字符“dingTalkEncryptor” 的.cs   都不知在哪找了


 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 21:39:00 [显示全部帖子]

已经下载了,我在SDK源码中查找字符:“dingTalkEncryptor” 都没有查到,不知在那查了

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/20 21:58:00 [显示全部帖子]

已经下载了,我查找了SDK源码,都差不多含字符“dingTalkEncryptor” 的.CS 都不知在哪里找了

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/21 0:38:00 [显示全部帖子]

下载看了。在SDK源码中查找 “ DingTalkEncryptor” 字符串,根本查不到。不知在哪了

 回到顶部
帅哥哟,离线,有人找我吗?
gudao123456
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/8/10 11:31:00 [显示全部帖子]

钉钉的开发文档中说,回调事件中,钉钉用POST方式发送验证信息,这个post方式发送,在服务端也是用 e.GetValues(XX)还是用 e.PostValues(XX)获取发过来的信息?

在回调测试中。计算签名失败,估计就是参数encrypt 参数有问题。Dim encrypt As String = e.GetValues("encrypt") 我用复制钉钉Url中的signature、timestamp、nonce 在本地测试,output.show(encrypt) 结果就是:encrypt  没有返回字符串。估计是这里有问题。我该怎么办?谢谢
[此贴子已经被作者于2021/8/10 12:03:37编辑过]

 回到顶部
总数 12 1 2 下一页