一、釘釘小程序只容許開發辦公類的程序,不能開發娛樂型的程序。html
二、釘釘小程序審覈須要產品說明書,最大大小不能超過30M(文檔)。前端
三、貌似能夠用IP,暫時沒有看到有關https的限制。java
(業務提供商(SP),獨立軟件供應商(ISV)、系統集成商(SI)、互聯網服務提供商(ISP) )算法
四、分爲三類開發:應用服務商(isp)、行業服務商、定製服務商json
應用服務商:爲上億釘釘用戶提供應用和服務,開發微應用並上架到釘釘應用市場,供企業用戶選用小程序
行業服務商:爲釘釘上237個行業的企業/組織提供成熟的解決方案,在釘釘上部署並推廣適合於該行業的微應用api
定製服務商:承接釘釘500萬企業的定製需求,根據企業的個性化業務場景提供定製開發和系統集成服務數組
而後,咱們行業屬於應用服務商,獲取不到用戶的手機號。安全
https://www.cnblogs.com/applerosa/p/9025789.html服務器
參數
|
說明
|
errcode
|
返回碼
|
errmsg
|
對返回碼的文本描述內容
|
userid
|
員工惟一標識ID(
不可修改)
|
openid
|
在本 服務窗運營服務商 範圍內,惟一標識關注者身份的id(
不可修改)
|
name
|
成員名稱
|
tel
|
分機號(
僅限企業內部開發調用)
|
workPlace
|
辦公地點(
ISV不可見)
|
remark
|
備註(
ISV不可見)
|
mobile
|
手機號碼(
ISV不可見)
|
email
|
員工的電子郵箱(
ISV不可見)
|
orgEmail
|
員工的企業郵箱,若是員工已經開通了企業郵箱,接口會返回,不然不會返回(
ISV不可見)
|
active
|
是否已經激活,
true:表示已激活
false:表示未激活
|
orderInDepts
|
在對應的部門中的排序,Map結構的json字符串,key是部門的Id,value是人員在這個部門的排序值
|
isAdmin
|
是否爲企業的管理員,
true:表示是
false:表示不是
|
isBoss
|
是否爲企業的老闆,true表示是,false表示不是(
【設置負責人】:主管理員登錄釘釘手機客戶端 -【通信錄】-【企業名後面的管理】-【企業通信錄】-【負責人設置】進行添加便可。 )
|
unionid
|
在當前isv全局範圍內惟一標識一個用戶的身份,用戶沒法修改
|
isLeaderInDepts
|
在對應的部門中是否爲主管:Map結構的json字符串,key是部門的Id,value是人員在這個部門中是否爲主管,
true:表示是
false:表示不是
|
isHide
|
是否號碼隱藏,
true:表示隱藏,
false:表示不隱藏
|
department
|
成員所屬部門id列表
|
position
|
職位信息
|
avatar
|
頭像url
|
hiredDate
|
入職時間
|
jobnumber
|
員工工號
|
extattr
|
擴展屬性,能夠設置多種屬性
(但手機上
最多隻能顯示10個擴展屬性,
具體顯示哪些屬性,請到OA管理後臺->設置->通信錄信息設置和OA管理後臺->設置->手機端顯示信息設置)
|
roles
|
角色信息(
ISV不可見),json數組格式
|
roles.id
|
角色id(
ISV不可見)
|
stateCode
|
手機號碼區號
|
isSenior
|
是不是高管
|
roles.name
|
角色名稱(
ISV不可見)
|
roles.groupName
|
角色分組名稱(
ISV不可見)
|
beta:被理解爲測試的意思。(beta階段)
sdk:軟件開發工具包
dll:動態連接庫
而後看看我做爲isv是如何獲取用戶的信息的:
一、首先咱們在前端調用dd.getAuthCode接口,獲取authCode,這是免登接口。
二、服務器裝釘釘推薦的sdk,該sdk包含了兩個計算api簽名功能和快捷調用各類服務api功能。
三、計算api簽名。(獲取signature)
把timestamp+"\n"+suiteTicket當作簽名字符串,suiteSecret作爲簽名祕鑰,使用HmacSHA256算法計算簽名,而後進行Base64 encode獲取最後結果。而後把簽名參數再進行urlconde,加到請求url後面。
hmac(哈希運算)
String stringToSign = timestamp+"\n"+suiteTicket Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(suiteSecret.getBytes("UTF-8"), "HmacSHA256")); byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); return new String(Base64.encodeBase64(signData));
進行Base64 encode獲取最後結果
// encoding參數使用utf-8 public static String urlEncode(String value, String encoding) { if (value == null) { return ""; } try { String encoded = URLEncoder.encode(value, encoding); return encoded.replace("+", "%20").replace("*", "%2A") .replace("~", "%7E").replace("/", "%2F"); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("FailedToEncodeUri", e); } }
四、訪問服務端api /service/get_corp_token,這個api能夠獲取corpid(企業惟一標示碼)。
https://oapi.dingtalk.com/service/get_corp_token?signature=kKlP1QmmXXX×tamp=1527130370219&suiteTicket=xxx&accessKey=suitezmpdnvsw4xxxxx
須要上傳的數據:
accessKey | ISV應用的suiteKey |
timestamp | 當前時間戳,單位是毫秒 |
suiteTicket | 釘釘給E應用推送的ticket,測試應用隨意填寫如:TestSuiteTicket,正式應用須要從回調地址獲取suiteTicket |
signature | 以timestamp+"\n"+suiteTicket爲簽名字符串,suiteSecret爲簽名祕鑰,使用算法HmacSHA256計算的簽名值。簽名計算說明 |
返回受權方corpid。
五、再就是獲取access_token,sdk請求實例以下(java)。
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","suiteSecret", "suiteTicket");
須要傳入的是corpid(受權方corpid),suiteKey(應用的id),suiteSecret(簽名祕鑰),suiteTicket(釘釘推送的ticket,測試應用能夠隨便填寫)
(沒開發過java後臺,純屬我的理解,有些理解多是錯的,後期可能會改,但大體思路是這樣的。)
六、獲取userid。
上傳:access_token,code
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo"); OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest(); request.setCode("BzmP5AL3tYoZ8f3aKJP"); request.setHttpMethod("GET"); OapiUserGetuserinfoResponse response = client.execute(request,accessToken);
七、服務端經過userid獲取用戶信息
上傳:access_token,userid,
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);
八、最後isv須要作的事,ISV(應用服務商)開發者:
- 首先應用服務商入駐釘釘,完成審批後,將申請人加入服務商溝通組織,在該組織內的審批應用中發起「通信錄權限申請」流程;
- 申請釘釘雲,並將微應用部署到釘釘雲,請參考開放平臺釘釘雲相關文檔;
- 釘釘的安全審覈人員會審覈微應用在釘釘雲上的部署狀態,審覈經過後2個工做日內,開通該微應用的通信錄接口權限。
注意:第三方企業應用的通信錄權限僅包括讀取權限,不包括數據增刪改的寫權限。應用申請到通信錄權限後,在應用不具有通信錄權限時已經開通應用的企業,須要先解除該企業的受權,再從新受權,以後再次獲取的token才具有訪問通信錄的能力。