• 企业微信开发 Vue wxConfig agentConfig 授权


    1.官网地址:https://work.weixin.qq.com/api/doc/90000/90136/90497

    2.下载好文件,在main.js中引入文件。

    import '@/assets/js/weinxin/weixin-js-sdk-1.6.0.js'; // 微信sdk
    import '@/assets/js/weinxin/jwxwork-1.0.0.js';
    Vue.prototype.$wx = (window as any).wx; // 全局使用

    3.路由

    import { wxAuth } from '@/utils/wx-auth'; // 授权文件,见步骤4
    
    routers.afterEach((to: any, from: any) => {
        wxAuth(to);
    });

    4.授权的js文件,例如wx-auth.ts。内容如下:

    import network from '@/network'; // 这个是自己项目里的网络层,用于调用接口
    import Vue from 'vue';
    
    const wxAuth = async (to?: any) => {
        const tempUrl = window.location.protocol + '//' + window.location.host + '/nwd-enterprise-wechat' + to.fullPath;
        const urlNow = encodeURIComponent(tempUrl);
        console.log('当前授权URL:', urlNow);
        const noncestr = Math.floor(Math.random() * 100000000000000);
        const body = {
            url: urlNow,
            timestamp: (new Date() as any) - 0,
            nonceStr: noncestr
        };
        const wxConfigParams = await network.common.getWxConfigParams(body); // 通过接口,获取wxConfig的参数
        const appSignature = await network.common.getAppSignature(body); // 通过接口,获取agentConfig的参数
        Vue.prototype.$wx.config({
            beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: wxConfigParams.appId, // 必填,企业微信的corpID
            timestamp: wxConfigParams.timestamp, // 必填,生成签名的时间戳
            nonceStr: wxConfigParams.nonceStr, // 必填,生成签名的随机串
            signature: wxConfigParams.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
            jsApiList: [
                'shareAppMessage',
                'previewFile',
                'selectEnterpriseContact',
                'onMenuShareAppMessage',
                'invoke',
                'hideOptionMenu',
                'showOptionMenu'
            ] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
        });
        Vue.prototype.$wx.ready(function() {
            console.log('wx.agentConfig:BEGIN');const u = navigator.userAgent;
            const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // 安卓
            const isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
            if (isAndroid) {
                console.log('安卓手机');
                Vue.prototype.$wx.invoke('agentConfig', {
                    corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
                    agentid: '10086', // 必填,企业微信的应用id (e.g. 1000247)生产环境 写自己环境的agentid
                    timestamp: appSignature.timestamp, // 必填,生成签名的时间戳
                    nonceStr: appSignature.nonceStr, // 必填,生成签名的随机串
                    signature: appSignature.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
                    jsApiList: [
                        'openUserProfile',
                        'previewFile'
                    ], // 必填
                }, function(res) {
                    console.log('result', res);
                });
            }
            if (isIOS) {
                console.log('苹果手机');
                Vue.prototype.$wx.agentConfig({
                    corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
                    agentid: '10086', // 必填,企业微信的应用id (e.g. 1000247)生产环境
                    timestamp: appSignature.timestamp, // 必填,生成签名的时间戳
                    nonceStr: appSignature.nonceStr, // 必填,生成签名的随机串
                    signature: appSignature.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
                    jsApiList: [
                        'openUserProfile',
                        'previewFile'
                    ], // 必填
                    success(res: any) {
                        console.log('agentConfig', res);
                    },
                    fail(res: any) {
                        console.log('err', res);
                        if (res.errMsg.indexOf('function not exist') > -1) {
                            alert('版本过低请升级');
                        }
                    }
                });
            }
        });
    };
    
    export {
        wxAuth,
    };

    5.页面中使用api

    // 选人
    selectUser() {
      // 企业微信环境:
            const that = this;
            Vue.prototype.$wx.invoke(
                'selectEnterpriseContact',
                {
                    fromDepartmentId: 0, // 必填,表示打开的通讯录从指定的部门开始展示,-1表示自己所在部门开始, 0表示从最上层开始
                    mode: 'single', // 必填,选择模式,single表示单选,multi表示多选
                    type: ['user'], // 必填,选择限制类型,指定department、user中的一个或者多个
                    selectedDepartmentIds: [], // 非必填,已选部门ID列表。用于多次选人时可重入,single模式下请勿填入多个id
                    selectedUserIds: [] // 已选成员的ID
                },
                function(res) {
                    if (res.err_msg == 'selectEnterpriseContact:ok') {
                        const userInfo = res.result.userList[0];
                    }
                }
            );  
    }
  • 相关阅读:
    原生JS中apply()方法的一个值得注意的用法
    关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考
    git常用命令
    react 项目全家桶构件流程
    vue回顶部 组件 可以直接使用
    vscode左边侧边栏字体的大小
    小程序的福音,
    Android实战技巧:Dialog (转)
    给Android 应用开发者的十个建议(转)
    多线程与异步的区别(转)
  • 原文地址:https://www.cnblogs.com/cynthia-wuqian/p/14297911.html
Copyright © 2020-2023  润新知