釘釘小程序獲取用戶信息

一、釘釘小程序只容許開發辦公類的程序,不能開發娛樂型的程序。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&timestamp=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才具有訪問通信錄的能力。

相關文章
相關標籤/搜索