釘釘小程序獲取用戶信息


1、釘釘小程序只允許開發辦公類的程序,不能開發娛樂型的程序。

2、釘釘小程序審核需要產品說明書,最大大小不能超過30M(文檔)。

3、貌似可以用IP,暫時沒有看到有關https的限制。

業務提供商(SP),獨立軟件供應商(ISV)、系統集成商(SI)、互聯網服務提供商(ISP)

4、分為三類開發:應用服務商(isp)、行業服務商、定制服務商

  應用服務商:為上億釘釘用戶提供應用和服務,開發微應用並上架到釘釘應用市場,供企業用戶選用

  行業服務商:為釘釘上237個行業的企業/組織提供成熟的解決方案,在釘釘上部署並推廣適合於該行業的微應用

  定制服務商:承接釘釘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是如何獲取用戶的信息的:

1、首先我們在前端調用dd.getAuthCode接口,獲取authCode,這是免登接口。

2、服務器裝釘釘推薦的sdk,該sdk包含了兩個計算api簽名功能和快捷調用各種服務api功能。

3、計算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);
    }
}

 

4、訪問服務端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。

5、再就是獲取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后台,純屬個人理解,有些理解可能是錯的,后期可能會改,但大致思路是這樣的。)

6、獲取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);

 

7、服務端通過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);

8、最后isv需要做的事,ISV(應用服務商)開發者:

  • 首先應用服務商入駐釘釘,完成審批后,將申請人加入服務商溝通組織,在該組織內的審批應用中發起“通訊錄權限申請”流程;
  • 申請釘釘雲,並將微應用部署到釘釘雲,請參考開放平台釘釘雲相關文檔;
  • 釘釘的安全審核人員會審核微應用在釘釘雲上的部署狀態,審核通過后2個工作日內,開通該微應用的通訊錄接口權限。

注意:第三方企業應用的通訊錄權限僅包括讀取權限,不包括數據增刪改的寫權限。應用申請到通訊錄權限后,在應用不具備通訊錄權限時已經開通應用的企業,需要先解除該企業的授權,再重新授權,之后再次獲取的token才具備訪問通訊錄的能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM