最近在實現QQ授權登錄,現將我的實現過程以及我的理解整理如下。以下所述如有不對之處,請指正。
官方提供的SDK有:JS,PHP,Java。我的網站使用Scala+Play搭建的,所以只能用JS SDk。
AppID:你的應用(網站)的ID。 AppKey:對你的應用的驗證。 Redirect_uri:用戶確認授權后的回調地址。(需自己設置,有防止別人盜用你的身份獲取授權用戶信息的作用) OpenID:用戶身份的較早標識。建議保存在本地并與本地創建的uid綁定,以便用戶下次登錄時可對應到其之前的身份信息,不需要重新授權,使用戶體驗一致。(獲取不到用戶的QQ號) AccessToken:表示當前用戶在此網站/應用的登錄狀態與授權信息,建議保存在本地。(相當于token,令牌) Scope:你要獲取的信息。2.準備
注冊QQ互聯開發者身份
需要去騰訊QQ互聯注冊:http://connect.qq.com/。
準備好網站
網站要基本開發完成。網站域名,Logo等都有。
創建應用
在QQ互聯管理中心創建應用。
上面的信息,創建好了之后隨時可以更改。
網站驗證
上圖中的網站地址后面的驗證,我選擇的是在自己網站首頁HTML代碼的HEAD標簽中添加:
<meta property="qc:admins" content="你的驗證信息" />
回調地址可以自己設置一個。我網站首頁是http://***z.me,因此設置的是http://***z.me/blog/test/qcback。
其他的按需填寫。
創建了應用可獲得AppID與AppKey。
3.部署測試
添加登錄入口
引入JS SDK文件:
在登錄頁面<head></head>中引入:
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8"></script>
將APPID換成你自己的APPID,REDIRECTURI換成你自己設置的回調地址。
放置QQ圖標(下面有素材地址),設置圖標超鏈接地址:
<a href="http://openapi.qzone.qq.com/oauth/show?which=ConfirmPage&display=pc&response_type=token&client_id=xxxxxxx&redirect_uri=http://xxxx.com&scope=get_user_info">
<img src="/assets/images/Connect_logo_1.png" alt="QQ授權登錄 QQ授權登錄開發 QQ授權登錄管理">
將client_id換成你的AppID,redirect_uri換成你的回調地址。 如果你要獲取其他信息或者調用其它接口,請將scope改成你需要的API名或者直接改成 all 。(API列表可查看http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8)。
我的登錄入口樣例:
官方資料:
素材與放置規范 或者這個
官方提供的登錄按鈕代碼,可直接將代碼貼到你想要放置入口的位置就行:
<span id="qqLoginBtn"></span><script type="text/javascript"> QC.Login({ btnId:"qqLoginBtn" //插入按鈕的節點id});</script>
設置回調頁面
同樣需要引入JS SDK文件,參照上面。 用JS SDK協助調用OpenAPI的get_user_info方法,獲取用戶頭像、用戶名等基礎信息。我的回調頁面代碼如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> QQConnect JSDK - redirectURI </title> <script src="/assets/javascripts/jquery.min.js"></script> <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="xxxxxxx" data-redirecturi="http://xxxx.com/xxxxx" charset="utf-8"></script> <style type="text/css"> html, body{font-size:14px; line-height:180%;} </style> </head> <body onload="getInfo()"> <p> <h3>數據傳輸中,請稍后...</h3> </p> </body></html><script type="text/javascript"> function getInfo() { if(QC.Login.check()){ QC.api("get_user_info") .success(function(s){//成功回調 QC.Login.getMe(function(openId, accessToken){ $.post(/你的后臺處理Action,{name:s.data.nickname,openid:openId,otype:1,token:accessToken},function(data,status){ if(status=="success"){ alert(s.data.nickname+"恭喜你,登錄成功!"); location.href = "/"; }else{ alert("獲取用戶信息成功!登錄失??!"); location.href = "/blog/to/login"; } }) }) }) .error(function(f){//失敗回調 alert("獲取用戶信息失??!登錄失??!"); location.href = "/blog/to/login"; }) .complete(function(c){//完成請求回調 //alert("獲取用戶信息完成!"); }); }else{ alert("請登錄!"); location.href = "/blog/to/login"; } }</script>
說明,
- 引入的`JS SDK`文件中的`data-appid` 和 `data-redirecturi` 同樣需要改為你的AppID 和回調地址。
- 授權成功后`Openid`和`token`會緩存在本地??赏ㄟ^`QC.Login.getMe(function(openId, accessToken){}` 獲取。
- 回調成功后,我這里把用戶名和openid提交給服務器,保存在本地,使用戶體驗一致。即`$.post(){}`方法,你需要換成你服務端的Action。
- 服務器處理成功后重定向到網站首頁。授權登錄結束。
為了方便用戶,用戶授權成功后,我并沒有再繼續讓用戶輸入郵箱、密碼等。如果再讓用戶輸入一遍,那和直接注冊有什么區別?那樣授權登錄基本就失去了意義。
順便貼一下我后臺處理步驟:
- //判斷openid是否存在。
- // 如果openid存在,則說明此用戶之前登錄過或者已與本地user表中的用戶綁定。寫入cookie,使用戶為登錄狀態,到此結束。
- //如果用戶openid不存在,則判斷用戶名是否存在。
- //如果用戶名不存在,則直接生成新的本地用戶,并綁定uid與openid。寫入cookie,使用戶為登錄狀態,到此結束。
- //如果用戶名存在,提醒用戶是否驗證并與之綁定。如果用戶選擇驗證,并驗證通過,則與之綁定。寫入cookie,使用戶為登錄狀態,到此結束。
- //如果用戶放棄驗證,或者驗證失敗,則生成新的本地用戶,并生成新的用戶名,綁定uid與openid。寫入cookie,使用戶為登錄狀態,到此結束。
4.提交
以上完成,自己測試通過,就可以提交騰訊審核。沒有審核通過之前只能設置幾個賬號測試,其他賬號無法授權登錄。
提交時需注意,
在顯要位置放置登錄入口。至少在你網站登錄頁面要放置。***前次提交時專門做了一個授權登錄入口并在應用信息設置里填寫了。結果騰訊以"未放置登錄入口或放置不規范"為由拒絕。
網站要基本開發完成。我第二次提交,因有未實現的頁面,被騰訊以"網站不完善"為由拒絕。然后我把未實現頁面入口撤下,審核通過。
更多網絡知識及相關網絡服務請QQ咨詢深圳網站建設公司QQ:2361277551
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
旅行用英文怎么說?在英語中,旅行是:旅行,旅程,旅行,旅游,航行。1.旅行:在……旅行;在旅行;四處旅游;走來走去;旅行。常指出國或去很遠的地方,不強調具體地點。比如:1)瑞安博士周游世界為他的書收集素材。瑞安博士周游世界為他的書收集材料。2)去環游世界,環游世界。我們旅行了800多公里。我們的行程已達800多公里。2、旅程:旅行,行程單;距離;旅行時間;旅行。一般來說,時間和距離都很長的陸地旅行...
騰訊圖書網加入書簽后怎么看書簽加在哪?打開騰訊圖書網的收藏列表,您可以直觀地看到您最近收藏的章節名稱。每次你點擊哪個章節的“書簽”,它都會顯示你的章節名稱,但它只會記錄你上一次收集的章節名稱,其他時間不會。先安裝QQ工具欄!然后登錄QQ,就可以看到書簽了!單擊以查找上一個書簽添加書簽里刪除的怎么恢復?1. 登錄QQ賬號,同步書簽檢索原來,QQ瀏覽器保存了很多書簽,但清理完瀏覽器緩存后,就不見了。不...
tom hua號稱世界第一互聯網營銷大師,到底tom hua是個什么樣的人物呢?他與美國前總統比爾·克林頓、英國首相托尼·布萊爾、勵志大師安東尼·羅賓、營銷天才杰伊·亞伯拉罕以及金正日的暢銷書作家馬克·漢森進行了交談。通過他的電子出版物和數百場現場研討會,湯姆改變了世界各地成千上萬人的生活,幫助他們在自己的互聯網業務上取得成功。湯姆曾經隨機挑選了一個觀眾來創作產品,建立網站,并在舞臺上進行推廣。短...