1. 程式人生 > >QQ互聯申請及配置

QQ互聯申請及配置

tin lvf zll pro charset 大致 nal 文字 找到

今天要說的只是針對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互聯申請及配置