【第三方登錄】第三方登錄 Part1 —— QQ登錄(2016-09最新版)

由於樓主是web開發方向,所以這裏就介紹一下web接入qq登錄的方法,以及和app的qq登錄打通的方法


0、前提

已經有一個在工信部備案過的域名的網站,具體可以查詢工信部的備案頁面(請注意這裏的信息很重要,會影響之後qq登錄申請時的資料填寫)

工信部查詢域名備案的網址:http://www.miitbeian.gov.cn/publish/query/indexFirst.action


1、去QQ互聯申請應用(騰訊有很多個平臺,網頁的QQ登錄一定是在QQ互聯申請,App的是在騰訊開放平臺)

QQ互聯的網址:https://connect.qq.com/


1.1 成爲開發者,並用開發者賬號登錄(如果之後要和在騰訊開放平臺申請的App的QQ登錄打通的話,請使用相同的開發者賬號登錄)


1.2 選擇創建網頁應用


1.3 填寫基本信息

此處填寫的網站名稱必須與工信部域名備案查詢頁面的“網站名稱”一欄填寫一樣的,否則將無法通過QQ互聯的審覈


1.4 完善資料

網站域名需要填寫帶http://或者https://的完整域名


網站回調域,需要填寫完整的回調地址,

比如你的回調頁面是放在 /網站根目錄/qq_oauth/callback.php

那麼網站回調域需要填寫 http://域名/qq_oauth/callback.php

在QQ互聯改版之前是支持填寫多回調域的,比如有一個測試環境 http://dev.example.com 和一個正式環境 http://www.example.com

那麼網站回調域可以填寫爲 http://www.example.com/qq_oauth/callback.php;http://dev.example.com/qq_oauth/callback.php

兩者用分號分隔開,新版的QQ互聯暫時沒有測試過這個功能


提供方建議和工信部域名備案查詢頁面的“主辦單位名稱”一欄填寫一樣的


網站備案號必須與工信部域名備案查詢頁面的“網站備案/許可編號”一欄填寫一樣的


圖標可以不傳


1.5 完成創建,等待QQ互聯的審覈(這個審覈如果資料和工信部備案的填寫的一致,那麼還是挺快就能獲得通過的,樓主的經驗是1-2天)


2、通過審覈之後,能獲取到app id和app key

這時候,使用官方的sdk,就能快速完成開發(樓主用的是php的sdk,第三方登錄和獲取用戶信息,親測可用)

這裏要提醒的是,配置文件 /API/comm/inc.php 中

“callback”需要和在QQ互聯填寫的網站回調域保持一致(QQ互聯中,如果填寫的是兩個環境的,那麼此處根據環境不同填寫一個回調地址)

兩邊回調地址填寫的不同會造成調不通


3、如果網站的QQ授權回調已經調通,需要打通App的QQ登錄和網站的QQ登錄,那麼請接着往下做

3.1 如圖中所需資料,發送郵件給 [email protected]

網站ICP備案信息截圖即可用工信部備案信息查詢頁面的截圖


3.2 耐心等待回信(這個要看運氣了,快的話當天就能收到回覆,否則可能需要7天)


3.3 收到回信,爲打通App和網站的QQ登錄修改代碼


網站和App的App Id和App Key並未改變,通過兩套獲取到的openid也是不同的,只是通過獲取openid時多加一個 unionid=1 的參數,QQ將會多返回unionid,打通的網站和app的unionid是一致的(像微信那樣了),需要根據unionid是否一致來判斷網站來的用戶是否和app來的用戶爲同一個QQ賬戶


如果是使用官方的php的sdk包的,可以參照如下操作


在callback時候,原來會$qc->get_openid(); 獲取openid,這時候改成同時獲取openid和unionid


3.3.1 在/API/class/Oauth.class.php中找到public function get_openid()

//-------請求參數列表
        $keysArr = array(
            "access_token" => $this->recorder->read("access_token"),
			"unionid"	=>	1
        );

請求參數列表增加第二行


//------記錄openid
        $this->recorder->write("openid", $user->openid);
        $this->recorder->write("unionid", $user->unionid);

多增加一條記錄


return Array(
			'openid'	=>	$user->openid,
			'unionid'	=>	$user->unionid
		);
        // return $user->openid;

返回從僅返回openid,改爲同時返回openid和unionid


3.3.2 callback文件中,同時接收openid和unionid


$open_id_result = $qc->get_openid();

$open_id = $open_id_result['openid'];
$union_id = $open_id_result['unionid'];


這樣就完成了web端的打通的工作(當然app或者服務端也需要做unionid的相應改動)



補充:

關於app如何打通的問題,這裏做個介紹,qq官方的app的sdk是隻能獲取到access_token和openid的,而不能獲取到unionid

所以app在獲取了access_token之後,需要再發送一個請求到以下地址就可獲取到unionid(綁定了的app和web,app的access_token和web的access_token都可以獲取到相同的unionid,樓主親測有效有效哦)

https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1

發佈了96 篇原創文章 · 獲贊 17 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章