import { wechatConfig, share } from '@/api/wx'; // 加载日志 import * as log from './log.js' import { isAndroid } from './platform.js' import store from '../store'; // 保存wx对象 import weixinObj from "@/plugin/jweixin-module/index.js"; // 保存分享数据 let shareData = ''; // 保存注册返回appId数据 let appId = ''; //保存路由对象 let router = ''; //微信登录 /** * @param {string} 当前页面地址信息 */ export async function loginWinxin() { console.log('1'); let pages, page, path; if (!router) { router = await setRouter(); } try { pages = getCurrentPages(); // 获取跳转前页面 page = pages[pages.length - 1]; // 获取跳转前路由地址 path = page.route; } catch (e) { console.log(e); //TODO handle the exception } // 判断是否在登录页 if (path != 'pages/public/redirect') { log.addLog('开始注册微信') weixindata().then(() => { // 调用 try { weixinSq(); } catch (e) { console.log(e); //TODO handle the exception } }); } }; // 微信授权登录 function weixinSq() { // 微信授权后跳转页面 try { // 判断是否真实路由模式 const type = router.mode === "history"?'':'/#' let ul = encodeURIComponent(store.state.baseURL + store.state.urlFile +type+ '/pages/public/redirect'); // 打开微信授权页面 let url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId + '&redirect_uri=' + ul + '&response_type=code&scope=snsapi_userinfo&state=' + new Date().getTime() + '#wechat_redirect'; window.location.href = url; } catch (e) { console.log(e); //TODO handle the exception } }; // 微信注册 export async function weixindata(config) { let url; try { // 判断是否存在router if (!router) { router = await setRouter(); } if (router.mode === "history") { // 在ios中时候注册为微信刚进入时候的页面 if (!window.entryUrl) { window.entryUrl = location.href.split('#')[0] } url = isAndroid() ? location.href.split('#')[0] : window.entryUrl; } if (router.mode === "hash") { url = location.href.split('#')[0]; } log.addLog('注册开始', url) console.log('开始注册', url); } catch (e) { console.log('错误', e); } return new Promise((ok, error) => { try { //注册微信信息 wechatConfig({ url }) .then(({ data }) => { try { // 保存appId appId = data.appId // 微信信息配置 weixinObj.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: data.appId, // 必填,企业号的唯一标识,此处填写企业号corpid timestamp: data.timestamp, // 必填,生成签名的时间戳 nonceStr: data.nonceStr, // 必填,生成签名的随机串 signature: data.signature, // 必填,签名,见附录1 jsApiList: data.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); weixinObj.ready((e) => { log.addLog("注册完毕", data) console.log('注册完毕'); ok(data,weixinObj) }) } catch (e) { console.log(e) } }) .catch(e => { error(e); console.log(e); }); } catch (e) { console.log(e); //TODO handle the exception } }) } // 判断分享调用方法 export function shareLoad(config) { console.log('开始调用分享') try { weixindata().then((e) => { // 判断有无自定义数据 if (config) { shareFun(config) } else { // 判断是否已经缓存了默认数据 if (shareData) { shareFun() } else { // 请求获取默认数据 share({}).then(({ data }) => { shareData = data.data shareFun() }); } } }) } catch (e) { console.log('报错', e) //TODO handle the exception } } // 配置分享数据 function shareFun(config) { try { console.log('再付分享内容', config); let mess; if (config) { mess = { link: config.link, // 分享链接 imgUrl: config.imgUrl, desc: config.desc, title: config.title, success: config.success || function(e) { console.log(e); }, fail: config.fail || function(e) { console.log(e); } } } else { const userInfo = uni.getStorageSync('userInfo') console.log(userInfo); const url = window.location.href + '?spread=' + userInfo.uid; url = url.replace(/[\?,&]{0,1}from=singlemessage/g, ''); mess = { title: shareData.title, link: url, // 分享链接 imgUrl: shareData.img, // 分享图标 desc: shareData.synopsis, success: function() { // uni.showModal({ // title: '分享', // content: '分享成功', // showCancel: false, // success: res => { // console.log('分享成功回调接口'); // }, // fail: () => {}, // complete: () => {} // }); } } } // 获取仓库数据 // 分享好友 weixinObj.updateAppMessageShareData(mess); // 分享朋友圈 weixinObj.updateTimelineShareData(mess) } catch (e) { console.log(e); //TODO handle the exception } } // 保存路由对象 export function setRouter(route) { return new Promise((ok, err) => { router = getApp().$router; if (!router) { const set = setInterval(() => { router = getApp().$router; if (router) { clearInterval(set) ok(router) } }, 100); }else{ ok(router) } }) } export default { weixinObj, shareData, appId, setRouter, shareLoad }