5分鐘快速接入釘釘實現釘釘考勤

福祿網路技術團隊發表於2020-07-14

一、前言

由於今年疫情影響,假期的無限延長讓大家都不得不進行線上辦公,說到線上辦公就毫無疑問,釘釘是這個疫情假期最大的贏家,APP的火熱程度以及下載量甚至壓過了微信,躍居App store免費排行榜第1名的位置。
最早我們知道釘釘,是因為辦公需求,我們主要在人員管理/考勤打卡/日常交流/移動審批等日常工作。但你怎麼也想不到,釘釘廣泛被大家所知,是因為小學生們的一星差評.....既然釘釘火了,所以就有了這篇文章的到來,讓大家快速的接入釘釘,來幫助企業內部線上交流、考勤打卡、移動審批等,這次我先快速簡述下對接釘釘組織架構和對接釘釘考勤

二、對接釘釘組織架構

廢話不多說,直接開擼!
思路分析:大家都知道對接外部應用肯定需要授權,拿到授權後就基本就可以為所欲為了,所以第一步就是拿授權(令牌token)
1.登陸釘釘官網:https://ding-doc.dingtalk.com/
2.進入開發者後臺,如圖點選後掃碼登陸(如何在釘釘上建立企業這裡就不說了,直接度娘~我這裡已經建立了自己名下的測試企業)
tapd_30172956_base64_1593415532_82
3.釘釘開發者後臺拿CorpId和SSOSecret(寫的時候發現企業獲取釘釘令牌的方式釘釘已經更新了,所以建議用新的授權方式 )。 我這裡就按新的推薦方式拿appKey和appSecret,
詳細獲取方法:https://ding-doc.dingtalk.com/doc#/serverapi2/eev437 。如下圖就已經拿到
tapd_30172956_base64_1593419187_30

4.使用appKey和appSecret獲取 access_token ,正常情況下access_token有效期為7200秒,有效期內重複獲取返回相同結果,並自動續期。
大家各自用自己的開發語言( php是世界上最好的語言 )進行呼叫,這裡我直接用postman演示:

請求方式:GET(HTTPS)
請求地址:https://oapi.dingtalk.com/gettoken?appkey=上面拿的;appsecret=上面拿的

tapd_30172956_base64_1593417022_6

第二步同步企業部門到釘釘組織架構

請求方式:POST(HTTPS)
請求地址 :https://oapi.dingtalk.com/department/create?access_token=ACCESS_TOKEN

請求包結構體

{
 "name": "helloworld",
 "parentid": "1",
 "order": null,
 "createDeptGroup": true,
 "deptHiding": false,
 "deptPerimits": null,
 "userPerimits": null,
 "outerDept": false,
 "outerPermitDepts": null,
 "outerPermitUsers": null,
 "soureIdentifier": null,
 "id": null
}

引數說明:

1

這裡我建立一個helloworld部門,呼叫如下:
tapd_30172956_base64_1593424896_74
建立完後,我們去釘釘的通訊錄看看,可以看到釘釘組織架構已經發生了變化,在測試企業下面新增的剛才的helloworld部門,看下圖:
tapd_30172956_base64_1593424935_81
上述,我們就有了釘釘部門新增的介面,那就簡單了,寫幾行程式碼將企業的部門組織架構讀取然後進行依次呼叫介面建立部門,就完成了部門同步釘釘的目的。

//部門更新介面 
https://oapi.dingtalk.com/department/update?access_token=ACCESS_TOKEN
//部門刪除介面
https://oapi.dingtalk.com/department/delete?access_token=ACCESS_TOKEN&id=ID

第三步同步企業員工到釘釘通訊錄中

請求方式:POST(HTTPS)
請求地址:https://oapi.dingtalk.com/user/create?access_token=ACCESS_TOKEN

請求包結構體:

{
 "userid": "fuleli",
 "name": "福樂裡",
 "orderInDepts" : "",
 "department": [371046100],
 "position": "狗產品",
 "mobile": "15172391968",
 "tel" : "xxxx-xxxxxxxx",
 "workPlace" :"",
 "remark" : "",
 "email": "test@xxx.com",
 "orgEmail": "test@xxx.com",
 "jobnumber": "xxx",
 "isHide": false,
 "isSenior": false,
 "extattr": {
 "愛好":"旅遊",
 "年齡":"24"
 }
}

引數說明(如果非必須的欄位未指定,則釘釘後臺不改變該欄位之前設定好的值)

2
3

直接用postman進行呼叫:
tapd_30172956_base64_1593426726_81

新增完後我們去釘釘組織架構檢視,發現已經新增了福樂裡的員工
tapd_30172956_base64_1593426599_89
同理,後面就簡單了,寫幾行程式碼將員工的資訊依次呼叫員工新增介面即可,下面為需要用到的介面

//獲取部門列表
https://oapi.dingtalk.com/department/list?access_token=ACCESS_TOKEN
//員工更新介面
https://oapi.dingtalk.com/user/update?access_token=ACCESS_TOKEN
//員工刪除介面
https://oapi.dingtalk.com/user/delete?access_token=ACCESS_TOKEN&userid=zhangsan

三、對接釘釘考勤

有了員工資料後,就能獲取所有員工的考勤資料,在獲取考勤資料前,先設定下釘釘後臺的打卡設定,這裡我就用預設設定,然後勾選了地點打卡和wifi打卡

tapd_30172956_base64_1593488108_2

然後我們使用手機在釘釘中進行打卡,可以看到29號那天打了2次卡:
tapd_30172956_base64_1593488352_83

我們直接開始用介面獲取:

請求方式:POST(HTTPS)
請求地址:https://oapi.dingtalk.com/attendance/list?access_token=ACCESS_TOKEN

請求包結構體:

{
 "workDateFrom": "2020-06-29 00:00:00",
 "workDateTo": "2020-07-03 00:00:00",
 "userIdList":["manager962"], 
 "offset":0, 
 "limit":50
}

引數說明:
4

直接使用postman請求

tapd_30172956_base64_1593489403_65

tapd_30172956_base64_1593489441_45

返回引數說明:

5
6

好了,自此為止,已經可以獲取到員工的打卡資料了,那我們就已經實現了接入釘釘實現考勤統計的核心工作了~

分享幾個採坑的問題!

1.不能頻繁呼叫釘釘開放平臺介面!不能頻繁呼叫!不能頻繁呼叫 。之前發生過一次,介面全部返回錯誤,查了半天原因,最後發現是因為頻繁呼叫釘釘介面導致觸發了限流,直接被禁止呼叫..

官方解釋如下:
F85D303D-FB7A-409a-B2B0-61D7773B2728

2.編輯員工資訊同步至釘釘中時,如果入引數據中手機號有修改,則直接同步修改失敗。 因為釘釘的主鍵是手機號,所以通過API去修改員工資訊時,如果手機號不一致就會 出現問題,所以如果需要通過釘釘介面去修改員工手機號時,正確順序是:刪除原手機號的員工-》新增新手機號的員工(一開始也是沒注意這塊,導致老是同步失敗)

tapd_30172956_base64_1594045182_13

結尾

最後說下:不要想著模擬定位打卡和用其他人手機代打卡,因為這樣是會被後臺監控到的,所以不要得嘗所失 !!!

tapd_30172956_base64_1593683124_96

下期預告:5分鐘快速接入釘釘工作流

相關文章