H5開發應用:
H5應用開發最典型的就是第三方企業應用,我們就以第三方企業應用作為樣例進行開發。
步驟一,登錄釘釘開發者后台,選擇"應用開發"-"第三方企業應用"-"H5微應用",點擊"創建應用",開始創建第三方企業微應用。(開發者后天網址:https://oa.dingtalk.com/#/login)
填寫應用基本信息。包括應用名稱、應用Logo、應用類型和應用簡介,其中,管理后台、PC端首頁地址,如果不使用都可以先不填寫。需特別注意:
1. 應用類型
應用類型分為“測試應用”和“正式應用”,選擇后不能進行修改,測試應用不受服務器IP白名單限制,無法發布上架,僅供測試使用。如果選擇正式應用,需要填寫IP白名單。
點擊下一步配置開發信息:
2. 推送類型
可以選擇使用“釘釘雲推送”或“HTTP推送”。
(1)釘釘雲推送:
在保障數據安全的前提下,極大的簡化了推送協議,減少了數據傳輸次數,提高了數據傳輸速度,提升了推送的穩定性。正式版的第三方應用都須使用釘釘雲推送(注意:第三方應用在申請接口權限、上架應用市場的時候,必須使用釘釘雲)。
不需要服務端加密解密,只需要確認有服務即可。
參考網址:https://ding-doc.dingtalk.com/doc#/serverapi3/hwd30h
(2)HTTP推送:
是使用回調地址推送數據的方式,開發者提供HTTP回調服務,釘釘服務器會向此回調地址推送數據,數據需要經過加解密的處理。
也就是說需要服務端寫一個公網連接地址,然后把接受到的數據進行加密解密,返回正確的值,通常有兩個作用,第一個是驗證服務器地址的正確性用的,第二個是開通一些功能的權限用的。
參考網址:
步驟二,創建成功后,可以在應用列表查看到創建的應用。點擊您創建的應用可以查看應用的詳細信息,如下圖所示:
點擊應用信息后面的“查看詳情”,可以查看應用的信息,包括創建后得到的suiteId、suiteKey和suiteSecret,還可以在此頁面點擊修改進行內容的調整。
注意在應用主頁地址后面可以寫上?corpid=$CORPID$用URL傳參的方式來獲取第三方企業的corpid
創建完事微應用了,就可以在前端到后端的代碼了,主要是寫兩個方面,第一個方面是頁面獲取臨時授權碼然后到后台換取應用token的一套代碼,以頁面和java為例:
頁面:
1.引用js,引用js調用釘釘的方法
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
2.釘釘的方法寫在釘釘環境下可以獲得換取token的免登授權碼的地方,免登授權碼5分鍾內有效。
dd.ready(function() {
dd.runtime.permission.requestAuthCode({
corpId: _config.corpId, // 企業id
onSuccess: function (info) {
code = info.code // 通過該免登授權碼可以獲取用戶身份
}});
});
參考網址:https://ding-doc.dingtalk.com/doc#/dev/about
3.在js頁面獲取url傳參傳遞過來的corpid
var corpid = ”想盡辦法活得url網址后面的corpid下面的auth_corpid會用“
4.使用前端獲取的code臨時碼換取兩個小時有效的access_token,獲取之前需要導入一個阿里的sdk的包,java版本下載地址:https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02 下載完事導入項目可以直接復制使用釘釘官網樣例代碼了,
把官網的代碼復制到本地:
DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_corp_token");OapiServiceGetCorpTokenRequest req = new OapiServiceGetCorpTokenRequest();req.setAuthCorpid("dingc365fcabbf733c3535c2f4657eb6378f");OapiServiceGetCorpTokenResponse execute = client.execute(req,"suiteKey","suiteSecrect", "suiteTicket");
把里面的參數替換替換,上面的參數大部分都是創建應用的時候有的,可以找一找,然后解析返回的數據里面就有access_token了(access_token兩個小時有效,如果用戶量比較大可以存入數據庫或者服務器緩存里面等失效了再去官網取,如果用戶量比較小,也可以每次都去官網取,這個看自己)。
注意的是上面有一個計算機簽名的生成,在參考網址里面也有
參考網址:https://ding-doc.dingtalk.com/doc#/serverapi3/hv357q
5.使用access_token獲取用戶ID
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();request.setCode(requestAuthCode);request.setHttpMethod("GET");OapiUserGetuserinfoResponse response = client.execute(request, accessToken);String userId = response.getUserid();
在返回值里面可以解析出來userid
參考網址:https://ding-doc.dingtalk.com/doc#/serverapi3/xcdh0r
6.使用用戶ID還可以獲取用戶的詳情信息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");OapiUserGetRequest request = new OapiUserGetRequest();request.setUserid("zhangsan");request.setHttpMethod("GET");OapiUserGetResponse response = client.execute(request, accessToken);
通過access_token和userid可以獲取用戶的詳細信息:比如姓名,角色等
到現在,整個免登流程就結束了,還有獲取企業權限部門等等。
參考網址:https://ding-doc.dingtalk.com/doc#/serverapi2/ege851/AaRQe
然后就回到常用的h5移動端的開發模式了,在一系列的開發之后,有時候會發現需要更高級的功能,比如利用釘釘播出電話共鞥你需要這個時候就需要了jsapi鑒權功能了,說明白一點就是每一次調用這個功能的時候,都需要進行網址和簽名的安全校驗,符合安全機制,不允許論調用等等,注意只有H5微應用才需要做鑒權。
- 也需要引入js
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
- jsapi需要頁面引用配置
dd.config({ agentId: '', // 必填,微應用ID corpId: '',//必填,企業ID timeStamp: '', // 必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '', // 必填,簽名 type:0/1, //選填。0表示微應用的jsapi,1表示服務窗的jsapi;不填默認為0。該參數從dingtalk.js的0.8.3版本開始支持 jsApiList : [ 'runtime.info', 'biz.contact.choose', 'device.notification.confirm', 'device.notification.alert', 'device.notification.prompt', 'biz.ding.post', 'biz.util.openLink', ] // 必填,需要使用的jsapi列表,注意:不要帶dd。});
參考網址:https://ding-doc.dingtalk.com/doc#/dev/uwa7vs
從上面的參數來看,agentid和signature是需要獲取的,其他的我們都已經有了,nonceStr是自己隨便定義一個大於6位的字符串就行
3.agentid獲取的方式:
參考網址:https://ding-doc.dingtalk.com/doc#/serverapi3/fmdqvx
4.計算機簽名signature獲取方式,注意url是當前網頁調用鑒權方法的全部網址但是不包含#后面的網址。
public static String sign(String ticket, String nonceStr, long timeStamp, String url) throws OApiException { String plain = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + String.valueOf(timeStamp) + "&url=" + url; try { MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); sha1.reset(); sha1.update(plain.getBytes("UTF-8")); return byteToHex(sha1.digest()); } catch (NoSuchAlgorithmException e) { throw new OApiResultException(e.getMessage()); } catch (UnsupportedEncodingException e) { throw new OApiResultException(e.getMessage()); }} // 字節數組轉化成十六進制字符串 private static String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("%02x", b); } String result = formatter.toString(); formatter.close(); return result; }
參考網址:https://ding-doc.dingtalk.com/doc#/dev/uwa7vs
把所需要的參數都傳回頁面,就可以了
頁面代碼:
dd.config({ agentId: '', // 必填,微應用ID corpId: '',//必填,企業ID timeStamp: '', // 必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '', // 必填,簽名 type:0/1, //選填。0表示微應用的jsapi,1表示服務窗的jsapi;不填默認為0。該參數從dingtalk.js的0.8.3版本開始支持 jsApiList : [ 'runtime.info', 'biz.contact.choose', 'device.notification.confirm', 'device.notification.alert', 'device.notification.prompt', 'biz.ding.post', 'biz.util.openLink', ] // 必填,需要使用的jsapi列表,注意:不要帶dd。});
參考網址:https://ding-doc.dingtalk.com/doc#/dev/uwa7vs
鑒權成功以后,調用鑒權功能的方法要寫在dd.ready里面
比如播出功能
參考網址:https://ding-doc.dingtalk.com/doc#/dev/afrr0d
最后補充一下開通應用授權的流程:
https://ding-doc.dingtalk.com/doc#/serverapi3/hwd30h
最后由於官網沒提供調試工具,得自己找調試工具
第一種調試工具是開發版的釘釘,然后在谷歌瀏覽器上面輸入localhost:168888可以調試
還有一種是在硬件設備上,比如手機或者平板上面安裝調試工具,真是異常麻煩,作者強烈不建議H5的技術模式。。。。
如果覺得講解的不錯但是不想自己一個一個下載代碼的,可以參考這個博客的網站:https://www.cnblogs.com/ZenoLiang/p/12677392.html