钉钉小程序获取用户信息

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

posted on 2018-07-19 09:14 买辣椒也用券 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Juaoie/p/9333466.html

钉钉小程序获取用户信息相关推荐

  1. 小程序 获取用户信息

    小程序获取用户信息 1.先判断是否授权 wx.getSetting({ success: (data) => { console.log(data); if (data.authSetting[ ...

  2. 微信小程序 获取用户信息并保存登录状态

    微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml 转载于:https://www ...

  3. 微信小程序获取用户信息

    微信小程序获取用户信息 微信小程序获取用户信息接口做了调整: 2021年4月28日24时后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像.昵称.性别与地区),将直接获 ...

  4. 微信小程序获取用户信息-头像、昵称......

    微信小程序获取用户信息-头像.昵称等,并出现弹窗提示授权 目录 微信小程序获取用户信息-头像.昵称等,并出现弹窗提示授权 1.wx.getUserProfile文档 2.代码演示 3.演示过程(图示) ...

  5. 支付宝小程序获取用户信息及手机号

    支付宝小程序获取用户信息及手机号 众所周知,微信小程序是可以通过微信本身授权后再登录,平台可以拿到微信用的的账号相关信息,然后保存到数据库中,那么同理在支付宝小程序开发过程中,登录功能的设计也可以如此 ...

  6. 微信公众号/微信小程序获取用户信息以及推送微信模版消息_MQ

    微信公众号/微信小程序获取用户信息以及推送微信模版消息_MQ 一.获取用户信息 1.首先我们需要了解什么是微信用户的OpenID 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密 ...

  7. 小程序获取用户信息的两种方法

    小程序获取用户信息的两种方法 第一种使用 getUserProfile 代码示例 第二种使用 头像昵称填写 相信大家之前也经常使用open-data获取用户的头像和昵称吧,但微信的这个改编意味着我们要 ...

  8. PHP 微信小程序获取用户信息

    小程序授权应用场景:先拿到用户信息(先wx.login获取code,code换取用户session_key,再wx.getuserInfo获取到用户的encryptedData iv ,再通过调用官方 ...

  9. 微信小程序获取用户信息流程(2022年版)

     开门见山地说,本文主要讲述微信小程序在2022年以后获取用户信息的主要方法,如果想要了解2022年之前微信小程序获取用户信息的相关知识或者是微信小程序之前这部分的设计思想的话,推荐博主的下面这篇博客 ...

最新文章

  1. Planetary Science and Life in the Universe
  2. 【电子信息复试】考研复试常考问题——数据结构
  3. android 自定义loading,android_自定义Loading框
  4. 在SQL Server 2017上充分利用Python
  5. 对自己深度学习方向的论文有idea,可是工程实践能力跟不上,实验搞不定怎么办?...
  6. Linux 入门记录:七、fdisk 分区工具
  7. PHP上传的文件权限不足,上传文件的PHP脚本不工作的问题(目录权限问题)php-fpm+nginx...
  8. C#读写注册列表(写入注册列表,读取注册列表的数据)
  9. Java中的线程池回顾总结
  10. wap网游php源码,wap 文字游戏
  11. 和利时dcs系统服务器设置,和利时DCS系统常见问题分析
  12. echarts地图展示
  13. 苹果群控的安装和使用
  14. seata分布式事务处理教程
  15. 英语学习逆向法 (钟道隆 著)
  16. 关于Switch的参数
  17. android 4.4.4版本模拟器,新一代神器!安卓模拟器4.4.2内核之上的穹顶之战
  18. 分析一下云ERP与本地ERP相比区别在哪里
  19. C++ Primer(第四版)答案之第八章
  20. 渴望快速成功,正在毁掉多少年轻人……

热门文章

  1. cesium实时获取卫星的动态信息,包括经纬度和名称(onTick)
  2. Excel2019关闭时无响应
  3. 【Android Compose】实现宜家 双联列表
  4. 川土微 数字隔离器 CA-IS3722HS可替代ADUM1201ARZ
  5. 宏康 HY17 时钟 串口
  6. 入手佳能24-70mm f/2.8L
  7. 华为鸿蒙新平板,华为鸿蒙Beta 3.0 版本推送更新 预装鸿蒙新平板获入网许可
  8. 虚拟主机服务器架设,云虚拟主机架设服务器
  9. LeetCode 427. 建立四叉树
  10. CRMEB 商城订单发货功能