微信網頁授權——獲取code、access_token、openid,及跨域問題解決


首先在微信開發文檔中有提到微信網頁授權的操作步驟:

第一步:用戶同意授權,獲取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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM