项目场景:
问题:使用钉钉http调用事件回调注册,遇坑
本项目有两套服务。
当 600 服务,在使用钉钉注册回调的接口后,再次注册800回调服务,800 回调会覆盖掉600服务
测试服务 | 600 |
---|---|
正式服务 | 800 |
接口:
https://oapi.dingtalk.com/call_back/register_call_back
问题描述
问题描述:在使用钉钉注册回调的接口时,只能注册一个
APP 中注册回调代码:
/**
* 设置钉钉回调地址
*/
public static void registerCallBack() {
// 先删除企业已有的回调
DingTalkClient client = new DefaultDingTalkClient(URLConstant.DELETE_CALLBACK);
OapiCallBackDeleteCallBackRequest request = new OapiCallBackDeleteCallBackRequest();
request.setHttpMethod("GET");
try {
client.execute(request, AccessToken);
} catch (Exception e) {
log.warn(e.toString());
}
// 重新为企业注册回调
client = new DefaultDingTalkClient(URLConstant.REGISTER_CALLBACK);
OapiCallBackRegisterCallBackRequest registerRequest = new OapiCallBackRegisterCallBackRequest();
registerRequest.setUrl(DingConstant.CALLBACK_URL_HOST + "/fs/callback");
registerRequest.setAesKey(DingConstant.ENCODING_AES_KEY);
registerRequest.setToken(DingConstant.TOKEN);
//注册的事件类型,详情请参考事件列表。https://ding-doc.dingtalk.com/document/app/event-list#topic-2025399
registerRequest.setCallBackTag(CallBackType.getList());
try {
OapiCallBackRegisterCallBackResponse registerResponse = client.execute(registerRequest, AccessToken);
if (registerResponse.isSuccess()) {
log.info("钉钉回调注册成功");
} else {
log.error("钉钉审批回调注册失败:{}", registerResponse.getErrmsg());
}
} catch (Exception e) {
log.error("钉钉审批回调注册异常,报错信息:{}", e.toString());
}
}
原因分析:
寻找官方解答:一个企业只能注册一个企业事件回调
当使用HTTP回调注册接口方式接收钉钉推送的订阅事件时,是以企业为维度推送的,OWNER_KEY为CorpId
解决方案:
当然官方也给出了解决方案,那就是使用应用级的事件回调
- 登录开发者后台,找到已创建的企业内部应用。
- 单击事件与回调,然后单击编辑,配置用于接收请求的HTTP地址。重要 确保该地址公网可以访问。编辑完请求地址,单击保存按钮时,开放平台会向你配置的网址推送一个 application/json 格式的 POST 请求, 用于验证你配置的网址的合法性
- 成功配置请求地址后,在事件订阅列表区域,开启要订阅的事件
当使用本文档中的方式接收钉钉推送的订阅事件时,是以应用为维度推送的,OWNER_KEY为应用的AppKey,可在开发者后台的应用详情页面中获取