web端router.js或者uniapp中app.vue中拦截调用处理
此处截了部分web端router.js的代码
router.beforeEach(async (to, from, next) => {
const hasToken = getToken()
const from_qw = store.getters.from_qw
if (from_qw && !hasToken) {
await qwGetToken()
if (getUrlParam('code')) {
next()
} else {
return false;
}
}
}
封装的js代码
export default function getCode() {
var code = getUrlParam('code') // 截取路径中的code,如果没有就去微信授权,如果已经获取到了就直接传code给后台获取openId
var targetUrl = window.location.href; //这个地方是微信公众平台网页授权里面配置的域名,
const redirect_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wwfd45d382384eb513&redirect_uri=' +
encodeURIComponent(targetUrl) +
'&response_type=code&scope=snsapi_base&state=#wechat_redirect'
if (code == null || code === '') {
window.location.replace(redirect_url)
} else {
getOpenId(code) //把code传给后台获取用户信息
}
}
export function getUrlParam(name) {
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
let r = window.location.search.substr(1).match(reg)
if (r != null) {
return unescape(r[2])
}
return null
}
// 根据企微code获取企业token
export function getOpenId(code) {
uni.request({
url: '/api/oauth/Login/socials',
method: 'get',
data: {
code: code,
source: 'wechat_enterprise_h5',
grant_type: 'socials'
},
success: (res) => {
uni.setStorageSync('token', res.data.data.token);
uni.setStorageSync('Authorization', res.data.data.token);
store.dispatch("user/getCurrentUser")
}
});
}