钉钉小程序获取用户信息

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×tamp=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才具备访问通讯录的能力。

你可能感兴趣的:(钉钉小程序获取用户信息)