項(xiàng)目進(jìn)行微信開發(fā), 認(rèn)證了一個(gè)微信服務(wù)號(hào)專門用于內(nèi)部測(cè)試粟誓,但是內(nèi)部可能存在多套不同環(huán)境(開發(fā)dev奏寨、測(cè)試sit、預(yù)發(fā)布uat)等鹰服,由于微信限制一個(gè)服務(wù)號(hào)只能配置一個(gè)網(wǎng)頁(yè)授權(quán)域名病瞳, 又不可能給每個(gè)環(huán)境單獨(dú)配一個(gè)服務(wù)號(hào),這樣不僅需要成本而且很浪費(fèi)資源悲酷, 所以重點(diǎn)需要解決下面這個(gè)問題:
1套菜、可以自動(dòng)區(qū)分環(huán)境。比方部署開發(fā)環(huán)境设易。url可能是http://dev.xxx.com/api/逗柴,而在測(cè)試環(huán)境的時(shí)候應(yīng)該是http://sit.xxx.com/api/。而并且不能寫死顿肺,否則開發(fā)和測(cè)試就要換來(lái)?yè)Q去戏溺。非常麻煩
本文總結(jié)分享一下思路:
主要是通過中間頁(yè)面代理獲取微信授權(quán)CODE,然后跳轉(zhuǎn)到對(duì)應(yīng)需要使用的環(huán)境URL下;
比如原來(lái)開發(fā)環(huán)境, 微信中授權(quán)域名配置的是dev.xxx.com屠尊,那么現(xiàn)在配置的是一個(gè)代理域名proxy.xxx.com旷祸,通過代理域名拿到code后在跳回dev.xxx.com,如下圖所示
代碼片段 getCode.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>微信授權(quán)登錄</title>
</head>
<body>
</body>
<script>
var code = getPara("code");
if(!code)
{
var redirect = getPara("url");
var appid = getPara("appid");
var _from = getPara("from");
var redirect_url = encodeURIComponent('https://proxy.xxx.com/getCode.html?url='+redirect);
var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri=" + redirect_url + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
location.href = url;
}else{
var redirect = getPara("url");
var code = getPara("code");
if(redirect.split('?').length > 1){
location.href = redirect + "&code=" + code;
}else{
location.href = redirect + "?code=" + code;
}
}
function getPara(name){
var url = location.href;
eval("var reg = /("+name+"=[A-Za-z0-9_,-@!#\.\:\/]*)/i")
var match = url.match(reg);
if(match && match.length > 1){
var arr = match[0].split("=");
arr.shift();
return arr.join('=');
}else{
return "";
}
}
</script>
</html>
使用方法https://proxy.xxx.com/getCode.html?url=http://dev.xxx.com/uinfo&appid=wx6d421c188956xx95
歷史文章:
JAVA微信企業(yè)付款到零錢(十分鐘搞定)
微信授權(quán)獲取用戶openId的方法和步驟
一個(gè)微信號(hào)同時(shí)支持多個(gè)環(huán)境網(wǎng)頁(yè)授權(quán)
微信兩種簽名算法MD5和HMAC-SHA256