<?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; ?>