获取钉钉中日程接口未打通

对接钉钉日程apihttps://open.dingtalk.com/document/orgapp/query-an-event-list
代码


// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用 Token 初始化账号Client
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.dingtalkcalendar_1_0.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkcalendar_1_0.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List args = java.util.Arrays.asList(args_);
        com.aliyun.dingtalkcalendar_1_0.Client client = Sample.createClient();
        com.aliyun.dingtalkcalendar_1_0.models.ListEventsHeaders listEventsHeaders = new com.aliyun.dingtalkcalendar_1_0.models.ListEventsHeaders();
        listEventsHeaders.xAcsDingtalkAccessToken = "a54f5f1422c034809a1c74d9785634d0";
        com.aliyun.dingtalkcalendar_1_0.models.ListEventsRequest listEventsRequest = new com.aliyun.dingtalkcalendar_1_0.models.ListEventsRequest()
                .setTimeMin("2022-11-27T00:00:00+08:00")
                .setTimeMax("2022-11-28T00:00:00+08:00")
                .setShowDeleted(false)
                .setMaxResults(15)
                .setMaxAttendees(10)
                .setNextToken("cnNTbW1xxxxEgvdlQrQT09")
                .setSyncToken("cnNTbW1YbxxxxdEgvdlQrQT09");
        try {
     ListEventsResponse response = client.listEventsWithOptions("MiiYBeZpaHcMnOBXdzPkvLwiEiE", "primary", listEventsRequest, listEventsHeaders, new RuntimeOptions());
                System.out.println(response.body);
        } catch (TeaException err) {
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
            }

        } catch (Exception _err) {
            TeaException err = new TeaException(_err.getMessage(), _err);
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
            }

        }        
    }
}

断点调试

img

显示body没有数据但是直接执行sout(body)可以输出地址值
钉钉中有日程

img

该回答引用ChatGPT
根据代码和调试信息可以看出,程序运行时没有抛出异常,但是输出的`response.body`为空,而不是我们所期望的钉钉日程信息。

大部分情况下出现这种问题是因为请求参数传递不正确,可以按照以下步骤进行排查:

1. 确认AccessToken是否正确,可以在钉钉开发者后台查看应用的AccessToken是否失效或者申请的权限不足;
2. 确认TimeMin和TimeMax参数是否正确,这2个参数表示需要获取事件的时间区间,需要按照请求参数的格式传递,同时注意时区必须与企业账号时区一致;
3. 确认请求方式是否正确,可以尝试使用curl等工具发送请求测试;
4. 确认代码本身是否存在问题,可以找到其他项目的日程调用代码作为参考。

另外,可以在代码中添加更多的调试信息,如请求参数的具体内容,响应的状态码等,以便排查问题。

该回答引用于ChatGPT:
根据您提供的代码和信息,我看到您使用了阿里云的SDK来调用钉钉日程API。根据截图显示,响应体的body字段为空,这可能是由于返回的HTTP响应中没有实际数据或者解析响应时发生了错误。

建议您按照以下步骤检查和排除问题:

  1. 确认接口调用参数是否正确,例如时间范围是否包含具有日程的日期,访问令牌是否正确等。

  2. 检查API文档中所述的HTTP响应,确保响应体中应该包含数据的字段名称与您的代码中的字段一致。

  3. 使用调试工具(例如Postman)手动发送HTTP请求并检查响应。如果响应正常,则可能是代码实现问题;否则,可能是接口本身存在问题。

另外,您提到直接执行sout(body)可以输出地址值,这可能是因为响应体类型不是字符串,而是字节数组或其他类型。建议您使用合适的方式将响应内容转换成字符串形式进行输出。

大致分析思路如下:
1.  get请求不带body,而post请求带body和content_length;
      按理说后端是已经接收到了前端的数据,所以这一段不会出现丢失的情况。
2.  然后后端改为支持getpost,前端改为get请求进行线上环境测试;
      结果前端可以成功拿到后端响应的响应体。
3.  首先明确controller返回是有数据的一点,可能的情况有:
    ①  后端服务器响应给前端服务器时,http解析(content_length)出现的body丢失。
    ②  前端服务器发送数据给app端时,http解析(content_length)出现的body丢失。
            然后根据我方app在运行该项目时一切正常,而第三方app出现上述问题的情况下;
            可以论断解析问题出现的环节在第②点上;而get可以post不行的情况可以尝试--
            通过修改响应报文头的(content_length)置为nil来解决nginx可能带来的影响。

你要搞清楚 setTimeMax 和 setTimeMin这俩参数的含义。

img

你代码里填的这个范围内没有日程。
另外sout输出有地址值,说明这个对象不是空,但是不代表这个对象内的属性也不是空。

引用chatGPT作答,输出地址值是因为您直接打印了响应对象的引用地址。如果您想要输出响应体内容,请调用响应对象的 getBody() 方法。例如:

ListEventsResponse response = client.listEventsWithOptions("MiiYBeZpaHcMnOBXdzPkvLwiEiE", "primary", listEventsRequest, listEventsHeaders, new RuntimeOptions());
System.out.println(response.getBody());

以下内容部分参考ChatGPT模型:
首先,根据提问者的代码,可以看出是使用阿里云的Java SDK来调用钉钉的日程接口。但是,根据调试结果,返回的API响应中的body部分没有数据。这可能是由于API调用参数设置不正确导致的。因此,提问者应该仔细检查API调用参数设置是否正确,包括时间范围、是否展示已删除日程、最大结果数、最大参与人数等参数是否正确。

其次,提问者可以尝试使用Postman等工具来测试API接口,以确定API接口是否可用,并查看API响应是否正确。如果API接口返回的响应是正确的,即带有数据的body部分,那么问题可能在于Java SDK的使用方式。此时,提问者可以参考阿里云Java SDK的官方文档,检查自己的代码是否正确。

最后,提问者可以查看钉钉API的官方文档,了解更多关于API调用参数的说明和使用示例。同时,也可以在钉钉开放平台的开发者社区中提问和交流,获取更多有关钉钉API的使用和调试经验。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你提供的代码,你是在Java中使用阿里云的SDK调用钉钉日历API。代码中使用了com.aliyun.dingtalkcalendar_1_0这个包,根据文档,这应该是阿里云钉钉开放平台的日历API的SDK。因此,需要你先确保你已经在钉钉开放平台上创建了应用,并通过审核了。

如果你已经在钉钉开放平台上创建了应用并通过审核,那么在执行API调用之前,需要先获取钉钉开放平台提供的access_token,并将其添加到API请求中。

在钉钉开放平台的文档中,也提供了对应的Java代码样例,可以参考一下:https://ding-doc.dingtalk.com/doc#/serverapi2/irte8a

钉钉开放平台的日历API部分文档也可以参考:https://ding-doc.dingtalk.com/doc#