企业微信JSSDK和微信JSSDK一样,都要通过授权、签名等获取相关信息以及调用APIAPI,唯一不同的就是JSSDK有agentConfig, 调用wx.agentConfig之前,必须确保先成功调用wx.config
import { AuthLogin, configVerify, agentConfigVerify } from '../api/wechat'
import { getSearch } from "./CommonFun";
import { APP_ID } from "./OriginName";
import { WXsharing } from './WXapi'
import store from "../store";
//eslint-disable-next-line
/* global location */
/* eslint no-restricted-globals: ["off", "location"] */
// eslint-disable-next-line
const $wx = wx;
const wxwork_status = false ;//本地开发false 其他true
export const WXLogin = (self) => {
//判断是否为pc端企业微信
/**
* 地址:http://ui.qywechat.test.gemii.cc:58080/#/work?code=W-jhtc5vpOVBnpILM-Hm_EJtDrEQaETgz5_k6Bar26I&state=STATE
* safari:mozilla/5.0 (macintosh; intel mac os x 10_14_4) applewebkit/605.1.15 (khtml, like gecko) version/12.1 safari/605.1.15
* chrome:mozilla/5.0 (macintosh; intel mac os x 10_14_4) applewebkit/537.36 (khtml, like gecko) chrome/80.0.3987.132 safari/537.36
* 开发者工具:mozilla/5.0 (iphone; cpu iphone os 11_0 like mac os x) applewebkit/604.1.38 (khtml, like gecko) version/11.0 mobile/15a372 safari/604.1 wechatdevtools/1.02.1912261 micromessenger/7.0.4 language/zh_cn webview/15863409720343797 webdebugger port/37478
*/
// ua.match(/windowswechat/i) == 'windowswechat'&&
if (wxwork_status){
var ua = window.navigator.userAgent.toLowerCase();
if ('wxwork' == ua.match(/wxwork/i)) {
VerifyLogin()
} else {
alert('请在企业微信中打开')
var opened = window.open('about:blank', '_self');
opened.opener = null;
opened.close();
}
}else{
VerifyLogin()
}
}
const VerifyLogin = ()=>{
var search = getSearch();
var code = search.code;
if (!code) {
var _baseEn = encodeURIComponent(window.location.href);
var date = new Date().getTime();
// alert("未授权");
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APP_ID}&redirect_uri=${_baseEn}&response_type=code&scope=snsapi_privateinfo&state=${date}#wechat_redirect`;
} else {
// alert("已经授权");
//企业微信登录:未登陆时需要根据cope值获取user_ticket,corpId,userId,等,才有权限调用config
AuthLogin(code).then(res => {
if (res.code == 100) {
let user = res.data.user;
store.dispatch('UserInfo', user)
store.dispatch('UserInfo', user)
store.dispatch('IsWxLogin', true)
store.dispatch('Loading', true)
//存储token
let exp = new Date();
exp.setTime(exp.getTime() + 1 * 60 * 60 * 1000)
document.cookie = 'access_token' + "=" + escape(res.data.token) + ";expires=" + exp.toGMTString() + ";path=/";
WXconfig();
}else{
console.log('AuthLogin fail');
}
})
}
}
export const WXconfig = () => {
let currentUrl = location.href.split('#')[0]
let url = encodeURIComponent(currentUrl)
configVerify(url).then(res => {
//config信息验证
$wx.config({
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: res.data.corpId, // 必填,企业微信的corpID
timestamp: res.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.data.noncestr, // 必填,生成签名的随机串
signature: res.data.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: [
'checkJsApi',
'onMenuShareAppMessage',
// 'onMenuShareWechat',
// 'onMenuShareTimeline',
// 'shareAppMessage',
// 'shareWechatMessage',
// 'startRecord',
// 'stopRecord',
'chooseImage',
'uploadImage',
'previewImage',
// 'downloadImage',
'hideOptionMenu',
// 'showOptionMenu',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
// 'showAllNonBaseMenuItem',
// 'closeWindow',
// 'scanQRCode',
'openEnterpriseChat',
'selectEnterpriseContact',
// 'onHistoryBack',
// 'openDefaultBrowser',
], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
success: function (res) {
console.log('config_success');
}
});
//隐藏右上角菜单接口
// $wx.hideOptionMenu();
//批量显示功能按钮接口
//批量隐藏功能按钮接口
$wx.hideMenuItems({
menuList: [
"menuItem:share:timeline", //分享到微信朋友圈
"menuItem:share:wechat",//分享到微信好友
// "menuItem:copyUrl",
// "menuItem:share:appMessage",
"menuItem:share:qq",
"menuItem:share:weiboApp",
"menuItem:favorite",
"menuItem:share:facebook",
"menuItem:share:QZone",
"menuItem:editTag",
"menuItem:delete",
"menuItem:originPage",
"menuItem:readMode",
"menuItem:openWithQQBrowser",
"menuItem:share:email",
"menuItem:share:brand"
] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮
});
$wx.ready(function () {
// alert('ready')
WXagentConfig();
WXsharing()
})
$wx.error(function (res) {
console.log('error', res);
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
}).catch(req => {
console.log(req);
})
}
export const WXagentConfig = () => {
let currentUrl = location.href.split('#')[0]
let url = encodeURIComponent(currentUrl);
agentConfigVerify(url).then(res => {
$wx.agentConfig({
corpid: res.data.corpId, // 必填,企业微信的corpid,必须与当前登录的企业一致
agentid: res.data.agentid, // 必填,企业微信的应用id (e.g. 1000247)
timestamp: res.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.data.noncestr, // 必填,生成签名的随机串
signature: res.data.signature,// 必填,签名,见附录1
jsApiList: [
'selectExternalContact',//外部联系人选人接口
'getCurExternalContact',//获取userId
'openUserProfile',//打开个人信息页接口
'sendChatMessage' //聊天工具栏分享消息到会话
],//打开个人信息页接口], //必填
success: function (res) {
// alert('success--2--agentConfig')
console.log('agentConfig_success');
// 回调
},
fail: function (res) {
// if (res.data.errMsg.indexOf('function not exist') > -1) {
// alert('版本过低请升级')
// }
}
});
$wx.error(function (res) {
console.log('error', res);
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
}).catch(req => {
console.log(req);
})
}