在这里我是把钉钉授权放在了一个单独的文件里(utils/authorization.js)下。
首先我们要明白为什么要授权?
因为我们需要调用钉钉业务相关的一些jsapi,需要做一个鉴权,这样才可以使用,但是钉钉提供的jsapi有很多是手机的基础能力,是不需要鉴权的,直接在dd.ready里面调用就行。在开发之前。我们要看好自己开发的钉钉业务需不需去做鉴权。(可以参考钉钉提供的jsapi总览)
1、第一步:获取token
2、第二步:获取jsapi中的ticket
3、第三步:生成jaspi中的鉴权sagn
4、第四步:鉴权

鉴权参数

  • url:当前页面的url,不包含#及其后面部分。
  • nonceStr:随机串
  • agentId:应用标识
  • timeStamp:时间戳
  • corpId:企业id
    出了url外,我们可以从后端获取到其他参数
utils/authorization.js
export function DDAuthentication(data) {
    let _config = data
    dd.config({
        agentId: _config.agentId, // 必填,微应用ID

        corpId: _config.corpId,//必填,企业ID

        timeStamp: _config.timeStamp, // 必填,生成签名的时间戳

        nonceStr: _config.nonceStr, // 必填,生成签名的随机串

        signature: _config.signature, // 必填,签名

        type: 0,  //选填。0表示微应用的jsapi,1表示服务窗的jsapi;不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持

        jsApiList: [
           "runtime.info",

            "biz.contact.chooseMobileContacts",

            "biz.contact.choose",

            "device.notification.confirm",

            "device.notification.alert",

            "device.notification.prompt",

            "biz.ding.post",

            "biz.util.openLink",

            "biz.contact.complexPicker"

        ] // 必填,需要使用的jsapi列表,注意:不要带dd。

    });
}

授权成功后就可以唤起钉钉业务相关的api了

let _this = this;
        dd.ready(function() {
          dd.biz.contact.complexPicker({
            title: "标题", //标题
            corpId: _this._config.corpId, //企业的corpId
            multiple: true, //是否多选
            limitTips: "超出了", //超过限定人数返回提示
            maxUsers: 10, //最大可选人数
            pickedUsers: [], //已选用户
            pickedDepartments: [], //已选部门
            disabledUsers: [], //不可选用户
            disabledDepartments: [], //不可选部门
            requiredUsers: [], //必选用户(不可取消选中状态)
            requiredDepartments: [], //必选部门(不可取消选中状态)
            appId: _this._config.agentId, //微应用Id,企业内部应用查看AgentId
            permissionType: "xxx", //可添加权限校验,选人权限,目前只有GLOBAL这个参数
            responseUserOnly: false, //返回人,或者返回人和部门
            startWithDepartmentId: 0, //仅支持0和-1
            onSuccess: function(result) {
              
              // console.log(result, "成功");
            },
            onFail: function(err) {
              console.log(err, "失败");
            }
          });
        });

通过error接口处理失败验证
dd.config验证失败会执行error函数,错误信息可以在返回的error参数中查看,下面为error信息示例:

dd.error(function(error){
       /**
        {
           errorMessage:"错误信息",// errorMessage 信息会展示出钉钉服务端生成签名使用的参数,请和您生成签名的参数作对比,找出错误的参数
           errorCode: "错误码"
        }
       **/
       alert('dd error: ' + JSON.stringify(error));
});

注意:在钉钉授权中遇到的问题
签名校验失败
根据官网给的提示

  • 用户后端签名使用的url地址和前端访问地址需要严格一致,包括端口号。前端部分可以用alert显示出当前的location.href,后端部分请在签名的时候打印日志。
  • 访问通过反向代理服务器、各种NAT等场景下容易出现这种问题,如http缺省的80端口,和显式增加80的不是同一个URL。
  • 检查确认获取的jsapiticket是否正确或者过期。jsapiticket是否有效期内重复获取导致jsapiticket被覆盖。

经过排查后,都不是以上问题,最终发现是在生成签名时,给后端传的url地址不对,当时是根据开发文档规则来的,传入的是当前页面地址,这个地址需要是钉钉开放平台配置的首页应用地址一致。

python 获取钉钉通讯录 钉钉通讯录怎么查找_python 获取钉钉通讯录


python 获取钉钉通讯录 钉钉通讯录怎么查找_错误信息_02