背景
由于业务需求,目前开发的系统中需要调用飞书的接口,打通飞书和该系统,实现统一管理员工的目的。这次主要开发的接口是获取飞书部门和员工列表的接口、通过企业自建应用发送飞书消息的接口、获取飞书打卡日报的接口。开发过程中还是挺烦躁的,飞书提供的SDK还不完善,部分接口是未封装的,需要map接收然后转化数据格式,开发文档中也没有提供SDK的说明,需要的接口都是自己在类里面找到的。
开发流程
pom文件引入依赖
com.larksuite.oapi
larksuite-oapi
1.0.5
上可知,飞书的SDK能够支持的服务只有4个上的项目结构中我们可以看到,提供的服务在service中,由于官方文档中没有提供那个功能需要调用的接口代码,所以需要我们自己去这写服务代码中找到需要的接口,下面我将用获取部门的接口为例,来说一下如何找到自己需要的接口。
获取部门列表接口开发
还有问题,newContactService时需要提供Config对象,继续找
// 企业自建应用的配置
// AppID、AppSecret: '开发者后台' -> '凭证与基础信息' -> 应用凭证(App ID、App Secret)
// VerificationToken、EncryptKey:'开发者后台' -> '事件订阅' -> 事件订阅(Verification Token、Encrypt Key)。
public static final AppSettings appSettings = Config.createInternalAppSettings('AppID', 'AppSecret', 'VerificationToken', 'EncryptKey');
// 当前访问的是飞书,使用默认存储,更多可选配置,请看:README.zh.md->高级使用->如何构建整体配置(Config)。
public static final Config config = new Config(Domain.FeiShu, appSettings, new DefaultStore());
在github上飞书提供的READMzmd里找到的,就直接用了,懒得去代码里找了把上面代码的AppID和AppSecret换成我们自建应用的就好了,另外两个参数我没有,直接设置未null;此时我们知道了如何请求这个接口,但是请求参数还没设置通过开发文档我们可以看到需要的请求参数,然后根据上面的方法设置就好了,所以最终代码是这样的:
response = contactService.getDepartments().list().setDepartmentIdType('department_id')
.setParentDepartmentId(id).setPageToken(pageToken).setFetchChild(true).execute();
这样,我们请求部门列表的接口就完成了。
打卡数据获取
做这个接口的时候我也有点懵,这没给我可调用的接口我咋弄啊。。。后来,我在GitHub上看到了他们的示例代码里,看到了索嘎,原生模式原生模式发送请求得到数据也很简单,但是!!!!后续的数据处理真的头大。
Map message = new HashMap<>();
message.put(EnumsFeishuCheckInDayData.user_ids.name(), userIds);
message.put(EnumsFeishuCheckInDayData.check_date_from.name(), startTime);
message.put(EnumsFeishuCheckInDayData.check_date_to.name(), endTime);
Request
上面就是请求接口的代码了,很简单,主要是使用Request
这里的令牌类型由于是企业自建应用,所以使用AccessTokenTypTenant,它有3个取值:AccessTokenTypApp/AccessTokenTypTenant/AccessTokenTypUser,从名字上来看就能理解什么意思。输入参数很容易理解,就是我们的请求参数,用map装就好输出参数这里需要注意,这个对象是接收返回值的,经过我的实验,输出参数不同,获得的返回值也不同,but我自己建的对象发过去没转过来,可能是我技术不过关,建的对象不对吧。。。所以我选择了用map接收返回值然后噩梦就来了,我需要把map转化为我自己服务端的对象,比较痛苦,就不展示了。
总结
Java端调用飞书的接口熟练了还是挺简单,但是我刚开始开发的时候,看开发文档一脸懵逼,网上也没有这方面的文章,全是自己摸索着来,还是比较痛苦的。
文章为作者独立观点,不代表股票交易接口观点