1. 程式人生 > >ThinkPHP第三方登錄-QQ登錄

ThinkPHP第三方登錄-QQ登錄

esp tp3.2 mage control 鏈接地址 認證通過 htm quest user

參考:思夢教育

1、QQ互聯(鏈接地址:https://connect.qq.com/index.html),進行開發者認證(未認證的情況下),有公司和個人兩種認證方式,個人開發者選擇個人認證就好,準備好身份證電子版。認證界面如圖一,認證不做贅述。

技術分享

(圖一)

2、認證通過界面如圖二,認證完,我們將創建應用如圖三,選擇創建網站應用,填寫好個人信息如圖四。

技術分享

(圖二)

技術分享

(圖三)

技術分享

(圖四)

3、應用創建好後,會有大約2天的認證時間,認證通過的情況下,可在應用管理下查看。成功創建的應用如圖五

技術分享技術分享技術分享

(圖五)

4、代碼部分,tp3.2版本,新建QqController.class.php,名稱自擬,但是需要符合你的回調地址。

<?php
/*
 * P:QQ登錄
 * U:shenlin
 * T:2017-10-18
 * Q:297760026
 * */
namespace Home\Controller;
use Think\Controller;
class QqController extends Controller{
    //發起請求
    public function qqsend(){
        //參數
        $url = "https://graph.qq.com/oauth2.0/authorize";
        $param[‘response_type‘] = "code";
        $param[‘client_id‘]="你的appid";
        $param[‘redirect_uri‘] ="你的回調地址";
        $param[‘scope‘] ="get_user_info";
        //-------生成唯一隨機串防CSRF攻擊
        $param[‘state‘] = md5(uniqid(rand(), TRUE));
        $_SESSION[‘state‘] = $param[‘state‘];

        //拼接url
        $param = http_build_query($param,"","&");
        $url = $url."?".$param;
        header("Location:".$url);
    }
    //回調
    public function qqback(){
        $code = I(‘get.code‘);
        $state = I(‘get.state‘);
        if($code && $state == $_SESSION[‘state‘]){
            //獲取access_token
            $res = $this->getAccessToken($code,"你的appid","你的appkey");
            dump($res);
            exit();
            parse_str($res,$data);
            $access_token = $data[‘access_token‘];
            $url  = "https://graph.qq.com/oauth2.0/me?access_token = $access_token";
            $open_res = $this->httpsRequest($url);
            if(strpos($open_res,"callback") !== false){
                $lpos = strpos($open_res,"(");
                $rpos = strrpos($open_res,")");
                $open_res = substr($open_res,$lpos + 1 ,$rpos - $lpos - 1);
            }
            $user = json_decode($open_res);
            $open_id = $user->openid;
            $url = "https://graph.qq.com/user/get_user_info?access_token=$access_token&oauth_consumer_key=你的appid&open_id = $open_id";
            $user_info = $this->httpsRequest($url);
            //輸出qq用戶信息
            dump($user_info);
        }
        $this->display();
    }
    //通過Authorization Code獲取Access Token
    public function getAccessToken($code,$app_id,$app_key){
        $url="https://graph.qq.com/oauth2.0/token";
        $param[‘grant_type‘]="authorization_code";
        $param[‘client_id‘]=$app_id;
        $param[‘client_secret‘]=$app_key;
        $param[‘code‘]=$code;
        $param[‘redirect_uri‘]="你的回調地址";
        $param =http_build_query($param,"","&");
        $url=$url."?".$param;
        return $this->httpsRequest($url);
    }
    //httpsRequest
    public function httpsRequest($post_url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$post_url);//要訪問的地址
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//執行結果是否被返回,0是返回,1是不返回
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);//設置超時
        $res = curl_exec($ch);//執行並獲取數據
       	return $res;
        curl_close($ch);
    }

}

  

ThinkPHP第三方登錄-QQ登錄