• 钉钉企业内部应用获取登录用户信息


    1.创建企业内部应用

    首先在钉钉开放平台注册企业内部应用。

     选择【企业内部开发】

    创建H5微应用

    填写相关信息

    企业内部H5微应用创建完成

    2.接口开发前准备

    开发前必读

    了解不同应用所能支持的能力

     主要了解~账号授权(免登)

     以及完成开发前必要的权限开放

    3.企业内部应用免登开发流程

    钉钉开放平台接口调试平台】服务端

    钉钉开放平台接口调试平台】前端

    1.获取免登授权码

    • 小程序免登

    • 微应用免登

    2.获取AccessToken

    调用接口获取access_token,链接

    3.获取userid

    调用接口获取用户的userid,链接

    4.获取用户详情

    调用接口获取用户详细信息,链接

    4.获取微应用免登授权码

    获取微应用免登授权码—钉钉开发文档

    虽然文档里的内容不多,但做测试,我们需要在本地启动一个web服务,然后通过内网穿透,在钉钉的工作台打开,才能获取到钉钉微应用免登授权码

    4.1创建本地web服务

    1. 安装node(安装步骤

    2. 安装express(安装步骤

    npm install -g express

         3.新建项目文件夹 (ding_demo)

         4.初始化项目

    npm init -y

        5.新建index.html文件(首页)

    开发文档参考

    【corpId来源】:开发者后台

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>弹出函数title>
    6.    
    7.    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js">script>
    8. <script type="text/javascript">
    9. dd.ready(function() {
    10.            dd.runtime.permission.requestAuthCode({
    11.                corpId : "dingxxxxxxxxxxxx",
    12.                onSuccess : function(result) {
    13.                    var code = result.code;
    14.                    alert('获取成功,你的免登code为:' + code);
    15.                    //将code 发往后台处理
    16. },
    17.                onFail : function(err) {
    18.                    alert('出错了, 你获取了一个自定义错误' + err);
    19.               }
    20.           });
    21.       });
    22. script>
    23. head>
    24. <body>
    25.    <button id="code" onclick="dd.ready()">获取授权码button>
    26. body>
    27. html>

    6.新建app.js文件

    1. var express = require('express')
    2. const path = require('path')
    3. app = express()
    4. app.get('/' , function(req,res){
    5. console.log(__dirname)
    6.     res.sendFile(path.resolve( filepath + "index.html" ));// index.html文件路径
    7. })
    8. app.listen(5000,function(){
    9.     // web服务端口
    10.     console.log("5000")
    11. })

    项目文件结构

    1. └── ding_demo/
    2. ├── node_modules/
    3. ├── app.js/ // web配置文件
    4. ├── index.html/ // 首页
    5. ├── package.json/ // 配置文件
    6. ├── package-lock.json/ // 配置文件

    7.启动服务

    node app.js

    【报错1】Uncaught (in promise) Error: Do not support the current environment:notInDingTalk

    (原因:使用本地浏览器打开,没有在钉钉工作台打开)

    【报错2】Uncaught (in promise) ReferenceError: dd is not defined

    (原因:没有加载dingtalk.open.js,需在标签内添加引入外部js钉钉官方接口)

    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js">script>

    【报错3】Uncaught SyntaxError: missing ) after argument list (at (index):32:6)

    (原因:在32行处缺少)括号)

    4.2内网穿透工具使用,获取到微应用免登授权码

    由于钉钉内网穿透工具已废弃,这里使用花生壳作为内网穿透工具,来进行调试。

    【免费】注册【花生壳】账号,设置内网穿透,内网服务端口与我们本地启的服务端口相同。

     将创建的企业微应用,首页地址和PC端首页地址设置为花生壳提供的外网地址。【服务器出口IP】填上自己电脑的ip地址,百度输入IP即可查询到自己的IP地址。

     启动web服务

    node app.js

     打开钉钉工作台,进入创建的企业微应用,即可查看到微应用免登授权码。【注意】只能使用微应用免登授权码,获取一次用户信息,获取用户信息后就失效。

    为了方便微应用免登授权码复制,使用Promise修改

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>弹出函数title>
    6.    
    7.    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js">script>
    8. <script type="text/javascript">
    9. function onReadyPromise() {
    10.   let promiseA = new Promise((resolve, reject)=>{
    11.            dd.ready(()=>{
    12.                dd.runtime.permission.requestAuthCode({
    13.                    corpId: 'dingxxxxxxxxxxxxxxxxxxxxxx',
    14.                            // 企业id
    15.                    onSuccess: function (info) {
    16.                                // 通过该免登 可以获取免登授权码
    17.                        //进行页面登录一系列操作,然后resolve
    18. alert("免登授权码:" + info.code);
    19.                        resolve(info.code);
    20.                   },
    21.                    onFail: function (res) {
    22.                        console.log(res);
    23.                   }
    24.               });
    25.           });
    26.            dd.error(function (err) {
    27.                console.log('dd error: ' + JSON.stringify(err));
    28.           });
    29.   });
    30.  
    31.   promiseA.then(function(data){
    32.   document.getElementById("rest").innerText = data;
    33.   });
    34.  
    35. }
    36. script>
    37. head>
    38. <body>
    39. <button id="code" onclick="onReadyPromise()">获取授权码button>
    40. <h2 id="rest">显示h2>
    41. body>
    42. html>

    5.获取AccessToken

    钉钉开发文档

    钉钉开放平台接口调试平台】服务端

     接口信息

    请求方式:GET

    请求地址https://oapi.dingtalk.com/gettoken

    Query参数

    名称类型是否必填示例值描述
    appkeyStringdingeqqpkv3xxxx应用的唯一标识key。
    appsecretStringGT-lsu-taDAsTsxxxx应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。

    返回参数

    名称类型示例值描述
    access_tokenStringfw8ef8we8f76e6f7s8dxxxx生成的access_token。
    expires_inNumber7200access_token的过期时间,单位秒。
    errmsgStringok返回码描述。
    errcodeNumber0返回码。

    示例

    请求示例(HTTP)

    GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret

    返回示例

    1. {
    2.    "errcode": 0,
    3.    "access_token-": "xxxxxxxxxxxx",
    4.    "errmsg": "ok",
    5.    "expires_in": 7200
    6. }

    6.获取用户userid和用户信息

    钉钉开发文档

     用户userid和用户信息接口基本信息

    请求方式:POST

    请求地址https://oapi.dingtalk.com/topapi/v2/user/getuserinfo

    接口Query参数

    名称类型是否必填示例值描述
    access_tokenString6ed1bxxx调用服务端API的应用凭证。企业内部应用,通过获取企业内部应用的access_token接口获取。第三方企业应用,通过获取第三方企业应用的access_token接口获取。

    接口Body参数

    名称类型是否必填示例值描述
    codeStringbab02f63c1e030fbbxxxx免登授权码,获取方式请参考:小程序免登授权码微应用免登授权码说明 此授权码五分钟内有效,且只能使用一次。

    返回参数

    名称类型示例值描述
    request_idStringe8krly4vyiln请求ID。
    errcodeNumber0返回码
    errmsgStringok对返回码的文本描述内容。
    resultUserGetByCodeResponse返回结果。

    示例

    请求示例(HTTP)

    POST https://oapi.dingtalk.com/topapi/v2/user/getuserinfo?access_token=ACCESS_TOKEN

    请求正文

    1. {
    2.        "code":"bab02f63c1e030fbbxxxx"
    3. }

    返回示例

    1. {
    2.        "errcode": 0,
    3.        "result": {
    4.                "associated_unionid": "N2o5U3axxxx",
    5.                "unionid": "gliiW0piiii02zBUjUxxxx",
    6.                "device_id": "12drtfxxxxx",
    7.                "sys_level": 1,
    8.                "name": "张xx",
    9.                "sys": true,
    10.                "userid": "userid123"
    11.       },
    12.        "errmsg": "ok"
    13. }

  • 相关阅读:
    ArcPy批量对大量遥感影像相减做差
    操作系统知识点总结——第五章输入/输出管理
    字符串的使用方法之startwith()-以XX开头、endsWith()-以XX结尾、trim()-删除两端空格
    Unity3D下如何实现跨平台低延迟的RTMP、RTSP播放
    ubuntu20.04 安装TensorRT,解决依赖问题
    java基础之浅聊线程池
    路由缓存问题 | vue-router的导航守卫
    【机器学习】基于CNN-RNN模型的验证码图片识别
    驱动开发:内核中实现Dump进程转储
    信息学奥赛一本通2061:【例1.2】梯形面积
  • 原文地址:https://blog.csdn.net/qq_38311845/article/details/126193320