首先在微信開發文檔中有提到微信網頁授權的操作步驟:
第一步:用戶同意授權,獲取code
在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(服務號獲得高級接口后,默認擁有scope參數中的snsapi_base和snsapi_userinfo),引導關注者打開如下頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri = REDIRECT_URL&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中scope有靜默授權和非靜默授權兩種,在這里我們使用非靜默授權:scope等於snsapi_userinfo,為后面獲取用戶信息做准備。
如果用戶同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。
code說明:code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期。
第二步:通過code換取網頁授權access_token
獲取code后,請求以下鏈接獲取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
但是在獲取access_token的過程中,我們會遇到一個跨域問題,什么post、get和jsonp方法都試過了,都不行,那么怎么解決這個跨域問題呢?
首先我們知道我們是不可能改變微信的代碼,那么我們就只能想到的解決方法是利用別人的代理來進行中轉,那么從網上找到了如下方法:
var target = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=AECRET&code="+value+"&grant_type=authorization_code";
$.ajax({//2.通過code換取網頁授權access_token
url: 'http://query.yahooapis.com/v1/public/yql',//雅虎代理url
dataType: "jsonp",//雅虎代理數據格式
data:{
q:"select * from json where url=\'"+target+"'",
//代理返回格式
format:"json"
},
success: function (data) {
alert("請求成功");
alert("openid:"+data.query.results.json.openid);
console.log("openid:"+data.query.results.json.openid);
}
});
以上的用的就是yahoo的代理ypl進行一個中轉,ypl是雅虎旗下一個用來轉換數據的,從而獲取到了access_token和openid。