授權網頁登陸,oauth,授權oauth
1、在公眾號請求使用者網頁授權之前,開發人員需要先到公眾平台官網中的開發人員中心頁配置授權回調網域名稱。請注意,這裡填寫的是網域名稱(是一個字串),而不是URL,因此請勿加http://等協議頭;2、授權回調網域名稱配置規範為全網域名稱,比如需要網頁授權的網域名稱為:www.qq.com,配置以後此網域名稱下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行OAuth2.0鑒權3、如果公眾號登入授權給了第三方開發人員來進行管理,則不必做任何設定,由第三方代替公眾號實現網頁授權即可
第一步:使用者同意授權,擷取code
在確保公眾帳號擁有授權範圍(scope參數)的許可權的前提下(服務號獲得進階介面後,預設擁有scope參數中的snsapi_base和snsapi_userinfo),引導粉絲開啟如下頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“該連結無法訪問”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權範圍許可權。
參數說明
| 參數 |
是否必須 |
說明 |
| appid |
是 |
公眾號的唯一標識 |
| redirect_uri |
是 |
授權後重新導向的回調連結地址,請使用urlencode對連結進行處理
特此聲明:此回調的url,應該是在對應公眾號所設定的網域名稱下的訪問路徑,如果不是,則瀏覽器回提示出“該連結無法訪問” 如果是jsp,可以寫成對應的action, 或者(1:“http://www.xiaoyouho.com/login.jsp” 例如(2:”www.xiaoyouho.com/wechatAction_login.do,“
一、進行url編碼後,就是如下的連結了https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4f3aaf0ea47fc448&redirect_uri=http%3a%2f%2fwww.xiaoyouho.com%2flogin.jsp&response_type=code&scope=snsapi_userinfo&state=promotionID#wechat_redirect 在瀏覽器裡開啟 二、 開啟後提示是否登入授權 點擊允許後,瀏覽器會重新導向到上面redirect_uri對應的路徑,且會加上state對應的參數 在,瀏覽器裡複製 已經跳轉的連結 即可查看, 例如(1:http://www.xiaoyouho.com/login.jsp?code=0212d725f3066e54f482caf6fa79520X&state=promotionID 如果是action,則從定向到對應的action, 那麼我們就可以在對應的後台代碼中擷取咱們需要的參數了“code”(下文接掃) String code = request.getParameter("code"); String param = request.getParameter("state"); |
| response_type |
是 |
傳回型別,請填寫code |
| scope |
是 |
應用授權範圍,snsapi_base (不彈出授權頁面,直接跳轉,只能擷取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能擷取其資訊) |
| state |
否 |
重新導向後會帶上state參數,開發人員可以填寫a-zA-Z0-9的參數值,最多128位元組
如果是多個參數,“=” 會被編碼成,“%3D”
|
| #wechat_redirect |
是 |
無論直接開啟還是做頁面302重新導向時候,必須帶此參數 |
第二步使用者同意授權後
如果使用者同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。若使用者禁止授權,則重新導向後不會帶上code參數,僅會帶上state參數redirect_uri?state=STATE
code說明 :code作為換取access_token的票據,每次使用者授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動到期。
通過code擷取access_token
首先請注意,這裡通過code換取的是一個特殊的網頁授權access_token,與基礎支援中的access_token(該access_token用於調用其他介面)不同。公眾號可通過下述介面來擷取網頁授權access_token。如果網頁授權的範圍為snsapi_base,則本步驟中擷取到網頁授權access_token的同時,也擷取到了openid,snsapi_base式的網頁授權流程即到此為止。
如果是重新導向到action,則訪問以下的連結擷取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
| 參數 |
是否必須 |
說明 |
| appid |
是 |
公眾號的唯一標識 |
| secret |
是 |
公眾號的appsecret |
| code |
是 |
填寫第一步擷取的code參數 |
| grant_type |
是 |
填寫為authorization_code |
正確時返回的JSON資料包如下:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
| 參數 |
描述 |
| access_token |
網頁授權介面調用憑證,注意:此access_token與基礎支援的access_token不同 |
| expires_in |
access_token介面調用憑證逾時時間,單位(秒) |
| refresh_token |
使用者重新整理access_token |
| openid |
使用者唯一標識 |
| scope |
使用者授權的範圍,使用逗號(,)分隔 |
第三步:拉取使用者資訊(需scope為 snsapi_userinfo)如果網頁授權範圍為snsapi_userinfo,則此時開發人員可以通過access_token和openid拉取使用者資訊了。
http:GET(請使用https協議)https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
參數說明
| 參數 |
描述 |
| access_token |
網頁授權介面調用憑證,注意:此access_token與基礎支援的access_token不同 |
| openid |
使用者的唯一標識 |
| lang |
返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語 |
返回說明
正確時返回的JSON資料包如下:
{ "openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE" "city":"CITY", "country":"COUNTRY", "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":["PRIVILEGE1""PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}