工具源碼 : https://github.com/svmachine/DingDing.git
jar包下載 : https://github.com/svmachine/DingDing/blob/master/DingDingUtil.jar
部署使用說明
1.初始化
需要自定義listener,在contextInitialized方法中初始化釘釘api執行的必要條件環境
@Override public void contextInitialized(ServletContextEvent sce) { DefaultContext.init(String random, String corpSecret, String corpId, String agentId); }
2.jsp頁面的放置,使用ifream的方式加載需要單點的系統頁面,一般jsp頁面(示例中為index.jsp、indexPC.jsp)放置在tomcat/webapps/ROOT目錄下,因釘釘免登區分pc端以及移動端故需要兩個jsp頁面,在任意頁面中加入如下代碼區分跳轉pc端或手機端
<script> var ua = navigator.userAgent; var US = { Android:function () { //安卓 return ua.match(/Android/i)?true:false; }, BlackBerry:function() { //黑莓 return ua.match(/BlackBerry/i)?true:false; }, IOS:function(){ //IOS return ua.match(/iPhone|iPad|iPod/i)?true:false; }, Windows:function() { return ua.match(/IEMobile/i)?true:false; }, isMobile:function() { //移動設備 return US.Android()||US.BlackBerry()||US.IOS()||US.Windows(); } } if(US.isMobile()==false){ window.location = "/indexPC.jsp"; //如果是電腦訪問 ,則跳入指定網址。實例中為indexPC.jsp } </script>
3.編寫獲取登錄用戶id的js, 此處為pc端,手機端將DingTalkPC替換為dd即可
pc端js:https://g.alicdn.com/dingding/dingtalk-pc-api/2.7.0/index.js http://g.alicdn.com/ilw/cdnjs/zepto/1.1.6/zepto.min.js
手機端js: http://g.alicdn.com/dingding/open-develop/1.6.9/dingtalk.js http://g.alicdn.com/ilw/cdnjs/zepto/1.1.6/zepto.min.js
DingTalkPC.ready(function() { DingTalkPC.runtime.permission.requestAuthCode({ corpId : _config.corpId, onSuccess : function(info) { $.ajax({ url : 'userInfo?code=' + info.code + '&corpid=' + _config.corpId, //前端鑒權后獲取的code,以及前期返回的conf配置信息,此處url對應示例中的UserInfoServlet類 type : 'GET', success : function(data, status, xhr) { var info = JSON.parse(data); //獲取的用戶詳細信息 var height = window.innerHeight; <!--廢棄的方法, 該方法樣式不太好調試,且通過ifream加載--> <!--var html = "<iframe src=\"url?username=" + info.name + "\" id=\"mainFrame\" height=\"" + height + "\" width=\"100%\"></iframe>";--> <!--$("#ifream").append(html)--> <!-- 目前使用的方式, 該方法存在會跳轉兩次的問題,看起來不太明顯, 此方法會直接展示嵌入的頁面,不通過ifream加載--> location.href = "url?username=" + info.name; }, error : function(xhr, errorType, error) { alert(errorType + ', ' + error); } }); }, onFail : function(err) { alert('fail: ' + JSON.stringify(err)); } }); });
4.獲取url中的username參數,在第三方系統中實現免登陸即可。
5.獲取釘釘部門,用戶信息
調用DingDingUserAndGroup類中的方法即可。
getDepartments(String departmentId); //獲取指定部門id下的子部門信息 getDepartments(); //獲取所有部門信息 getUserByDepartment(String departmentId); //獲取指定部門id下的用戶信息 getUsers(); //獲取所有的用戶信息 getDepartmentParentId(String departmentId); //獲取指定部門id的完整路徑id getDepartmentById(String departmentId); //獲取指定部門id的部門詳細信息