Thinkphp3.2 に基づく QQ サードパーティ認証ログイン拡張クラス
拡張クラス
#QQ Thinkphp3.2 に基づくサードパーティ認証ログイン拡張クラス
Instantiation
$Qqconnect = new \Common\Lib\Qqconnect();
ログイン後にコピー
独自の設定に従って、パラメータを渡すようにコードを変更したり、設定ファイルにコードを書き込んだりすることもできます。
呼び出しメソッド:
1. qq$qqobj=new \Org\Util\Qqconnect(); $qqobj->getAuthCode();
ログイン後にコピー
$qqobj=new \Org\Util\Qqconnect(); $result=$qqobj->getUsrInfo();
ログイン後にコピー
#Qqconnect.class.php
<?php // +---------------------------------------------------------------------- // | Copyright (c) 2015. // +---------------------------------------------------------------------- // | Author: qiandutianxia <852997402@qq.com> // +---------------------------------------------------------------------- namespace Common\Lib; /** * qq第三方登录认证 */ class Qqconnect { private static $data; //APP ID private $app_id=""; //APP KEY private $app_key=""; //回调地址 private $callBackUrl=""; //Authorization Code private $code=""; //access Token private $accessToken=""; private $openid=""; public function __construct(){ $this->app_id=""; $this->app_key=""; $this->callBackUrl=""; //你的回调地址 //检查用户数据 if(empty($_SESSION['QC_userData'])){ self::$data = array(); }else{ self::$data = $_SESSION['QC_userData']; } } //获取Authorization Code public function getAuthCode(){ $url="https://graph.qq.com/oauth2.0/authorize"; $param['response_type']="code"; $param['client_id']=$this->app_id; $param['redirect_uri']=$this->callBackUrl; //生成唯一随机串防CSRF攻击 $state = md5(uniqid(rand(), TRUE)); $_SESSION['state']=$state; $param['state']=$state; $param['scope']="get_user_info"; $param =http_build_query($param,'','&'); $url=$url."?".$param; header("Location:".$url); } //通过Authorization Code获取Access Token private function _getAccessToken(){ $this->code=$_GET['code']; $url="https://graph.qq.com/oauth2.0/token"; $param['grant_type']="authorization_code"; $param['client_id']=$this->app_id; $param['client_secret']=$this->app_key; $param['code']=$this->code; $param['redirect_uri']=$this->callBackUrl; $param =http_build_query($param,'','&'); $url=$url."?".$param; return $this->getUrl($url); } //获取openid public function _setOpenID(){ $rzt=$this->_getAccessToken(); parse_str($rzt,$data); $this->accessToken=$data['access_token']; $url="https://graph.qq.com/oauth2.0/me"; $param['access_token']=$this->accessToken; $param =http_build_query($param,'','&'); $url=$url."?".$param; $response=$this->getUrl($url); //--------检测错误是否发生 if(strpos($response, "callback") !== false){ $lpos = strpos($response, "("); $rpos = strrpos($response, ")"); $response = substr($response, $lpos + 1, $rpos - $lpos -1); } $user = json_decode($response); if(isset($user->error)){ exit("错误代码:100007"); } return $user->openid; } //获取信息 public function getUserInfo(){ if($_GET['state'] != $_SESSION['state']){ exit("错误代码:300001"); } $openid=$this->_setOpenID(); if(empty($openid)){ return false; } session('openid',$openid); $url="https://graph.qq.com/user/get_user_info"; $param['access_token']=$this->accessToken; $param['oauth_consumer_key']=$this->app_id; $param['openid']=$openid; $param =http_build_query($param,'','&'); $url=$url."?".$param; $rzt=$this->getUrl($url); return $rzt; } public function getOpenId(){ if($_GET['state'] != $_SESSION['state']){ exit("错误代码:300001"); } $rzt=$this->_getAccessToken(); parse_str($rzt,$data); $this->accessToken=$data['access_token']; $url="https://graph.qq.com/oauth2.0/me"; $param['access_token']=$this->accessToken; $param =http_build_query($param,'','&'); $url=$url."?".$param; $response=$this->getUrl($url); //--------检测错误是否发生 if(strpos($response, "callback") !== false){ $lpos = strpos($response, "("); $rpos = strrpos($response, ")"); $response = substr($response, $lpos + 1, $rpos - $lpos -1); } $info = object_array(json_decode($response)); $qq['access_token'] = $this->accessToken; $qq['openid'] = $info['openid']; session('qq',$qq); return $info['openid']; } public function getInfo($openid='',$accessToken=''){ $url="https://graph.qq.com/user/get_user_info"; $param['oauth_consumer_key']=$this->app_id; $param['access_token']=$accessToken; $param['openid']=$openid; $param =http_build_query($param,'','&'); $url=$url."?".$param; $rzt=$this->getUrl($url); $info = object_array(json_decode($rzt)); return $info; } //CURL GET private function getUrl($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); if (!empty($options)){ curl_setopt_array($ch, $options); } $data = curl_exec($ch); curl_close($ch); return $data; } //CURL POST private function postUrl($url,$post_data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); ob_start(); curl_exec($ch); $result = ob_get_contents(); ob_end_clean(); return $result; } }
ログイン後にコピー
以下はコントローラーのコードです
LoginController.class.phpこのファイルには主に 2 つのメソッドが含まれています
QQ ログインをクリックしたときにアクセスされるアドレス
public function qq_login(){ $Qqconnect = new \Common\Lib\Qqconnect(); $Qqconnect->getAuthCode(); }
ログイン後にコピー
コールバック アクセス アドレス
public function callback(){ $Qqconnect = new \Common\Lib\Qqconnect(); $openid = $Qqconnect->getOpenId(); $qq = session('qq'); $Member = M('Member'); $map = array(); $map['openid'] = $openid; $userInfo = $Member->where($map)->find(); if(!empty($userInfo)){ $this->success('登陆成功!',U('Member/index')); }else{ $Qqconnect = new \Common\Lib\Qqconnect(); $userInfo = $Qqconnect->getInfo($qq['openid'],$qq['access_token']); print_r($userInfo); exit; }
ログイン後にコピー
上記は簡単な例です。修正や改善の参考にしてください。わからないことがあれば、メッセージを残してディスカッションすることができます。
推奨チュートリアル: 「
PHP ビデオ チュートリアル以上がThinkphp3.2 に基づく QQ サードパーティ認証ログイン拡張クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
アサシンのクリードシャドウズ:シーシェルリドルソリューション
3週間前
By DDD
Windows11 KB5054979の新しいものと更新の問題を修正する方法
2週間前
By DDD
Atomfallのクレーンコントロールキーカードを見つける場所
3週間前
By DDD
R.E.P.O.で節約説明した(そしてファイルを保存)
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンクリードシャドウ - 鍛冶屋を見つけて武器と鎧のカスタマイズを解除する方法
4週間前
By DDD

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7563
15


CakePHP チュートリアル
1385
52


Steamのアカウント名の形式は何ですか
84
11


NYTの接続はヒントと回答です
28
99

