钉钉小程序获取用户信息

一、钉钉小程序只容许开发办公类的程序,不能开发娱乐型的程序。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才具有访问通信录的能力。

相关文章
相关标签/搜索