参考链接:https://github.com/HADB/GetWeixinCode
大致思路:让微信授权配置到同一个域名下进行访问
打开上面的链接,下载文件到某个域名(b域名)下,然后在要授权的地方点击访问文件下的get-weixin-code.html文件
这样就做到微信开放平台只能配置两个的限制了 但是会出现回退时一直卡在授权地方,所以我把代码做了以下改动
点击授权地方的链接设置:
// scope根据需要设置 redirect_uri回调路由(具体参考微信文档,授权需要配置信息)
window.location.href = b域名 + '/GetWeixinCode-master/get-weixin-code.html?appid=' + appId + '&scope=snsapi_userinfo&state=getUserBack&redirect_uri=' + url
get-weixin-code.html.html(只贴出了修改的地方,其余的不用动)
<script>
doRedirect: function () {
var code = GWC.urlParams['code'];
var appId = GWC.urlParams['appid'];
var scope = GWC.urlParams['scope'] || 'snsapi_base';
var state = GWC.urlParams['state'];
var isMp = GWC.urlParams['isMp']; //isMp为true时使用开放平台作授权登录,false为网页扫码登录
var baseUrl;
var redirectUri;
// 判断从授权成功后跳转的页面返回
if (localStorage.getItem('user_code_status') == 2) {
urlBack()
return
}
var user_code_status = localStorage.getItem('user_code_status')
if (!code) {
// 没有点授权回退
if (user_code_status && user_code_status != 0) {
urlBack()
return
}
baseUrl = "https://open.weixin.qq.com/connect/oauth2/authorize#wechat_redirect";
if (scope == 'snsapi_login' && !isMp) {
baseUrl = "https://open.weixin.qq.com/connect/qrconnect";
}
//第一步,没有拿到code,跳转至微信授权页面获取code
redirectUri = GWC.appendParams(baseUrl, {
'appid': appId,
'redirect_uri': encodeURIComponent(location.href),
'response_type': 'code',
'scope': scope,
'state': encodeURIComponent(state),
});
localStorage.setItem('user_code_status', 1);
} else {
//第二步,从微信授权页面跳转回来,已经获取到了code,再次跳转到实际所需页面
redirectUri = GWC.appendParams(GWC.urlParams['redirect_uri'], {
'code': code,
'state': encodeURIComponent(state)
});
localStorage.setItem('user_code_status', 2);
}
window.location.href = redirectUri;
}
};
GWC.getUrlParams();
GWC.doRedirect();
// 回退方法(activity.html为需要回退的页面)
function urlBack() {
var urlCan = GWC.urlParams['redirect_uri']
var urlstr = urlCan.split('/')
if (urlstr[2]) {
var urls = urlstr[0] + '//' + urlstr[2]
window.location.replace(urls + '/activity.html' ));
localStorage.removeItem('user_code_status')
}
}
</script>
同时需要在下载的GetWeixinCode文件增加一个页面(我这边定义为index.html)用来清localStorage,放在点击授权的页面引用
点击授权的页面增加一个窗口:
html:
<iframe src="" frameborder="0" style="width: 0;height:0" id="iframe"></iframe>
js:
$('#iframe').attr('src', b域名+ '/GetWeixinCode-master/index.html')
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
localStorage.removeItem('user_code_status')
</script>
</body>
</html>
又熬了个通宵!