場景
需要做后台管理系統,接入釘釘API獲取人員、考勤、審批等相關數據。
實現
釘釘開放平台應用開發文檔
https://developers.dingtalk.com/document/app
首先需要聯系釘釘的管理員,登錄釘釘的后台,然后按照開發平台的文檔指示
首先創建應用
然后填寫應用的基本信息
讓管理員創建應用的目的就是為了獲取下面這兩個AppKey和AppSecret
使用管理員登錄釘釘管理平台並創建應用后,就是為了獲取上面的AppKey和AppSecret,然后拿着這兩個調用釘釘的接口,釘釘會返回token
調用其他的接口需要使用這個token。
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
然后在權限管理里面需要設置此應用有哪些權限
默認只有登錄權限和消息通知的權限,然后可以在添加接口權限中添加需要用到的權限
選擇完成之后點擊確認。
Java開發流程
釘釘官方提供了統一的SDK,使用SDK可以便捷地調用服務端API。
下載之后將服務端sdk引入到項目中
在釘釘開放平台-開發工具-服務端API調試工具-API Explorer中可以直接將上面的兩個AppKey和AppSecret復制過來然后選擇語言進行調用
比如在Java中調用獲取token的接口示例代碼為
public String getToken() throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); OapiGettokenRequest req = new OapiGettokenRequest(); req.setAppkey("釘釘后台應用的AppKey"); req.setAppsecret("釘釘后台應用的Appsecret"); req.setHttpMethod("GET"); OapiGettokenResponse rsp = client.execute(req); System.out.println(rsp.getBody()); return rsp.getAccessToken(); }
然后獲取token之后就可以使用這個token去訪問釘釘的其他接口
比如通訊錄管理下的部門管理中獲取部門列表的接口,在中間按照要求填入參數,則在右邊就會生成相關代碼
示例代碼
public class Main { public static void main(String[] args) { try { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list"); OapiDepartmentListRequest req = new OapiDepartmentListRequest(); req.setLang("zn_CN"); req.setFetchChild(false); req.setId("1"); req.setHttpMethod("GET"); OapiDepartmentListResponse rsp = client.execute(req, "dsfsfdsfgs你獲取的token"); System.out.println(rsp.getBody()); } catch (ApiException e) { e.printStackTrace(); } } }
其他釘釘的API接口的訪問流程類似。
其他
1.因為釘釘對接口訪問的API的頻率等有限制,建議在定時任務里調用釘釘相關接口,將數據獲取並存儲到自己的數據庫中進行查詢。
2.因為補卡機制,所以如果要獲取考勤數據的話,比如允許補卡3天內的考勤數據,那么每天獲取前四天的數據並進行覆蓋
3.如果在調用接口時出現如下提示:
請求的部門id不在授權范圍內
聯系釘釘管理員登錄后台,找到應用下的權限管理
把這里的權限范圍改為全部員工
4.另外,釘釘要求訪問其接口的ip地址必須提前配置,在開發管理里面的服務器出口ip
釘釘只允許在這里配置ip的服務器去調用其接口
如果在開發接口使用自己的電腦調用時,需要獲取公網的服務器ip,瀏覽器百度Ip獲取代理商的ip
不過這個ip會頻繁改變,一旦請求接口出現ip不在白名單的情況,就要去重新查詢,然后重新配置出口Ip。
所以建議將定時任務寫好,直接將取數據的環節部署在公網服務器上,並配置服務器出口ip,這個ip可以設置多個,用逗號隔開。