準備工作
在開始本教程前,確定你已經完成了以下準備工作:
- 你已經完成了釘釘開發者的注冊與激活并擁有了子管理者和開發者權限。若尚未完成,請參考 成為釘釘開發者 。
- 已經安裝了Java開發環境。若未安裝,請通路 Oracle官網 下載下傳。
- 已下載下傳并安裝了IntelliJ IDEA工具。若未安裝,請通路 IntelliJ IDEA
建立Java工程并安裝釘釘Java SDK
在本部分,你将建立一個Java工程并完成釘釘Java SDK的安裝。
- 打開IntelliJ IDEA工具。
- 單擊選擇Projects,然後單擊New Project。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 參考下圖,選擇Maven項目和JDK版本,然後單擊Next。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 輸入項目名稱,然後單擊Finish。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 單擊 這裡 下載下傳釘釘服務端Java SDK。
- 解壓dingtalk-sdk-java.zip。
- 在IntelliJ IDEA工具的頂部菜單欄中,選擇File > Project Structure。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 選擇Project Settings > Libraries ,然後依次單擊 “+”> Java。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 選中下載下傳的SDK,然後依次單擊OK > Apply完成導入。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料”
建立應用
在本部分,你将在開發者背景建立一個H5微應用,并完成基礎配置。
- 登入 釘釘開發者背景
說明
隻有管理者和子管理者可登入開發者背景。
- 在開發者背景頁面,單擊應用開發,然後選擇企業内部開發 > 小程式,最後單擊建立應用。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 在彈出的建立應用頁面中填寫基本資訊,然後單擊确定建立。
-
- 應用類型:選擇H5微應用。
- 開發方式:選擇企業自助開發。
- 應用建立完成後,在憑證與基礎資訊頁面,複制應用的AppKey和AppSecret備用。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 單擊開發管理進入開發管理頁面,然後單擊修改,并根據以下内容配置開發資訊。
-
- 開發模式:選擇開發應用。
- 伺服器出口IP:輸入調用釘釘服務端API時使用的IP即企業伺服器的公網IP,多個IP請以英文逗号","隔開,支援帶一個*号通配符的IP格式。可通過 工具
進行檢視。
本教程設定為
127.0.0.1
- 應用首頁位址:輸入應用首頁URL,在移動端工作台點選應用圖示會跳轉到此頁面。可輸入後端服務部署的伺服器的IP或域名。例如:
http://公網IP:8080
https://ding-doc.dingtalk.com/
- 單擊權限管理進入權限管理頁面,然後根據以下配置添加接口調用權限。
-
- 權限範圍選擇全部員工,然後單擊添加接口權限。
- 選擇考勤權限,單擊确認。
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料”
擷取調用憑證
在本部分,你将通過建立的應用的AppKey和AppSecret擷取調用釘釘服務端API的調用憑證access_token。
- 如下圖所示,在項目的
目錄下建立一個AccessTokenUtil測試類。src/test/java/
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” -
在AccessTokenUtil類中添加以下代碼,并運作。
調用
gettoken 接口擷取服務端API授權憑證access_token。
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.taobao.api.ApiException;
public class AccessTokenUtil {
public static String AppKey = "替換為你應用的AppKey";
public static String AppSecret = "替換為你應用的AppSecret";
public static String getToken() throws RuntimeException {
try {
DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(AppKey);
request.setAppsecret(AppSecret);
request.setHttpMethod("GET");
OapiGettokenResponse response = client.execute(request);
String accessToken = response.getAccessToken();
return accessToken;
} catch (ApiException e) {
throw new RuntimeException();
}
}
public static void main(String[] args)throws ApiException{
String accessToken = AccessTokenUtil.getToken();
System.out.println(accessToken);
}
}
- 調用成功的傳回結果類似如下。
efcfb3d7f6aa3abxxx
擷取考勤打卡記錄
在本部分,你将通過服務端API的調用憑證access_token從釘釘背景擷取考勤打卡記錄。
-
目錄下建立一個AttendanceDemo測試類。src/test/java/
《釘釘應用開發者速成手冊》之“API實戰——同步打卡資料” - 在AttendanceDemo類中添加以下代碼,并運作。 /attendance/list 接口,擷取企業内員工的實際打卡結果。
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiAttendanceListRequest;
import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.taobao.api.ApiException;
import java.util.Arrays;
public class AttendanceDemo {
/**
* 擷取考勤打卡記錄
*
* @param args
*/
public static void main(String args[]) {
// 擷取服務端接口調用憑證access_token
String access_token = AccessTokenUtil.getToken();
try {
// 通過調用接口擷取考勤打卡結果
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/attendance/list");
OapiAttendanceListRequest request = new OapiAttendanceListRequest();
// 查詢考勤打卡記錄的起始工作日
request.setWorkDateFrom("2021-01-12 00:00:00");
// 查詢考勤打卡記錄的結束工作日
request.setWorkDateTo("2021-01-19 00:00:00");
// 員工在企業内的userid清單,最多不能超過50個。
request.setUserIdList(Arrays.asList("user123"));
// 表示擷取考勤資料的起始點
request.setOffset(0L);
// 表示擷取考勤資料的條數,最大不能超過50條。
request.setLimit(1L);
OapiAttendanceListResponse response = client.execute(request, access_token);
System.out.println(response.getBody());
} catch (ApiException e) {
e.printStackTrace();
}
}
}
{
"errcode": 0,
"recordresult": [
{
"checkType": "OnDuty",
"corpId": "dinge8a56572f80xxxx",
"locationResult": "Normal",
"baseCheckTime": 1610380800000,
"groupId": -1,
"timeResult": "Normal",
"userId": "user123",
"recordId": 54735159894,
"workDate": 1610380800000,
"sourceType": "ATM",
"userCheckTime": 1610380800000,
"planId": 180485053237,
"id": 129082
}
],
"_record": "77964B20FC00",
"hasMore": false,
"errmsg": "ok"
}
- 此時,你就可以将打卡結果同步到自有的OA系統中了。
恭喜
你已完成本教程的全部内容!
現在你已經擁有一個可以正常運作的釘釘應用。你也可以在其中添加其他功能,參考
應用開發了解更多。