钉钉企业内部小程序免登录

钉钉自动登录需要两个东西:

         一个是access_token(访问令牌),一个是code(免登录授权码)。

         (企业应用和个人应用的免登授权码均可通过该JSAPI获取。)

dd.getAuthCode({
    success:function(res){
        /*{
            authCode: 'hYLK98jkf0m' //string authCode
        }*/
    },
    fail:function(err){
    }
});


authCode    授权码,有效期5分钟,且只能使用一次
获取之后会得到用户的userid,然后可以通过access_token和userid来获取用户的详细信息

而access_token的获取也是需要两个东西

         一个是AppKey,一个是AppSecret

(AgentId:在创建应用时,系统会自动生成一个AgentId,可用于发送企业会话消息等场景。
    AppKey:在创建应用时,系统会自动分配一对AppKey和AppSecret,该AppKey是应用开发过程中的唯一性标识。
    AppSecret:AppSecret和上面AppKey一同生成,使用AppKey和AppSecret来换取access_token。)

所以流程就是 获取code 然后获取access_token,然后通过这两个获取userid,再通过userid和access_token来获取用户详细信息

 onLoad() {
    dd.getAuthCode({
      success: (res) => {
        var code = res.authCode; //免登授权码
        dd.httpRequest({
          //根据appKey和appsecret来获取Token
          url: "https://oapi.dingtalk.com/gettoken?appkey=???&appsecret=???",
          success: function (res) {
 
            console.log("res:", res);
 
            var access_token = res.data.access_token;
 
            console.log("access_token:", access_token);
 
            dd.httpRequest({
              url: 'https://oapi.dingtalk.com/user/getuserinfo?access_token=' + access_token + '&code=' + code,
              success: function (res) {
 
                console.log("获取得到的用户信息:", res);
 
                dd.httpRequest({
                  url: 'https://oapi.dingtalk.com/user/get?access_token=' + access_token + '&userid=' + res.data.userid,
                  success: function (res) {
 
                     console.log("根据访问Token和用户id得到用户详细信息:", res)
                     console.log("用户Id:", res.data.userid);
                     console.log("用户名", res.data.name);
                     console.log("电话", res.data.mobile);
                     console.log("errmsg:", res.data.errmsg);
                     console.log("角色权限:", res.data.roles);
 
                  },
                });
              },
            });
          },
        });
      },
      fail: (err) =>{
        dd.alert({content: JSON.stringify(err)})
      },
 
    });
 
  }

猜你喜欢

转载自blog.csdn.net/weixin_60842212/article/details/124745487