需求背景
将一个 A 系统接入钉钉平台,供该企业内部员工使用,实现移动化办公。主要需求:
- 可以使用钉钉扫描二维码的方式登录 A 系统。
- 可以在 A 系统中共享钉钉的组织架构。
技术调研思路
第一阶段:在钉钉官网查看开发者文档
接入场景主要有四种:
第二阶段:选择可行方案
根据需求,我们的使用场景为:仅供某个企业内的成员使用,其他企业无法使用该应用,所以优先选择企业内部开发方案。
企业内部开发
基于钉钉的开放能力自主开发,供企业或组织内部使用,以满足办公场景中的个性化需求。该类应用无需钉钉团队审核。
应用类型
可以开发 E 应用、微应用两种类型的应用。
E 应用是一种全新的开发模式,让移动开发者通过简捷的前端语法写出 Native 级别的性能体验,并支持 iOS、安卓等多端部署。E 应用暂不支持 PC 端部署,如果您的应用必须要在 PC 端上使用,可暂时使用微应用开发方式。微应用是指用 H5 方式开发的应用。
E 应用和微应用的对比:
| 对比项 | E 应用 | H5 微应用 |
|---|---|---|
| 加载性能 | 首次使用略慢,后续加载快 | 受很多因素影响,优化不够好,容易慢 |
| 使用体验 | 非常顺滑,接近 Native | 容易卡顿 |
| 开发环境搭建 | 提供 IDE,快速创建项目 | 成本高 |
| 调试 | 提供 IDE,可以在电脑上调试大部分功能 | 在电脑上只能调 UI,涉及钉钉的 jsapi 必须真机调试 |
| 使用开源 UI 组件 | 目前不支持 | 支持 |
| 使用 npm 包 | 支持 | 支持 |
| 模块化组织代码 | 支持 E 应用特有的模块化 | 使用 vue、React 等框架可以轻松获得模块化支持 |
| 灰度发布 | 钉钉提供 | 需要自己实现 |
| CDN | E 应用包默认在 CDN | 需要开发者自己购买相关服务 |
| 开发个人应用 | 支持 | 不支持 |
| 应用离线化 | 支持 | 不支持 |
由于 E 应用主要针对手机平台(iOS 和 Android),而且暂不支持在 PC 端使用。E 应用比较坑人的地方是必须购买阿里云的服务器,而且基础版的价格是 2 万每年。(果断放弃!)
比较并验证可行性之后,最终选择实现方案:钉钉微应用接入(企业内部开发)。
实现步骤
创建应用
- 企业管理员登录钉钉管理后台,选择导航【工作台】,点击【自建应用】,开始创建自建应用。
- 填写基础信息:包括应用名称、logo 和简介等。选择企业内部自主开发。
- 开发模式选择“开发应用”,应用类型选择“微应用”。
- 创建成功过后,会生成
appKey和appSecret,可获取access_token进行开发。
开发应用
钉钉开放平台提供丰富的 API 接口,以便开发者接入:
- 服务端能力:企业通讯录管理、文件管理、发送企业会话消息等,接口使用参考服务端开发文档。
- 客户端能力:钉钉为微应用在钉钉客户端中运行的专用容器提供了一组 JSAPI,用于调用钉钉的本地能力和业务能力,接口使用参考客户端开发文档。
扫码登录第三方网站
使用钉钉客户端扫码并确认登录您的 Web 系统,在您的系统内获得正在访问用户的钉钉身份,而用户无需输入账户密码。
注:此功能与企业自建应用 / 第三方企业应用无关,只能用扫码登录打开第三方网站,并且不是钉钉内的应用免登。此流程只能做到获取用户身份(无手机号和企业相关信息)。
获取 appId 及 appSecret
点击进入钉钉开发者平台的页面,点击左侧菜单的【移动接入应用】,然后点击右上角的【创建扫码登录应用授权】,创建用于免登过程中验证身份的 appId 及 appSecret,创建后即可看到。
构造扫码登录页面
第一种方式:直接使用钉钉提供的扫码登录页面
在企业 Web 系统里,用户点击使用钉钉扫描登录,第三方 Web 系统跳转到如下地址:
https://oapi.dingtalk.com/connect/qrconnect?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI
URL 里的参数需要换成第三方 Web 系统对应的参数。在钉钉用户扫码登录并确认后,会 302 到你指定的 redirect_uri,并向 URL 参数中追加临时授权码 code 及 state 两个参数。
第二种方式:将钉钉登录二维码内嵌到自己页面中
用户使用钉钉扫码登录后,JS 会将 loginTmpCode 返回给网站。这种方式的主要用途是:让用户在网站内就能完成登录,无需跳转到钉钉域下登录后再返回,提升登录的流畅性与成功率。详见扫码登录第三方网站文档。
同步组织架构
调用钉钉提供的相关接口: