ThinkPHP第三方登錄-QQ登錄
阿新 • • 發佈:2017-11-13
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登錄