介绍

钉钉小程序接口对接,主要涉及以下几个方面:

  1. 模块Config
  2. 小程序登录
  3. CabloyJS后端调用
  4. 钉钉API调用

1. 模块Config

CabloyJS提供了两种方式来配置Config参数:

  1. 后台管理页面:页面路径为系统应用/基础管理/认证管理

  2. 项目配置:直接在项目配置文件中覆盖模块Config中的参数

关于如何覆盖模块Config,请参见:Config

a-dingtalk/backend/src/config/config.js

  1. 1 // account.dingtalkmini
  2. 2 config.account.dingtalkmini = {
  3. 3 scenes: {
  4. 4 default: {
  5. 5 title: 'AuthDefault',
  6. 6 agentId: '',
  7. 7 appKey: '',
  8. 8 appSecret: '',
  9. 9 },
  10. 10 },
  11. 11 };
  • scenes: 支持多个钉钉小程序。为了实际开发上的便利,我们默认提供一个default小程序。如果需要开发其他钉钉小程序,直接在scenes添加新的配置即可

2. 小程序登录

测试模块test-dingtalk已经包含了一个钉钉小程序的demo程序

如何导入demo程序,请参见:快速开始 - 钉钉小程序

这里对demo中涉及到的登录机制进行说明:

当小程序启动时,Cabloy SDK会通过dd.getAuthCode,并调用CabloyJS后端接口,对用户进行认证,从而完成用户登录,并返回用户数据

src/suite-vendor/test-party/modules/test-dingtalk/front/demo/miniprogram/app.js

  1. 1// 初始化cabloy
  2. 2const cabloyOptions = {
  3. 3 base: {
  4. 4 providerScene: 'default',
  5. 5 locale: 'en-us',
  6. 6 },
  7. 7 api: {
  8. 8 baseURL: 'http://yourdomain.com',
  9. 9 },
  10. 10};
  11. 11this.cabloy = Cabloy(this, cabloyOptions);
  12. 12// 登录
  13. 13this.cabloy.util.login().then(res => {
  14. 14 // 由于 login 是网络请求,可能会在 Page.onLoad 之后才返回
  15. 15 // 所以此处加入 callback 以防止这种情况
  16. 16 if (this.cabloyLoginReadyCallback) {
  17. 17 this.cabloyLoginReadyCallback(res);
  18. 18 }
  19. 19}).catch(err => {
  20. 20 console.log(err);
  21. 21});
  1. 首先要初始化一个cabloy实例
  2. 其次调用cabloy.util.login进行登录

3. CabloyJS后端调用

Cabloy SDK提供了便捷的API组件app.cabloy.api,用于小程序前端访问CabloyJS的后端API接口

src/suite-vendor/test-party/modules/test-dingtalk/front/demo/miniprogram/pages/index/index.js

  1. 1getMemberId() {
  2. 2 app.cabloy.api.post('/test/dingtalk/test/getMemberId').then(data => {
  3. 3 this.setData({
  4. 4 memberId: data.memberId,
  5. 5 });
  6. 6 });
  7. 7},

4. 钉钉API调用

模块a-dingtalk提供了全局Bean组件dingtalk,用于调用所有钉钉服务API

ctx.bean.dingtalk.mini.{providerScene}

名称 说明
providerScene 小程序场景名,默认为default

钉钉API基于ali-sdk/node-dingtalk。为了便于更灵活的添加新API,CabloyJS对主仓库发起了一个新分支,详细的API清单请参见:node-dingtalk

5. 如何判断是否在钉钉小程序

由于CabloyJS后端架构的普适性,我们有时候需要判断当前是否在钉钉小程序中,从而做出相应的处理

5.1 通过中间件判断

可以通过中间件inDingtalk来判断该api接口是否被钉钉调用,如果不是则自动阻止后续逻辑的执行

src/suite-vendor/test-party/modules/test-dingtalk/backend/src/routes.js

  1. 1 { method: 'post', path: 'test/getMemberId', controller: test, middlewares: 'inDingtalk',
  2. 2 meta: {
  3. 3 inDingtalk: {
  4. 4 providerName: 'dingtalkmini',
  5. 5 providerScene: null,
  6. 6 },
  7. 7 },
  8. 8 },
名称 说明
meta.inDingtalk 中间件inDingtalk的参数
providerName 认证提供者名称,如果指定dingtalkmini,表示该api只能被钉钉小程序调用

5.2 通过代码判断

可以直接通过代码进行判断

  1. 1ctx.bean.dingtalk.util.in({ providerName, providerScene })