钉钉第三方企业应用开发快速入门
快速启动入门
1. 创建小程序
1.1. 登录开发者后台
登录钉钉开发者后台,选择应用开发-第三方企业应用-小程序,点击创建应用。
1.2. 填写基础信息
填写应用基本信息,包括应用名称、应用Logo、应用类型和应用简介。
1.3. 查看应用信息
创建成功后,可以在应用列表查看创建的应用。点击应用还可以查看应用的详细信息,如下图所示:
2. 设置安全域名
小程序需要事先设置一个或多个服务端安全域名(或IP),小程序前端只能通过这些安全域名(或IP)与服务端进行网络通信。当安全域名更新时,需要在IDE重新打包上传版本,设置的域名才会生效。
本质上,小程序前端与后端的网络通信是同普通的H5前后端一样的。因此在您做快速体验时,可以填写小程序前端所在环境能访问的任何域名/IP地址,比如可以是您自己的办公电脑本机地址或者局域网内地址。
就是将你服务器的域名或地址添加进去
3. 设置接口权限
钉钉开放了丰富的服务端接口能力,开发者可以使用这些接口能力,实现企业系统与钉钉的集成打通。在调用接口前,需要先申请并设置接口调用权限,包括通讯录权限、外部联系人权限、审批权限及内购开发权限等。如下图所示。
4. 开发管理(创建回调)
设置回调URL用于激活接口,没有公网域名可以使用内网穿透的方式对外暴露,以便钉钉回调
5. 下载源码
使用命令git clone下载代码,也可以直接用HTTP形式从代码仓库下载。
服务端代码
git clone https://github.com/opendingtalk/eapp-isv-quick-start-java.git
前端代码
git clone https://github.com/opendingtalk/eapp-isv-quick-start-fe.git
6. 设置与修改源码
6.1. 服务器端
6.1.1. 配置代码
修改com.config.Constant.java类中的配置
/**
* 项目中的常量定义类
*/
public class Constant {
/**
* 应用的SuiteKey,登录开发者后台,点击应用管理,进入应用详情可见
*/
public static final String SUITE_KEY="凭证与基础信息页面中SuiteKey的值";
/**
* 应用的SuiteSecret,登录开发者后台,点击应用管理,进入应用详情可见
*/
public static final String SUITE_SECRET="凭证与基础信息页面中SuiteSecret的值";
/**
* 回调URL签名用。应用的签名Token, 登录开发者后台,点击应用管理,进入应用详情可见
*/
public static final String TOKEN = "自定义要与开发管理中的 `Token` 保持一致";
/**
* 回调URL加解密用。应用的"数据加密密钥",登录开发者后台,点击应用管理,进入应用详情可见
*/
public static final String ENCODING_AES_KEY = "自定义要与开发管理中 `数据加密密钥` 保持一致";
/**
* 用于暂时保存钉钉发来的TICKET值
*/
public static String TICKET;
}
6.1.2. 业务代码
修改com.controller.CallbackController.java
类中的dingCallback
方法
//在 else if (EVENT_SUITE_TICKET.equals(eventType)) {}中添加如下代码
//用于更新Ticket
Constant.TICKET = String.valueOf(callBackContent.get("SuiteTicket"));
//在else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {}中添加如下代码,也可以抽取成方法调用
//用于激活应用,当你在版本管理与发布中 点击开通应用时被调用
try {
//根据回调数据类型做不同的业务处理
String authCode = callBackContent.getString("AuthCode");
String authCorpId = callBackContent.getString("AuthCorpId");
//bizLogger.info("收到审批任务进度更新: " + plainText);
//获取第三方企业凭证suite_access_token
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_suite_token");
OapiServiceGetSuiteTokenRequest request = new OapiServiceGetSuiteTokenRequest();
request.setSuiteKey(Constant.SUITE_KEY);
request.setSuiteSecret(Constant.SUITE_SECRET);
request.setSuiteTicket("suiteTicket");
OapiServiceGetSuiteTokenResponse response = client.execute(request);
JSONObject jsonObject = JSONObject.parseObject(response.getBody());
String suite_access_token = jsonObject.getString("suite_access_token");
System.out.println("得到的suite_access_token===" + suite_access_token);
//获取永久授权码
DingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_permanent_code?suite_access_token=" + suite_access_token);
OapiServiceGetPermanentCodeRequest req = new OapiServiceGetPermanentCodeRequest();
req.setTmpAuthCode(authCode);
OapiServiceGetPermanentCodeResponse rsp = client1.execute(req);
System.out.println(rsp.getBody());
JSONObject jsonObject1 = JSONObject.parseObject(rsp.getBody());
String permanent_code = jsonObject1.getString("permanent_code");
System.out.println("得到的永久授权码===" + permanent_code);
//String permanent_code = jsonObject1.getString("permanent_code");
//激活应用
DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/activate_suite?suite_access_token=" + suite_access_token);
OapiServiceActivateSuiteRequest req3 = new OapiServiceActivateSuiteRequest();
req3.setSuiteKey(Constant.SUITE_KEY);
req3.setAuthCorpid(authCorpId);
req3.setPermanentCode(permanent_code);
OapiServiceActivateSuiteResponse rsp3 = client3.execute(req3);
System.out.println("激活应用结果===" + rsp.getBody());
//todo: 实现审批的业务逻辑,如发消息
} catch (ApiException e) {
e.printStackTrace();
}
修改com.controller.IndexController.java
类中的getSuiteTicket(String suiteKey)
方法
private String getSuiteTicket(String suiteKey) {
//返回钉钉推送来的Ticket值
return Constant.TICKET;
}
6.2. 前端
下载钉钉小程序开发者工具IDE,安装并打开
打开IDE后选择您下载的前端项目eapp-isv-quick-start-fe文件夹,选择开发的应用类型,
打开后在右上角点击登录,出现扫码登录界面,使用钉钉扫码登录IDE。
注意:如果开发者已经打开IDE,请关闭重新打开,初次打开才可以选择打开新工程。
选择项目类型即要开发的应用类型。
点击右上角登录按钮使用钉钉扫码登录。
6.2.1. 修改前端配置
修改文件eapp-isv-quick-start-fe/page/index/index.js。
IP端口为本机的IP和PORT,注意url中的IP或域名必须是开发者平台中设置的本应用的安全域名。
let domain = "https://sakura.xxxxxxxxxx";//设置为内网穿透的地址就行
7. 添加体验组织并开通应用
重要:面向企业的应用必须企业开通才能进行体验,您需要创建专门的体验组织并为此组织开通本应用。
请注意:此处添加的体验组织是创建全新的测试组织,并不能添加已有组织为体验组织-比如本应用所在的开发组织。
测试应用可以直接开通。而正式应用需要验证回调有效性并设置好回调URL才能开通。本demo建议创建的是测试应用,因此可以暂时忽略验证回调有效性,可直接开通本应用。
添加一个非当前应用持有者的团队,然后点击开通应用
此时要保证你的服务器端是开启的
8. 推送Ticket
此时要保证你的服务器端是开启的
9. 项目关联钉钉应用
然后启动前端项目(启动之前要确保开通应用
与推送Ticket
已经完成并且成功(就是第7、8步)),如果获取到用户信息userid则表示应用运行成功。
注意:关联的小程序,和体验组织(这里的体验组织是第七步创建并开通的而不是创建此项目的团队)