開發(八)網頁授權( Oauth )通過Oauth擷取使用者資訊,oauth使用者資訊
文章作者:松陽
本文出自 阿修羅道,禁止用於商業用途,轉載請註明出處。
原文連結:http://blog.csdn.net/fansongy/article/details/45340951
網頁授權
開發時,我們總是想要儘可能多的活動使用者的資訊。但官方和使用者本身,又不想暴露這些資訊。搞來搞去,就出現了很多奇形怪狀的規則和互動方式。網頁授權就是其中之一,它可以為我們提供擷取使用者OpenID途徑。做到悄悄的進村,開槍的不要。
流程說明
這個流程其實也不複雜。首先使用者訪問 https://open.weixin.qq.com/connect/oauth2/authorize 這個串連,連結後面帶著appid,我們要跳轉的連結名稱,以及一個自訂變數。當使用者訪問時,伺服器會跳回我們的連結,並將使用者的openID傳回來。官方說明如下:
在確保公眾帳號擁有授權範圍(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參數對應的授權範圍許可權。官方連結在這裡
當然隨隨便便給你使用者的openID是有條件的:保護費交一下。實名認證少不了滴。
介面設計
有了這個我們就可以使用很多授權頁面了。如果你只要使用者的openID,是不會出現那個噁心人的綠色介面的。如果使用者未關注你的服務號,並且你還想要暱稱和頭像,就會出現那個“我是賊”的綠色頁面。上面寫明了要暱稱和頭像的授權,雖然我也知道沒啥後招,但凡是出現這個頁面的,我都毫不猶豫的關掉了
為了避免設計很多亂七八糟的Oauth介面,我建議只使用一個介面,然後通過state的值來做邏輯判斷的標準,更改程式返回的頁面。
實現
首先還是那句話,實名認證,沒這個,介面啥的免談。
然後編寫一個統一的Oauth介面。
@RequestMapping(value="/authIntf")public void authLogin(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException{ String redirectURL="http://blog.csnd.net/fansongy"; String code = request.getParameter("code"); if(code == null ||code.length() == 0){ logger.error("can't get param code from auth request!"); } String actionType =request.getParameter("state"); if(actionType == null || actionType.length() == 0){ logger.error("can't get param code from auth request!"); } String userOpenId = wxAuthService.getUserOpenID(code); if(userOpenId != null && userOpenId.length()>0) { redirectURL = loginAndJumpBack(userOpenId, actionType); }else { logger.info("Can't find openId in authLogin"); } response.sendRedirect(redirectURL);}public String loginAndJumpBack(String fromUserName, String actionType) { //your logic return "http://www.baidu.com";}部署
在服務號的後台設定合法的網域名稱,具體做法可以參考官方文檔:
在公眾號請求使用者網頁授權之前,開發人員需要先到公眾平台官網中的開發人員中心頁配置授權回調網域名稱。請注意,這裡填寫的是網域名稱(是一個字串),而不是URL,因此請勿加http://等協議頭;
最終部署時,建議先更新服務,然後在中通過連結的方式測試,測試完成後,在添加入口,比如菜單點擊事件。
如果你覺得這篇文章對你有協助,可以順手點個頂,不但不會喜當爹,還能讓更多人能看到它...