天天看點

第三方登入:QQ登入接入指南

現在網際網路應用一般都會接入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

參數介紹:

  • appid

    : 應用id
  • redirect_uri

    : 成功授權後的回調位址,必須是注冊appid時填寫的主域名下的位址,需要将url進行URLEncode
  • state

    : 必選,client端的狀态值。用于第三方應用防止CSRF攻擊,成功授權後回調時會原樣帶回。請務必嚴格按照流程檢查使用者與state參數狀态的綁定。
  • scope

    : 可選,授權清單,多個用逗号隔開
  • display

     :可選,移動端展示值可設定為mobile

在填充完對應的參數後,掃描完二維碼,會跳轉到回調位址并攜帶上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 則不會傳回此字段
 }
           

這裡簡單介紹下:

  • access_token

    : web端或者移動端授權完後所得
  • web端授權完後得到

    code

    ,後端根據 

    code

     換取 

    access_token

  • 移動端可直接得到 

    access_token

  • unionid

    ,這個參數可選,如果帶着unionid=1 請求QQ授權的API(前提是已經申請應用打通,要不然會報 

    companyid not set

     的錯誤), 會傳回 

    client_id

    openid

    unionid

    , 不帶unionid=1,則隻傳回 

    client_id

    openid

如何在後端驗證 

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

繼續閱讀