import http from "axios"; const timer = {} /** * 企业微信工具类 * @param config 应用配置 * @param agentSignURL 授权url * @param apiList 授权的接口集合 */ class wxworkKit { constructor() { this.agentSignURL = "" this.agentSign() } /** * 授权jssdk在url上使用,并获取当前的企业微信应用配置 * @param params * @returns {Promise} */ agentSign(params = {}) { //授权jssdk在url上使用,并获取corpId const url = window.location.href if (this.agentSignURL == url && this.config.corpId) { return Promise.resolve() } else { this.agentSignURL = url this.apiList = [] return http.post("https://mzt.hlj.gov.cn/mztweb/app/wxcp/portal/agentSign", null, { params: {...params, url} }).then(res => { if (res?.data?.data) { const config = { ...params, debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 corpId: res.data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致 agentId: res.data.agentid, // 必填,企业微信的应用id (e.g. 1000247) timestamp: Number(res.data.timestamp), // 必填,生成签名的时间戳 nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 signature: res.data.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法 ...res.data.data } this.config = config return config } }).catch(err => { console.error(err) }) } } /** * 授权jssdk的使用 * @param apis 可以为数组或者单字符串 * @returns {Promise} */ injectJWeixin(apis) { const inject = (jsApiList) => new Promise((resolve, reject) => { jsApiList = jsApiList || [] if (timer.injectJWeixin) {//节流设置,500ms内的多次请求合并到一处 clearTimeout(timer.injectJWeixin) jsApiList = [...new Set([...this.apiList, ...jsApiList])] this.apiList = jsApiList } timer.injectJWeixin = setTimeout(() => { const sdk = wx?.agentConfig ? wx : jWeixin console.log("agentConfig配置:") console.log({...this.config, jsApiList}) sdk?.agentConfig({ ...this.config, jsApiList, success: res => resolve(res), fail: err => { console.error(err) reject(err) } }) }, 500) }) return inject([apis].flat().filter(Boolean)) } /** * 判断是否为企业微信环境 * @returns {boolean} */ static isWxwork() { return /wxwork/i.test(navigator.userAgent) } } export default wxworkKit