日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php获取qzonetoken,QQ一键登录实现

發布時間:2023/12/4 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php获取qzonetoken,QQ一键登录实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,登錄QQ互聯平臺獲取QQ一鍵登錄所需的Appkey和Appsecret。

2、下載QQ登錄用的SDK軟件包,可以上QQ互聯官方網下載。這里用的是Connect_PHP_SDK_for_OAuth2_V1.1.zip

3、在登錄頁面放置QQ登錄的圖標。

functiontoQzoneLogin()

{

varA=window.open("oauth/qq_login.php","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizab

le=1,status=1,titlebar=0,toolbar=0,location=1");

}

4、修改comm/config.php中的4個變量

$_SESSION["appid"];

$_SESSION["appkey"];

$_SESSION["callback"];

$_SESSION["scope"];

5、以下是代碼的【實現】

oauth/qq_login.php

require_once("../comm/config.php");

function qq_login($appid,$scope, $callback)

{

$_SESSION['state'] = md5(uniqid(rand(),TRUE)); //CSRF protection

. $appid ."&redirect_uri=" . urlencode($callback)

. "&state=" .$_SESSION['state']

. "&scope=".$scope;

header("Location:$login_url");

}

//用戶點擊qq登錄按鈕調用此函數

qq_login($_SESSION["appid"],$_SESSION["scope"], $_SESSION["callback"]);

?>

//應用的APPID

$app_id = "YOUR_APP_ID";

//應用的APPKEY

$app_secret = "YOUR_APP_KEY";

//成功授權后的回調地址

$my_url = "YOUR_REDIRECT_URL";

//Step1:獲取Authorization Code

session_start();

$code = $_REQUEST["code"];

if(empty($code))

{

//state參數用于防止CSRF***,成功授權后回調時會原樣帶回

$_SESSION['state'] =md5(uniqid(rand(), TRUE));

//拼接URL

. $app_id. "&redirect_uri=" . urlencode($my_url) . "&state="

.$_SESSION['state'];

echo("");

}

//Step2:通過Authorization Code獲取Access Token

if($_REQUEST['state'] == $_SESSION['state'])

{

//拼接URL

. "client_id=" .$app_id . "&redirect_uri=" . urlencode($my_url)

."&client_secret=" . $app_secret . "&code=" . $code;

$response =file_get_contents($token_url);

if (strpos($response,"callback") !== false)

{

$lpos =strpos($response, "(");

$rpos =strrpos($response, ")");

$response ?=substr($response, $lpos + 1, $rpos - $lpos -1);

$msg =json_decode($response);

if(isset($msg->error))

{

echo "

error:

" . $msg->error;

echo "

msg ?:

" .$msg->error_description;

exit;

}

}

//Step3:使用Access Token來獲取用戶的OpenID

$params = array();

parse_str($response, $params);

$params['access_token'];

$str ?=file_get_contents($graph_url);

if (strpos($str,"callback") !== false)

{

$lpos =strpos($str, "(");

$rpos =strrpos($str, ")");

$str ?=substr($str, $lpos + 1, $rpos - $lpos -1);

}

$user = json_decode($str);

if (isset($user->error))

{

echo"

error:

" . $user->error;

echo"

msg ?:

" .$user->error_description;

exit;

}

echo("Hello " .$user->openid);

}

else

{

echo("The state does notmatch. You may be a victim of CSRF.");

}

?>

以上是寫好的接口,實際上我們只需要在回調頁面callback.php修改就可以。

require_once("../config.php");

require_once("../qqConnectAPI.php");

require '../config.inc.php';

require '../uc_client/client.php';

require '../api/uc.php';

$qc = new QC();

$acs=$qc->qq_callback();

global $SESSION;

$SESSION->acs=$acs;

//echo $SESSION->acs."
";

$oid = $qc->get_openid();

$SESSION->oid=$oid;

//echo $SESSION->oid."
";

$qc = new QC($acs,$oid);

$uinfo = $qc->get_user_info();

//var_dump($uinfo);

$SESSION->nickname=$uinfo['nickname'];

$username=$SESSION->nickname;

$link=@mysql_connect("localhost","root","root");

mysql_select_db("moodle");

mysql_query('setnames utf8');

$sql1="select* from mdl_user where username='".$uinfo['nickname']."'";

echo $sql1;

$res1=mysql_query($sql1);

$result=mysql_num_rows($res1);

echo $result;

if($result==0){

$sql="insert into mdl_user(id,auth,username,deleted,mnethostid,firstname,openid) values(null,'manual','".$uinfo['nickname']."',0,1,'".$uinfo['nickname']."','$oid')";

$res=mysql_query($sql);

$mysqli=newmysqli("localhost","root","root","discuz");

$mysqli->query("setnames utf8");

$sql2="insertinto cdb_uc_members (uid,username) values(null,'".$uinfo['nickname']."')";

$mysqli->query($sql2);

}

$user =$DB->get_record('user', array('openid' =>$oid, 'deleted' => 0,'mnethostid' => $CFG->mnet_localhost_id));

//var_dump($user);

$userid=$user->id;

//$password=$user->password;

// echo$password;

//echo$uid;

$mysqli=newmysqli("localhost","root","root","discuz");

$mysqli->query("setnames utf8");

$sql3="select* from cdb_uc_members where username='".$uinfo['nickname']."'";

$res= $mysqli->query($sql3);

$row=mysqli_fetch_assoc($res);

$uid=$row['uid'];

$result2= mysqli_num_rows($res);

if($result2 != 0) {

$username=$uinfo['nickname'];

//list($uid, $username2,$password2, $email)= uc_user_login($username,$password=null);

//ucenter表有此用戶,設置Cookie,登錄成功,并通知其它應用同步登錄

setcookie('Mdl_auth', uc_authcode($uid."\t".$username,'ENCODE'));

//生成同步登錄的代碼

$ucsynlogin = uc_user_synlogin($uid);

echo $ucsynlogin.'';

}

//add_to_log(SITEID,'auth_qq', '', '', $username . '/' . $useremail . '/' . $userid);

//$user =authenticate_user_login($username,$password);

//var_dump($user);

complete_user_login($user);

echo "

window.opener.location.reload();

window.close();

";

?>

總結

以上是生活随笔為你收集整理的php获取qzonetoken,QQ一键登录实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。