由於樓主是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