首先在微信開發文檔中有提到微信網頁受權的操做步驟:ajax
第一步:用戶贊成受權,獲取codejson
在確保微信公衆帳號擁有受權做用域(scope參數)的權限的前提下(服務號得到高級接口後,默認擁有scope參數中的snsapi_base和snsapi_userinfo),引導關注者打開以下頁面:api
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_tokenapp
獲取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方法都試過了,都不行,那麼怎麼解決這個跨域問題呢?post
首先咱們知道咱們是不可能改變微信的代碼,那麼咱們就只能想到的解決方法是利用別人的代理來進行中轉,那麼從網上找到了以下方法: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。
url