qq怎麼新增第三方授權(qq如何第三方登入平臺)
1.1 第三方登入
所謂的第三方登入,就是APP識別到使用者將第三方的賬號繫結到自己平臺的 ID上直接完成登入的過程,簡單來說,是指基於使用者在第三方平臺上已有的賬號和密碼來快速完成己方應用的登入或者註冊的功能。常見的第三方登入平臺,一般是已經擁有大量使用者的平臺,國內的就是各大廠:微信、微博、QQ 等,國外有 Facebook、Twitter。
1.2 掃碼登入
現在的第三方平臺基本都支援掃碼登入,因為掃碼登入更加安全,
而且不用記賬號和密碼
如:微信、qq、支付寶
2. QQ第三方登入
2.1 qq互聯
https://connect.qq.com/
2.2 註冊開發者
2.3 文件
3. OAuth2.0 介紹
3.1. QQ登入OAuth2.0總體處理流程
QQ登入OAuth2.0總體處理流程如下:
Step1:申請接入,獲取appid和apikey;
Step2:開發應用,並設定協作者帳號進行測試聯調;
Step3:放置QQ登入按鈕;
Step4:通過使用者登入驗證和授權,獲取Access Token;
Step5:通過Access Token獲取使用者的OpenID;
Step6:呼叫OpenAPI,來請求訪問或修改使用者授權的資源。
4. 專案整合qq登入
4.1 maven匯入包
4.2. 配置
最好檢視qq給出的demo例子
建立
qqconnectconfig.properties放在resources根目錄下
app_ID = 101543517
app_KEY = 3d43255254a6f50876661fe2bec86684
redirect_URI = http://javatv.cn/loginAfter
scope = get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addr
baseURL = https://graph.qq.com/
getUserInfoURL = https://graph.qq.com/user/get_user_info
accessTokenURL = https://graph.qq.com/oauth2.0/token
authorizeURL = https://graph.qq.com/oauth2.0/authorize
getOpenIDURL = https://graph.qq.com/oauth2.0/me
addTopicURL = https://graph.qq.com/shuoshuo/add_topic
addBlogURL = https://graph.qq.com/blog/add_one_blog
addAlbumURL = https://graph.qq.com/photo/add_album
uploadPicURL = https://graph.qq.com/photo/upload_pic
listAlbumURL = https://graph.qq.com/photo/list_album
addShareURL = https://graph.qq.com/share/add_share
checkPageFansURL = https://graph.qq.com/user/check_page_fans
addTURL = https://graph.qq.com/t/add_t
addPicTURL = https://graph.qq.com/t/add_pic_t
delTURL = https://graph.qq.com/t/del_t
getWeiboUserInfoURL = https://graph.qq.com/user/get_info
getWeiboOtherUserInfoURL = https://graph.qq.com/user/get_other_info
getFansListURL = https://graph.qq.com/relation/get_fanslist
getIdolsListURL = https://graph.qq.com/relation/get_idollist
addIdolURL = https://graph.qq.com/relation/add_idol
delIdolURL = https://graph.qq.com/relation/del_idol
getTenpayAddrURL = https://graph.qq.com/cft_info/get_tenpay_addr
getRepostListURL = https://graph.qq.com/t/get_repost_list
version = 2.0.0.0
4.3. 建包oauth2並掃描
4.4. 編寫qqcontroller
@Controller public class QQController { @Autowired RestTemplate restTemplate; @Autowired UserService userService; // 將頁面重定向到qq第三方的登入頁面 @RequestMapping(value = "/qqLogin") public void qqLogin(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType("text/html;charset=utf-8"); response.sendRedirect(new Oauth().getAuthorizeURL(request));//將頁面重定向到qq第三方的登入頁面 } catch (Exception e) { e.printStackTrace(); } } // 登入之後回撥地址 @RequestMapping(value = "/loginAfter") public String qqLoginAfter(HttpServletRequest request, HttpServletResponse response) { try { System.err.println("============登入之後回撥地址=========="); AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request); String accessToken = null, openID = null; long tokenExpireIn = 0L; if (accessTokenObj.getAccessToken().equals("")) { // 我們的網站被CSRF攻擊了或者使用者取消了授權 System.out.print("沒有獲取到響應引數"); } else { accessToken = accessTokenObj.getAccessToken(); tokenExpireIn = accessTokenObj.getExpireIn(); // 利用獲取到的accessToken 去獲取當前用的openid -------- start OpenID openIDObj = new OpenID(accessToken); openID = openIDObj.getUserOpenID(); System.err.println("===============" openID); // 獲取qq資訊 String url = "https://graph.qq.com/user/get_user_info?access_token=" accessToken "&oauth_consumer_key=101543517" "&openid=" openID "&format=json "; String json = restTemplate.getForObject(url, String.class); ObjectMapper objectMapper = new ObjectMapper(); HashMap map = objectMapper.readValue(json, HashMap.class); System.err.println(map); System.err.println(map.get("figureurl_qq_1")); // 如果使用者表沒有當前openid,那就新增使用者,如果就有就直接跳轉主介面main.jsp/ User user = new User(); user.setQqOpenId(openID); User u = userService.queryByParam(user); if (u != null) { System.out.println(u); return "main"; } else { // 新增使用者 user.setHeadImg((String) map.get("figureurl_qq_1")); user.setLoginName(UUID.randomUUID().toString()); user.setLoginPwd("123456"); userService.insert(user); return "main"; } } } catch (Exception e) { e.printStackTrace(); } return null; } }
4.5 登入頁面加入QQ登入
頁面加入
繫結事件
4.6. 修改 hosts
C:/Windows/System32/drivers/etc
修改hosts檔案,在末尾加入
127.0.0.1 javatv.cn