钉钉二次开发

标签: 钉钉 分类: Javascript 创建时间:2020-04-07 08:38:46 更新时间:2025-01-17 10:39:24

这一篇是作为汇总页面提出来的,主要记录在钉钉上进行二次开发的一些小点。

1.扫码登录

扫码登录可能是一个最简单的入门应用了吧,其实原理和微信的扫码登录差不多的。有两种方式,一种是使用官网自带的登录页面,另一种是使用 js sdk 构造需要的二维码,然后进行跳转,最后都会跳转到 redirect_uri 定义的
url上面去。

(1) 获取扫码登陆的 appid、appscret。

2.获取用户详细信息

获取用户信息,主要通过user/get请求,使用access_token和userid作为参数。如何获取userid?有一个接口叫getUseridByUnionid,根据unionid获取用户的userid。那么如何获取unionid呢?有一个扫码登录的过程getuserinfo_bycode,可以通过临时码code获取用户的unionid,如何获取code,可以通过 官网说明 可以获取到线索。

获取用户信息的时候,还有一个需要注意的就是,要在钉钉开放平台的后台页面的H5维应用的接口权限页面->打开相应的接口权限。

打开:”邮箱等个人信息权限“、“通讯录个人信息读权限”、“成员信息读权限”等,否则就会出现 403 错误。

在调用的时候,可以通过返回的权限信息,开通相应的权限:requiredScopes=[qyapi_get_member]

问题

(1) 访问ip不在白名单之中

第一种方法:失败

解决了用户权限的问题,使用postman调试接口的时候,总是提示ip地址不在白名单中。

1
2
3
4
{
"errcode": 60020,
"errmsg": "请参考FAQ:https://open-doc.dingtalk.com/microapp/faquestions/cvbtph。错误原因:访问ip不在白名单之中,request ip=ip appKey(appkey)"
}

按照提示,我找到了添加ip的方法

添加ip的路径为:登录开发者后台-基本信息-开发信息旧版-找到该应用使用的Corpsecret值,点击设置修改ip;如果当前账号按照上述路径查看不到Corpsecret,需要该企业主管理员账号查看并修改ip。

我打开了我的管理后台,确实看不到ip地址,那我应该不是企业主管理员。

和企业管理员沟通之后,他登录后台,然后在相应的位置,有一个修改按钮。

点击修改按钮,这里有一个服务器公网出口IP白名单。企业管理员的这个界面刚开始不一样,有一个部门负责人选项,把我设置为负责人之后,我用自己的账号登录后台,这个地方就可以修改了。

还有一点需要注意的是,在钉钉的管理后台界面,也要设置通讯录管理功能,才能选择关联部门。

第二种方法:最终解决方案

设置了上面的应用之后,还是不行,后来,我打开了H5微应用,然后点击了找到了相应的扫码登录应用->基本信息->修改->服务器出口IP地址,也可以修改服务器的出口ip。如果ip没有被使用过的时候,就需要可以添加修改相应的出口ip,在进行接口权限测试的时候就可以了。

如果你添加的ip地址,已经被别人添加过了,而别人没有解除,可能就不能添加,我就遇到了这样的问题。那只能按他的提示,进行操作了。

不能填入具体的ip,那我就用一个星号代替,比如:8.8.8.*,这样可以添加上ip白名单,这样就可以进行本地开发测试了。

3.钉钉获取日志信息

(1) 钉钉获取日志时,start_time和end_time需要时毫秒,如果是填入秒查出的内容是空。

问题

(1) Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/taobao/api/TaobaoRequest
在使用钉钉的接口的时候,本地调试没有问题,总是在远程出现错误。

下面的代码其实很简单,没有任何的难点,但是总是执行不了:logger.error(“kkkkkkkkk”),所以很莫名奇妙。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static JSONObject httpGet(String url){
JSONObject jsonrResult = null;
logger.error("kkkkkkkkk");
try {
logger.error("dsfjlajsldfjlj");
CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = closeableHttpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
logger.error("httpGet",entity);
String result = EntityUtils.toString(entity, "UTF-8");
jsonrResult = JSON.parseObject(result);
} catch (Exception e) {
logger.error("DDAuthUntil.httpGet",e);
}
return jsonrResult;
}

最后才发现,虽然这个方法里面没有调用钉钉的接口,但是在这个类的头部,出现了

1
2
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;

本地之所以没有报错,是因为将lib放到了resource目录下,但是在打包的时候,maven并没有将resource中的lib打包到类路径中,所以远程服务器部署的时候,就会找不到这个类库。

4.创建审批流

要调用钉钉的审批模板创建方法,需要有审批的权限,在接口权限->高级权限下,申请审批权限。

调用钉钉的审批操作有两种方式
(1) 第一种就是使用已经在钉钉的审批模板后台手动创建了审批,在发起审批的时候,只需要调用相应的模板id,然后传入相应的参数就好了。

(2) 第二种,就是通过接口先创建一个模板,然后调用模板进行审批。这两者有什么样的限制,其实官方说的不是很明白。

接口:https://oapi.dingtalk.com/topapi/process/save?access_token=<access_token>

参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"saveProcessRequest":{
"name":"审批流测试",
"description":"审批流测试",
"form_component_list":{
"component_name":"TextField",
"props":{
"id":"TextField-J78F056R",
"label":"单行输入框"
}
}
}
}

返回值:

1
2
3
4
5
6
7
{
"errcode":0,
"result":{
"process_code":"PROC-3147A782-134F-4825-86FB-390D57240169"
},
"request_id":"8hzkoebc88j5"
}
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。