项目场景:
钉钉互动卡片,通过回调按钮触发业务接口逻辑
问题描述
正式环境下,钉钉互动卡片回调按钮点击无任何响应
原因分析:
查看正式环境日志:
正式环境系统日志未发现回调请求相关日志输出
业务接口连通性:
通过postman测试业务接口连通性无异常
钉钉小程序按钮点击抓包:
通过Fiddler抓取小程序按钮点击的接口信息,未抓取到接口请求
再看相关钉钉互动卡片注册代码:
RegisterCallbackHeaders registerCallbackHeaders = new RegisterCallbackHeaders();
registerCallbackHeaders.xAcsDingtalkAccessToken = accessToken;
RegisterCallbackRequest callbackRequest = new RegisterCallbackRequest();
try {
callbackRequest.setCallbackRouteKey(callbackRouteKey);
callbackRequest.setCallbackUrl(callbackUrl);
callbackRequest.setApiSecret(DingTalkConfigKit.getDingTalkConfig().getToken());
callbackRequest.setForceUpdate(true);
log.info("注册卡片回调地址请求{}", TeaModel.toMap(callbackRequest));
RegisterCallbackResponse registerCallbackResponse = client.registerCallbackWithOptions(callbackRequest, registerCallbackHeaders, new RuntimeOptions());
log.info("注册卡片回调地址结果{}", TeaModel.toMap(registerCallbackResponse));
} catch (Exception e) {
log.error("注册卡片回调地址失败,原因", e);
}
发现问题,callbackRequest.setCallbackRouteKey(callbackRouteKey)方法传入的callbackRouteKey再不同的环境下Key值一致,导致正式环境和测试环境交替注册回调地址的时候发生覆盖,正式环境的回调请求到了测试环境上
查看测试环境系统日志:
测试环境系统日志确实存在回调请求相关日志输出,问题确认
解决方案:
修改正式环境和测试环境的callbackRouteKey为不同的值,重新启动两套环境,进行交替注册回调地址,均能正常触发回调按钮,至此问题已解决