2021-03-09 企業(yè)微信開發(fā) Vue wxConfig agentConfig 授權(quán) 每個(gè)頁面鑒權(quán)。才能調(diào)用其他的api

所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA(single-page application)的web app可在每次url變化時(shí)進(jìn)行調(diào)用)。

這個(gè)很重要,每個(gè)頁面需要引入權(quán)限

   jsApiList: [
        'shareAppMessage',
        'previewFile',
        'selectEnterpriseContact',
        'onMenuShareAppMessage',
        'invoke',
        'hideOptionMenu',
        'showOptionMenu'
    ] // 必填,需要使用的JS接口列表,凡是要調(diào)用的接口都需要傳進(jìn)來

官方文檔:
https://open.work.weixin.qq.com/api/doc/90000/90135/90226

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


image.png

3.路由

import { wxAuth } from '@/utils/wx-auth'; // 授權(quán)文件,見步驟4

routers.afterEach((to: any, from: any) => {
    wxAuth(to);
});

4.授權(quán)的js文件,例如wx-auth.ts。內(nèi)容如下:

import network from '@/network'; // 這個(gè)是自己項(xiàng)目里的網(wǎng)絡(luò)層,用于調(diào)用接口
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('當(dāng)前授權(quán)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的參數(shù)
    const appSignature = await network.common.getAppSignature(body); // 通過接口,獲取agentConfig的參數(shù)
    Vue.prototype.$wx.config({
        beta: true, // 必須這么寫,否則wx.invoke調(diào)用形式的jsapi會(huì)有問題
        debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印。
        appId: wxConfigParams.appId, // 必填,企業(yè)微信的corpID
        timestamp: wxConfigParams.timestamp, // 必填,生成簽名的時(shí)間戳
        nonceStr: wxConfigParams.nonceStr, // 必填,生成簽名的隨機(jī)串
        signature: wxConfigParams.signature, // 必填,簽名,見 附錄-JS-SDK使用權(quán)限簽名算法
        jsApiList: [
            'shareAppMessage',
            'previewFile',
            'selectEnterpriseContact',
            'onMenuShareAppMessage',
            'invoke',
            'hideOptionMenu',
            'showOptionMenu'
        ] // 必填,需要使用的JS接口列表,凡是要調(diào)用的接口都需要傳進(jìn)來
    });
    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('安卓手機(jī)');
            Vue.prototype.$wx.invoke('agentConfig', {
                corpid: appSignature.appId, // 必填,企業(yè)微信的corpid,必須與當(dāng)前登錄的企業(yè)一致
                agentid: '10086', // 必填,企業(yè)微信的應(yīng)用id (e.g. 1000247)生產(chǎn)環(huán)境 寫自己環(huán)境的agentid
                timestamp: appSignature.timestamp, // 必填,生成簽名的時(shí)間戳
                nonceStr: appSignature.nonceStr, // 必填,生成簽名的隨機(jī)串
                signature: appSignature.signature, // 必填,簽名,見附錄-JS-SDK使用權(quán)限簽名算法
                jsApiList: [
                    'openUserProfile',
                    'previewFile'
                ], // 必填
            }, function(res) {
                console.log('result', res);
            });
        }
        if (isIOS) {
            console.log('蘋果手機(jī)');
            Vue.prototype.$wx.agentConfig({
                corpid: appSignature.appId, // 必填,企業(yè)微信的corpid,必須與當(dāng)前登錄的企業(yè)一致
                agentid: '10086', // 必填,企業(yè)微信的應(yīng)用id (e.g. 1000247)生產(chǎn)環(huán)境
                timestamp: appSignature.timestamp, // 必填,生成簽名的時(shí)間戳
                nonceStr: appSignature.nonceStr, // 必填,生成簽名的隨機(jī)串
                signature: appSignature.signature, // 必填,簽名,見附錄-JS-SDK使用權(quán)限簽名算法
                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('版本過低請(qǐng)升級(jí)');
                    }
                }
            });
        }
    });
};

export {
    wxAuth,
};

5.頁面中使用api

// 選人
selectUser() {
  // 企業(yè)微信環(huán)境:
        const that = this;
        Vue.prototype.$wx.invoke(
            'selectEnterpriseContact',
            {
                fromDepartmentId: 0, // 必填,表示打開的通訊錄從指定的部門開始展示,-1表示自己所在部門開始, 0表示從最上層開始
                mode: 'single', // 必填,選擇模式,single表示單選,multi表示多選
                type: ['user'], // 必填,選擇限制類型,指定department、user中的一個(gè)或者多個(gè)
                selectedDepartmentIds: [], // 非必填,已選部門ID列表。用于多次選人時(shí)可重入,single模式下請(qǐng)勿填入多個(gè)id
                selectedUserIds: [] // 已選成員的ID
            },
            function(res) {
                if (res.err_msg == 'selectEnterpriseContact:ok') {
                    const userInfo = res.result.userList[0];
                }
            }
        );  
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容