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

因爲樓主是web開發方向,因此這裏就介紹一下web接入qq登陸的方法,以及和app的qq登陸打通的方法php


0、前提web

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

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


一、去QQ互聯申請應用(騰訊有不少個平臺,網頁的QQ登陸必定是在QQ互聯申請,App的是在騰訊開放平臺)測試

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


1.1 成爲開發者,並用開發者帳號登陸(若是以後要和在騰訊開放平臺申請的App的QQ登陸打通的話,請使用相同的開發者帳號登陸)this


1.2 選擇建立網頁應用code


1.3 填寫基本信息blog

此處填寫的網站名稱必須與工信部域名備案查詢頁面的「網站名稱」一欄填寫同樣的,不然將沒法經過QQ互聯的審覈
token


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天)


二、經過審覈以後,能獲取到app id和app key

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

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

「callback」須要和在QQ互聯填寫的網站回調域保持一致(QQ互聯中,若是填寫的是兩個環境的,那麼此處根據環境不一樣填寫一個回調地址)

兩邊回調地址填寫的不一樣會形成調不通


三、若是網站的QQ受權回調已經調通,須要打通App的QQ登陸和網站的QQ登陸,那麼請接着往下作

3.1 如圖中所需資料,發送郵件給 connect@qq.com

網站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
相關文章
相關標籤/搜索