引入组件

引入 dingtalk-jsapi 组件,此jsApi支持运行于 android, ios, pc,钉钉小程序环境,且保持开发体验一致。

组件地址:https://www.npmjs.com/package/dingtalk-jsapi

1、使用 npm 命令安装 dingtalk-jsapi

在 uni-app 项目的根目录,执行 npm 命令:

npm install dingtalk-jsapi --save

2、在 vue 文件 引入 dingtalk-jsapi

import * as dd from 'dingtalk-jsapi'; // 整体调用
// import 'dingtalk-jsapi/entry/mobile'; // 只引入移动端(支持小程序)
// import 'dingtalk-jsapi/entry/union'; // 如果你想要在此代码在PC端和移动端都执行,那你可以如此引入

3、获取微应用免登授权码

文档地址:https://ding-doc.dingtalk.com/doc#/dev/ep7bpq

使用以下代码获取免登授权码(调用此api不需要进行鉴权,即不需要进行dd.config)。获取的免登授权码有效期5分钟,且只能使用一次,请查看获取免登授权码API

dd.ready(function() {
    dd.runtime.permission.requestAuthCode({
        corpId: _config.corpId, // 企业id
        onSuccess: function (info) {
             code = info.code // 通过该免登授权码可以获取用户身份
        }
   });
});

3、最终伪代码如下:

<script>
    import * as dd from 'dingtalk-jsapi'; // 整体调用
    export default {
        data() {
            return {

            }
        },
        onLoad() {
            // 如果需要调免登录之外的其他API则需要配置下面的config
            dd.config({
                agentId: '', // 必填,微应用ID
                corpId: '',//必填,企业ID
                timeStamp: new Date().getTime(), // 必填,生成签名的时间戳
                nonceStr: '', // 必填,生成签名的随机串
                signature: '', // 必填,签名
                type:0/1,   //选填,0表示微应用的jsapi,1表示服务窗的jsapi,不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
                jsApiList:[
                   'runtime.info',
                   'biz.contact.choose',
                   'device.notification.confirm',
                   'device.notification.alert',
                   'device.notification.prompt',
                   'biz.ding.post',
                   'biz.util.openLink',
                ],
            });
            // 自动登录
            // #ifdef MP-WEIXIN
            //this.loginThirdpaty("weixin");
            // #endif
            // #ifdef MP-ALIPAY && MP-DINGTALK
            //this.loginThirdpaty("dingtalk");
            // #endif
        },
        methods: {
            // 第三方平台登录
            loginThirdpaty(provider){
                var that = this
                // 钉钉登录
                if('dingtalk' == provider ){
                    that.loadModal = true;
                    console.log(dd,'res')
                    if (dd.env.platform!=="notInDingTalk") {
                        //进行钉钉登录操作
                        dd.ready(function() {
                           dd.runtime.permission.requestAuthCode({
                                corpId: '',//必填,企业ID
                                onSuccess: function(result) {
                                    console.log(result)
                                },
                                onFail : function(err) {
                                    console.log(err,'wee')
                                }
                            });
                        });
                        return false
                    }
                }
                else if('weixin' == provider ){
                    that.loadModal = true;
                    uni.login({
                        provider:'weixin',
                        success(loginRes) {
                            let js_code = loginRes.code;
                            // 和后台进行交互完成免登录

                            that.loadModal = false;
                        },
                        fail:function(err){
                            that.loadModal = false;
                        }
                    })
                }
            }
        }
    }
</script>
作者:Jeebiz  创建时间:2023-02-25 01:30
最后编辑:Jeebiz  更新时间:2023-02-25 01:45