QQ互聯申請及配置
今天要說的只是針對QQ互聯的操作,其他的互聯請參考相關網站。
第一步:需要申請API接口的兩碼
自行登錄QQ互聯https://connect.qq.com/index.html,然後按照要求申請就OK啦。
過幾天你會收到一封審核通過的郵件:
第二步:互聯開始
首先假設我的網站有一個登陸按鈕,那麽這個按鈕指向哪裏呢?
所以第一個就是我們需要找的登陸,這裏的話我是放在common控制器下的loginqq方法,所以我的按鈕寫的是:
<a href="{:U(‘Common/loginqq‘,array("type"=>"qq"))}" class="from" >QQ訪問</a>
需要註意的是:你網站第一次申請的時候,請用QQ的圖標來代替文字,不然申請不通過的
對應的函數代碼:
//QQ登陸 public function loginqq($type = null) { empty($type) && $this->error(‘參數錯誤‘); import(‘Org.ThinkSDK.ThinkOauth‘); $sns = ThinkOauth::getInstance($type); redirect($sns->getRequestCodeURL()); }
因為需要第三方類庫,所以在頭部需要use一下 use ThinkOauth;
第三方類庫請到上一篇文章或者下載區找。
第三步:設置配置參數
因為你的參數需要傳遞給服務器,這樣才能遠程獲取返回的token,用openid和token才能拿到用戶的信息。
<?php /** * 等三方登陸插件配置 * @date: 2017年12月20日 * @author: yumaster * @return: */ $SITE_URL = "http://yumaster.net/"; define(‘URL_CALLBACK‘, "" . $SITE_URL . "Home/Common/callback?type="); return array( #騰訊QQ登錄配置 ‘THINK_SDK_QQ‘ => array( ‘APP_KEY‘ => ‘101445751‘, # APP ID ‘APP_SECRET‘ => ‘85df045b8b38bbad049a9874337ee5b6‘, # KEY ‘CALLBACK‘ => URL_CALLBACK . ‘qq‘, ), ), );
所以這個配置是需要自己在網站添加的,我的做法是單獨的sdk.php,然後再config.php中 ‘LOAD_EXT_CONFIG‘ 加載進來的
需要註意的是:
1.你的網站要填寫正確的回調地址,保證要和QQ互聯上填寫的一樣,修改其中一個之後,另一個也要及時修改。否則很難找到這個原因
2.填寫在QQ互聯的地址是不需要填寫參數的,所以這裏後面的 ?type=qq 在QQ互聯的後臺是沒有的
3.在傳遞參數的時候是不允許 yumaster.net/Home/Common/callback/type/qq 這樣的寫法是錯的,需要用 ? 來實現
到這裏之後,我們可以在類庫中打印出來查看我們的信息是否填寫正確,在 ThinkPHP/Library/Org/ThinkSDK/ThinkOauth.class.php 的169行添加:
dump($params);die;
來打印自己的參數是否傳遞進去,實際上可以不用操作,直接看是不是報錯就可以了。
第四步:增加回調函數
在上面我們寫的回調地址對應的寫上回調方法:common/callback
//QQ登陸回調 public function callback($type = null, $code = null) { //防止亂碼 header("Content-type: text/html; charset=utf-8"); (empty($type) || empty($code)) && $this->error(‘參數錯誤‘); import(‘Org.ThinkSDK.ThinkOauth‘); $sns = ThinkOauth::getInstance($type); $extend = null; //騰訊微博 if ($type == ‘tencent‘) { $extend = array(‘openid‘ => $this->_get(‘openid‘), ‘openkey‘ => $this->_get(‘openkey‘)); } $tokenArr = $sns->getAccessToken($code, $extend); /** * $tokenArr 返回的參數 * array(4) { * ["access_token"] => string(32) "EF689CF1CEC547B2C3EA7F1367A3D1E8" * ["expires_in"] => string(7) "7776000" * ["refresh_token"] => string(32) "1DA94062299F40B1B7686EDB18D3CCE5" * ["openid"] => string(32) "A100C2E7A02D9AE2E2AD72442275C34C" 用戶唯一識別標誌 *} */ $openid = $tokenArr[‘openid‘]; $token = $tokenArr[‘access_token‘]; if ($openid) { $field = strtolower($type); $data = $sns->call(‘user/get_user_info‘); //dump($data);die; /** * $data 返回參數 * array(18) { * ["ret"] => int(0) * ["msg"] => string(0) "" * ["is_lost"] => int(0) * ["nickname"] => string(21) "土倫" 昵稱 * ["gender"] => string(3) "男" 性別 * ["province"] => string(0) "" * ["city"] => string(0) "" * ["year"] => string(4) "1996" 出生年 * ["figureurl"] => string(73) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/30" 空間頭像 * ["figureurl_1"] => string(73) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/50" * ["figureurl_2"] => string(74) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/100" * ["figureurl_qq_1"] => string(69) "http://q.qlogo.cn/qqapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/40" QQ頭像 * ["figureurl_qq_2"] => string(70) "http://q.qlogo.cn/qqapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/100" * ["is_yellow_vip"] => string(1) "0" * ["vip"] => string(1) "0" * ["yellow_vip_level"] => string(1) "0" * ["level"] => string(1) "0" * ["is_yellow_year_vip"] => string(1) "0" *} */ $num = M(‘qq‘)->where(array("q_img"=>$data["figureurl_qq_2"]))->getField("q_num"); if($num){ $txt = array( "q_name"=>$data[‘nickname‘], "q_img"=>$data["figureurl_qq_2"], "q_ip"=>get_client_ip(), "q_time"=>time(), "q_num"=>1, ); M(‘qq‘)->add($data); }else{ M(‘qq‘)->where(array("q_img"=>$data["figureurl_qq_2"]))->setInc("q_num"); } session("nickname",$data["nickname"]); session("nickimg",$data["figureurl_qq_2"]); $this->redirect(‘Index/index‘); } else { echo "<script>alert(‘系統出錯;請稍後再試!‘);document.location.href=‘" . __APP__ . "‘;</script>"; } }
在回調的時候我們可以寫更多的操作和驗證,這裏我就簡單的判斷用戶是不是在數據庫中,在就訪問次數+1,不在就存入數據庫。大致上就是這些了。
show~~咻咻咻~DuangDuang~~
QQ互聯申請及配置