以Thinkphp3.2為基礎(chǔ)的QQ第三方認(rèn)證登錄擴(kuò)展類(lèi)

以Thinkphp3.2為基礎(chǔ)的QQ第三方認(rèn)證登錄擴(kuò)展類(lèi)

基于thinkphp3.2的qq第三方認(rèn)證登錄擴(kuò)展類(lèi)

基于Thinkphp3.2的qq第三方認(rèn)證登錄擴(kuò)展類(lèi),其實(shí)以下類(lèi)也是我從TP官網(wǎng)收集整理得來(lái)的,稍微做了一下修改和完善。

這里我將文件放存在“/Application/Common/Lib/Qqconnect.class.php”。(其實(shí)這個(gè)文件路徑根據(jù)自己喜好來(lái)放)

實(shí)例化

$Qqconnect?=?new?CommonLibQqconnect();

在__construct方法中你可以直接寫(xiě)你的app_id、app_key和回調(diào)地址
也可以根據(jù)自己的喜好,改一下代碼傳參或者寫(xiě)到配置文件。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

調(diào)用方法:

1. 在qq的登錄按鈕的方法中調(diào)用getAuthCode方法

$qqobj=new?OrgUtilQqconnect(); $qqobj->getAuthCode();

? ??

2.在回調(diào)地址的方法中調(diào)用getUsrInfo方法

$qqobj=new?OrgUtilQqconnect(); $result=$qqobj->getUsrInfo();

? ??

3.getAuthCode方法中的參數(shù)scope根據(jù)自身需要添加值get_user_info,list_album,upload_pic,do_like。

Qqconnect.class.php

<?php // +---------------------------------------------------------------------- // | Copyright (c) 2015. // +---------------------------------------------------------------------- // | Author: qiandutianxia <852997402@qq.com> //?+---------------------------------------------------------------------- namespace?CommonLib; /** ?*??qq第三方登錄認(rèn)證 ?*/ class?Qqconnect?{ ????private?static?$data; ????//APP?ID ????private?$app_id=""; ????//APP?KEY ????private?$app_key=""; ????//回調(diào)地址 ????private?$callBackUrl=""; ????//Authorization?Code ????private?$code=""; ????//access?Token ????private?$accessToken=""; ????private?$openid=""; ? ????public?function?__construct(){ ????????$this-&gt;app_id=""; ????????$this-&gt;app_key=""; ????????$this-&gt;callBackUrl="";?//你的回調(diào)地址 ????????//檢查用戶(hù)數(shù)據(jù) ????????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-&gt;app_id; ????????$param['redirect_uri']=$this-&gt;callBackUrl; ? ????????//生成唯一隨機(jī)串防CSRF攻擊 ????????$state?=?md5(uniqid(rand(),?TRUE)); ????????$_SESSION['state']=$state; ????????$param['state']=$state; ????????$param['scope']="get_user_info"; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????header("Location:".$url); ????} ? ????//通過(guò)Authorization?Code獲取Access?Token ????private?function?_getAccessToken(){ ????????$this-&gt;code=$_GET['code']; ????????$url="https://graph.qq.com/oauth2.0/token"; ????????$param['grant_type']="authorization_code"; ????????$param['client_id']=$this-&gt;app_id; ????????$param['client_secret']=$this-&gt;app_key; ????????$param['code']=$this-&gt;code; ????????$param['redirect_uri']=$this-&gt;callBackUrl; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????return?$this-&gt;getUrl($url); ????} ? ????//獲取openid ????public?function?_setOpenID(){ ????????$rzt=$this-&gt;_getAccessToken(); ????????parse_str($rzt,$data); ????????$this-&gt;accessToken=$data['access_token']; ????????$url="https://graph.qq.com/oauth2.0/me"; ????????$param['access_token']=$this-&gt;accessToken; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????$response=$this-&gt;getUrl($url); ? ????????//--------檢測(cè)錯(cuò)誤是否發(fā)生 ????????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-&gt;error)){ ????????????exit("錯(cuò)誤代碼:100007"); ????????} ????????? ????????return?$user-&gt;openid; ????} ? ? ????//獲取信息 ????public?function?getUserInfo(){ ????????if($_GET['state']?!=?$_SESSION['state']){ ????????????exit("錯(cuò)誤代碼:300001"); ????????} ? ????????$openid=$this-&gt;_setOpenID(); ????????if(empty($openid)){ ????????????return?false; ????????} ????????session('openid',$openid); ????????$url="https://graph.qq.com/user/get_user_info"; ????????$param['access_token']=$this-&gt;accessToken; ????????$param['oauth_consumer_key']=$this-&gt;app_id; ????????$param['openid']=$openid; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????$rzt=$this-&gt;getUrl($url); ????????return?$rzt; ????} ? ????public?function?getOpenId(){ ????????if($_GET['state']?!=?$_SESSION['state']){ ????????????exit("錯(cuò)誤代碼:300001"); ????????} ????????$rzt=$this-&gt;_getAccessToken(); ????????parse_str($rzt,$data); ????????$this-&gt;accessToken=$data['access_token']; ????????$url="https://graph.qq.com/oauth2.0/me"; ????????$param['access_token']=$this-&gt;accessToken; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????$response=$this-&gt;getUrl($url); ? ????????//--------檢測(cè)錯(cuò)誤是否發(fā)生 ????????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-&gt;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-&gt;app_id; ????????$param['access_token']=$accessToken; ????????$param['openid']=$openid; ????????$param?=http_build_query($param,'','&amp;'); ????????$url=$url."?".$param; ????????$rzt=$this-&gt;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該文件主要包含兩個(gè)方式

點(diǎn)擊QQ登陸的時(shí)候訪(fǎng)問(wèn)的地址

public?function?qq_login(){ ????????$Qqconnect?=?new?CommonLibQqconnect(); ????????$Qqconnect-&gt;getAuthCode(); ????}

? ?回調(diào)訪(fǎng)問(wèn)地址

public?function?callback(){ ????????$Qqconnect?=?new?CommonLibQqconnect(); ????????$openid?=?$Qqconnect-&gt;getOpenId(); ????????$qq?=?session('qq'); ? ? ? ????????$Member?=?M('Member'); ????????$map?=?array(); ????????$map['openid']?=?$openid; ????????$userInfo?=?$Member-&gt;where($map)-&gt;find(); ? ? ????????if(!empty($userInfo)){ ????????????$this-&gt;success('登陸成功!',U('Member/index')); ????????}else{ ????????????$Qqconnect?=?new?CommonLibQqconnect(); ????????????$userInfo?=?$Qqconnect-&gt;getInfo($qq['openid'],$qq['access_token']); ????????????print_r($userInfo); ????????????exit; ????}

以上只是簡(jiǎn)單的示例,大家可以參考一下再進(jìn)行修改和完善。如有不明白的地方可以留言討論。

推薦教程:《PHP視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享