現在網際網路應用一般都會接入QQ登入。但是在接入QQ登入的時候就有點犯暈了。因為擺在他們面前的有2個平台。 一個是 騰訊開放平台,一個是 QQ互聯。
QQ互聯(QQ開放平台)
如果隻是單純的想要QQ授權登入、分享,而不需要進入騰訊應用寶市場的,那選擇QQ互聯就可以了,畢竟能滿足需求。
騰訊開放平台(應用開放平台)
突然就改成應用開放平台
這裡的選擇就多了,應用開放平台除了支援基本的資訊擷取,分享,還可以支援進入應用寶市場等。
這裡有要強調的,不管是在QQ互聯 ,還是騰訊開放平台,都要注意以下細節:
- 同一個 APP 的在不同系統(iOS, Android),在申請的時候,最好以一個應用來申請,這樣子最後隻會有一個appid。申請成多個應用會導緻需要維護多個appid。
-
申請完應用後,各應用間預設是不打通。 如果系統需要各應用間賬号打通,需要發一個【應用打通】郵件到到QQ互聯平台,位址:
http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%8D%E9%A6%88, 【應用打通】表格可以下載下傳,在填齊資料後,附帶公司的營業執照副本電子件,發送到 [email protected] 郵箱。申請通過後,使用者在同一個公司下不同的應用使用QQ登入時,就會有統一的unionid。
如何擷取 code
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=appid&redirect_uri=redirect_uri&scope=scope&display=display
參數介紹:
-
: 應用idappid
-
: 成功授權後的回調位址,必須是注冊appid時填寫的主域名下的位址,需要将url進行URLEncoderedirect_uri
-
: 必選,client端的狀态值。用于第三方應用防止CSRF攻擊,成功授權後回調時會原樣帶回。請務必嚴格按照流程檢查使用者與state參數狀态的綁定。state
-
: 可選,授權清單,多個用逗号隔開scope
-
:可選,移動端展示值可設定為mobiledisplay
在填充完對應的參數後,掃描完二維碼,會跳轉到回調位址并攜帶上code。位址類似于:
https://www.mimeay.cc?code=xxxxx
如何擷取 access_token
官方文檔其實描述的很詳細了:http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token#Step1.EF.BC.9A.E8.8E.B7.E5.8F.96AuthorizationCode
如何擷取Unionid
如何擷取openid
Https 請求方式:
Get https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
傳回的結構如下:
{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unioid":"YOUR_UNIONID" // 請求參數不含 unionid=1 則不會傳回此字段
}
這裡簡單介紹下:
-
: web端或者移動端授權完後所得access_token
- web端授權完後得到
,後端根據code
換取code
access_token
- 移動端可直接得到
access_token
-
,這個參數可選,如果帶着unionid=1 請求QQ授權的API(前提是已經申請應用打通,要不然會報unionid
的錯誤), 會傳回companyid not set
,client_id
,openid
, 不帶unionid=1,則隻傳回unionid
,client_id
openid
如何在後端驗證 access_token
的合法性
access_token
前面提到移動端可以直接得到
access_token
,帶着 access_token 去請求 QQ互聯提供的API, 是可以擷取到使用者資訊的。 請注意,在unionid落庫之前,請先校驗是否是合法的授權。
在換取 unioid 時,QQ互聯的 API 是有傳回
client_id
的, 其實也就是appid,我們隻要校驗背景的配置是否存在此
appid
, 就能驗證
access_token
的合法性了
如何擷取使用者資料
官方文檔基本上都有了。包括通路基本資訊, 通路使用者QQ會員資訊
API清單
并不是帶着
access_token
就一定能擷取到所有資訊,這取決于前面 scope 授權的情況, 如
scope
授權清單不含
list_album
, 則在請求
ttps://graph.qq.com/photo/list_album
時就拿不到相冊清單。
文檔參考
- 授權文檔:http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_server-side
- API 文檔 :http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8