您当前的位置:首页 > CMS常见问题 > 帝国cms常见问题 >

帝国cms /e/memberconnect/qq/loginend.php文件代码注释

0
<?php
require('../../class/connect.php');
require('../../class/db_sql.php');
require('../../class/q_functions.php');
require('../../member/class/user.php');
eCheckCloseMods('member');//验证是否关闭前台会员模块
eCheckCloseMods('mconnect');//验证是否关闭前台外部登录模块
$link=db_connect();
$empire=new mysqlquery();
$editor=1;
eCheckCloseMemberConnect();//验证外部登录是否开启
session_start();
require('../memberconnectfun.php');
$apptype='qq';
$appr=$empire->fetch1("select * from {$dbtbpre}enewsmember_connect_app where apptype='$apptype' and isclose=0 limit 1");
if(!$appr['id'])
{
	printerror2('请选择登录方式','../../../');
}
$app_id=$appr['appid'];//应用的APPID
$app_secret=$appr['appkey'];//应用的APPKEY
$ReturnUrlQz=eReturnDomainSiteUrl();//返回域名网站地址
$my_url=$ReturnUrlQz.'e/memberconnect/qq/loginend.php';//成功授权后的回调地址

if(!$_SESSION['state']||$_SESSION['state']!=$_REQUEST['state'])
{
	printerror2('来自的链接不存在','../../../');
}
$code=RepPostVar($_REQUEST['code']);//成功授权后返回的$_REQUEST['code']
//拼接URL
$token_url='https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&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);

//mixed json_decode(string $json [,bool $assoc=false [,int $depth=512 [,int $options=0]]])
//接受一个JSON编码的字符串并且把它转换为PHP变量
//参数
//json 待解码的json string格式的字符串。这个函数仅能处理UTF-8编码的数据。
//assoc 当该参数为TRUE时, 将返回array而非object。
//depth 指定递归深度。
//options JSON解码的掩码选项。现在有两个支持的选项, 第一个是JSON_BIGINT_AS_STRING, 用于将大整数转为字符串而非默认的float类型。第二个是JSON_OBJECT_AS_ARRAY, 与将assoc设置为TRUE有相同的效果。

	$msg=json_decode($response);
	if(isset($msg->error))
	{
		echo"<h3>error:</h3>".$msg->error;
		echo"<h3>msg  :</h3>".$msg->error_description;
		exit();
	}
}
//取得Openid
$params=array();
//void parse_str(string $str [,array &$arr])
//如果str是URL传递入的查询字符串(query string), 则将它解析为变量并设置到当前作用域。
//如果设置了第二个变量arr, 变量将会以数组元素的形式存入到这个数组, 作为替代。
//没有返回值。
parse_str($response,$params);

$params['access_token']=RepPostVar($params['access_token']);
$graph_url='https://graph.qq.com/oauth2.0/me?access_token='.$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"<h3>error:</h3>".$user->error;
	echo"<h3>msg  :</h3>".$user->error_description;
	exit();
}
$openid=$user->openid;
if(!trim($openid)||!trim($apptype))
{
	printerror2('来自的链接不存在','../../../');
}
$UserInfoApiUrl='https://graph.qq.com/user/get_user_info?oauth_consumer_key='.$app_id.'&access_token='.$params['access_token'].'&openid='.$openid;
$UserInfo=@file_get_contents($UserInfoApiUrl);
$UserInfo=json_decode($UserInfo);
if($UserInfo->ret==1002)
{
	echo"<h3>error:</h3>".$UserInfo->ret;
	echo"<h3>msg  :</h3>".$UserInfo->msg;
	exit();
}
//用户在QQ空间的昵称
//$UserInfo->nickname=str_replace('"','',$UserInfo->nickname);
//$UserInfo->nickname=str_replace("'",'',$UserInfo->nickname);

$openid=RepPostVar($openid);
$apptype=RepPostVar($apptype);
$_SESSION['openid']=$openid;
$_SESSION['apptype']=$apptype;
$_SESSION['openidkey']=MemberConnect_GetBindKey($apptype,$openid);//绑定验证符
$_SESSION['nickname']=$UserInfo->nickname;//用户在QQ空间的昵称

if( $UserInfo->figureurl_qq_2 ){
//大小为100×100像素的QQ头像URL。需要注意, 不是所有的用户都拥有QQ的100×100的头像, 但40×40像素则是一定会有。
	$_SESSION['userpic']=$UserInfo->figureurl_qq_2;
}else if( $UserInfo->figureurl_2 ){
//大小为100×100像素的QQ空间头像URL
	$_SESSION['userpic']=$UserInfo->figureurl_2;
}else{
//大小为40×40像素的QQ头像URL
	$_SESSION['userpic']=$UserInfo->figureurl_qq_1;
}

MemberConnect_DoLogin($apptype,$openid);//处理登录
db_close();
$empire=null;
?>

下一步转向分析MemberConnect_DoLogin函数代码分析

顶部中部底部