所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA(single-page application)的web app可在每次url变化时进行调用)。
这个很重要,每个页面需要引入权限
jsApiList: [
'shareAppMessage',
'previewFile',
'selectEnterpriseContact',
'onMenuShareAppMessage',
'invoke',
'hideOptionMenu',
'showOptionMenu'
] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
官方文档:
https://open.work.weixin.qq.com/api/doc/90000/90135/90226
2.下载好文件,在main.js中引入文件。
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];
}
}
);
}