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 staticString 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= newOapiServiceGetCorpTokenRequest();

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= newOapiUserGetuserinfoRequest();

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= newOapiUserGetRequest();

request.setUserid("zhangsan");

request.setHttpMethod("GET");

OapiUserGetResponse response= client.execute(request, accessToken);

8、最后isv需要做的事,ISV(应用服务商)开发者:

首先应用服务商入驻钉钉,完成审批后,将申请人加入服务商沟通组织,在该组织内的审批应用中发起“通讯录权限申请”流程;

申请钉钉云,并将微应用部署到钉钉云,请参考开放平台钉钉云相关文档;

钉钉的安全审核人员会审核微应用在钉钉云上的部署状态,审核通过后2个工作日内,开通该微应用的通讯录接口权限。

注意:第三方企业应用的通讯录权限仅包括读取权限,不包括数据增删改的写权限。应用申请到通讯录权限后,在应用不具备通讯录权限时已经开通应用的企业,需要先解除该企业的授权,再重新授权,之后再次获取的token才具备访问通讯录的能力。

叮叮获取所有用户信息_钉钉小程序获取用户信息相关推荐

  1. 微信公众号获取用户openId(扩展:小程序获取openId和手机号)

    微信公众号获取用户openId 拼接的参数[可以直接配菜单中]: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb2363dd ...

  2. 小程序 模糊查询_[轻应用小程序]如何使用信息查询功能?

    本文内容结构如下图 一.查询功能是什么?有什么作用? 对于企业,会有一些和自身业务相关的数据,需要给到客户提供"查询信息"或"查询缴费"服务. 查询信息: 学校 ...

  3. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

    方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...

  4. 微信小程序弹出用户授权弹窗,微信小程序引导用户授权,获取位置经纬度

    我们在开发小程序时,有些操作必须让用户授权.比如我们获取用户位置,需要用户授权位置信息.授权操作我们需要给用户弹窗提示,在用户禁用某些权限时,又要引导用户去设置页开启相应权限.我们这里就以获取经纬度为 ...

  5. 前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)

    一.前言 早期为了解决"会话保持"的需求,社区中出现了「cookie 方案」并最终成为 W3C 标准:当某个网站登录成功后,客户端(浏览器)收到一个 cookie 标识(文本)并保 ...

  6. 微信小程序获取步数没有服务器怎么解密,微信小程序获取步数权限,小程序权限检查...

    /** * 检查授权 */ checkWerunAuthorize:function(){ let that = this; wx.getSetting({ success(res) { if (!r ...

  7. 用户协议html代码,微信小程序同意用户协议确认投稿页面设计制作开发教程

    {{bookInfo.title}} 作 者 : {{bookInfo.author}} 感谢上传的图书和题目,参与我们的书城建设. 加入图书分类小组,搜索QQ群123456 加入出题小组,搜索QQ群 ...

  8. 微信小程序获取用户信息方案介绍

    背景 小程序一个比较重要的能力就是获取用户信息,也就是使用 wx.getUserInfo 接口.我们发现几乎所有的小程序都会调用这个接口.虽然我们在设计文档上有提出最好的设计是在真正要用户信息的情况下 ...

  9. 微信小程序获取用户头像昵称

    微信小程序获取头像昵称问题解决 文章目录 微信小程序获取头像昵称问题解决 前言和传统方法 问题描述 解决方案 实现效果 前言和传统方法 微信小程序是一种基于微信开发平台的轻应用,用户可以通过微信扫码. ...

  10. 小程序 获取当前城市位置-高德地图

    微信小程序 wx.getLocation 只能获取到经纬度,想要获取具体城市信息,需要使用地图插件.公司要求使用 高德地图,在使用上,几个地图的代码步骤都差不多. 目录 1. 查看官方文档 1.1 申 ...

最新文章

  1. 朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较
  2. 秒杀商品超卖事故:Redis分布式锁请慎用!
  3. java1.5连接oracle12c_java1.5连接oracle12c
  4. SQL Server创建存储过程
  5. Sql Server日期格式的转换收集
  6. 台电x80plus装linux,纤巧却不简单——台电X80 Plus评测
  7. java cookie 覆盖吗_Java Web-Cookie和Session
  8. RMQ+1/-1算法 [转]
  9. Servlet(2) ---2004
  10. nginx负载均衡fair模块安装和配置
  11. Web前端-html页面-网易注册表单,美化及时验证效果
  12. 一分六钱用计算机怎么算,交行信用卡分期付款计算器:5000元分6期手续费
  13. 摄氏度和开氏度的换算_开尔文与摄氏度的换算关系
  14. nginx配置解决跨域问题
  15. 三极管分压共射放大电路
  16. 电脑服务器地址能修改吗,电脑ip地址可以随便改吗
  17. 互联网公司刻板印象合集:程序员都秃头,商务个个是人精
  18. Nebula Exchange 从Hive导入 NoSuchMethodError
  19. 打车应用生死未卜 嘀嘀或傍上腾讯
  20. 以蜜代糖促进心脑血管健康

热门文章

  1. Unity通过鼠标或者手势实现拉进拉远,旋转等操作的常用方法
  2. 旧机还在换盆?! Linux deploy让她再发光!
  3. VGG 图像打标签工具
  4. 金三银四,是纵马一跃,还是稳如老狗!
  5. Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
  6. 模糊数学 计算机智能,《常用算法之智能计算 (五) 》:模糊计算
  7. IsFinite (m_CachedRange.first) IsFinite (m_CachedRange.second) 的解决参考
  8. Stochastic Weight Averaging (SWA) 随机权重平均
  9. win10硬盘锁怎么解除_win10系统如何解锁bitlocker的硬盘加密
  10. window下线程同步之(Event Objects(事件)) / 事件CEvent的使用