$url = "https://graph.qq.com/oauth2.0/me?access_token=" . $k["access_token"]; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, 0); //设置header curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_URL, $url); $mo = curl_exec($ch); curl_close($ch); $json = substr($mo, 10, -3); $user = json_decode($json); $openid = $user->openid; require '../global.php'; //获取用户资料. $uinfo = OpenSDK_Tencent_SNS2::call('user/get_user_info', array()); $nick = $uinfo['nickname'] . '_' . rand(10000, 99999); //QQ昵称 $photo = $uinfo['figureurl_1']; //QQ头像 //$sex=$uinfo['gender'];//性别 //$tqq=OpenSDK_Tencent_SNS2::call('user/get_info',array(),'GET'); //$tqqemail=$tqq['data']['email']; //$emailarr = explode("@",$tqqemail); //$tqqunm=$emailarr[0];//获取QQ号码,貌似没权限获取 //$openid=$tqq['data']['openid'];//qq用户唯一识别码openid //$tqqname=$tqq['data']['name'].'_'.rand(10000,99999);//qq微博名称,英文或数字,为防止重名, //var_dump($tqq); //echo "<br>昵称是<br>".$nick; //echo "<br>图像是<br>".$photo; //echo "<br>openid是<br>".$openid;
/** * 用QQ账户登录 */ public function public_qq_login() { $config = C('sns', 'qq'); OpenSDK_Tencent_SNS2::init($config['app_key'], $config['app_secret']); Loader::session(); if (isset($_GET['callback']) && trim($_GET['callback'])) { $access_token = $sdk->getAccessToken($_REQUEST["oauth_token"], $_SESSION["secret"], $_REQUEST["oauth_vericode"]); $me = $sdk->get_user_info($access_token["oauth_token"], $access_token["oauth_token_secret"], $access_token["openid"]); if (CHARSET != 'utf-8') { $me['nickname'] = iconv('utf-8', CHARSET, $me['nickname']); } if (!empty($access_token["openid"])) { // 检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面 $member_bind = Loader::model('member_bind_model')->get_one(array('connectid' => $access_token["openid"], 'form' => 'sina')); if (!empty($member_bind)) { // connect用户已经绑定本站用户 $r = $this->db->get_one(array('userid' => $member_bind['userid'])); // 读取本站用户信息,执行登录操作 $password = $r['password']; if (C('config', 'ucenter')) { $synloginstr = $this->client->uc_user_synlogin($r['ucenterid']); } $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $this->db->update(array('lastip' => ip(), 'lastdate' => TIME, 'nickname' => $me['name']), array('userid' => $userid)); if (!$cookietime) { $get_cookietime = cookie_get('cookietime'); } $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; $yuncms_auth_key = md5(C('config', 'auth_key') . $this->http_user_agent); $yuncms_auth = String::authcode($userid . "\t" . $password, 'ENCODE', $yuncms_auth_key); cookie('auth', $yuncms_auth, $cookietime); cookie('_userid', $userid, $cookietime); cookie('_username', $username, $cookietime); cookie('_groupid', $groupid, $cookietime); cookie('cookietime', $_cookietime, $cookietime); cookie('_nickname', $nickname, $cookietime); $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?app=member&controller=index'; showmessage(L('login_success') . $synloginstr, $forward); } else { // $sdk->add_feeds($access_token["oauth_token"], // $access_token["oauth_token_secret"], // $access_token["openid"]); unset($_SESSION["secret"]); // 弹出绑定注册页面 $_SESSION['connectid'] = $access_token["openid"]; $_SESSION['token'] = $access_token["oauth_token"]; $_SESSION['token_secret'] = $access_token["oauth_token_secret"]; $connect_username = $me['nickname']; $connect_nick = $me['nickname']; cookie('open_name', $me['nickname']); cookie('open_from', 'qq'); if (isset($_GET['bind'])) { showmessage(L('bind_success'), 'index.php?app=member&controller=account&action=bind&t=1'); } include template('member', 'connect'); } } else { unset($_SESSION["secret"]); showmessage(L('login_failure'), 'index.php?app=member&controller=passport&action=login'); } } else { OpenSDK_Tencent_SNS2::setParam(OpenSDK_Tencent_SNS2::ACCESS_TOKEN, null); OpenSDK_Tencent_SNS2::setParam(OpenSDK_Tencent_SNS2::REFRESH_TOKEN, null); $callback = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; $url = OpenSDK_Tencent_SNS2::getAuthorizeURL(SITE_URL, 'code', 'state', 'default', 'get_other_info,get_info'); Header("HTTP/1.1 301 Moved Permanently"); Header('Location: ' . $url); } }
} else { if (isset($_GET['code'])) { //从Callback返回时 if (OpenSDK_Tencent_SNS2::getAccessToken('code', array('code' => $_GET['code'], 'redirect_uri' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']))) { $uinfo = OpenSDK_Tencent_SNS2::call('user/get_user_info', array()); echo '从Opent返回并获得授权。你的微博帐号信息为:<br />'; echo 'Access token: ', OpenSDK_Tencent_SNS2::getParam(OpenSDK_Tencent_SNS2::ACCESS_TOKEN), '<br />'; echo 'Refresh token: ', OpenSDK_Tencent_SNS2::getParam(OpenSDK_Tencent_SNS2::REFRESH_TOKEN), '<br />'; echo 'Expire in:', OpenSDK_Tencent_SNS2::getParam(OpenSDK_Tencent_SNS2::EXPIRES_IN), '<br />'; echo '你的QQ帐号信息为:<br /><pre>'; var_dump($uinfo); echo '你的微博帐号信息为:<br /><pre>'; var_dump(OpenSDK_Tencent_SNS2::call('user/get_info', array(), 'GET')); } else { echo '获得Access Tokn 失败'; } $exit = true; } else { if (isset($_GET['go_oauth'])) { $callback = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; $url = OpenSDK_Tencent_SNS2::getAuthorizeURL($callback, 'code', 'state', 'default', 'get_other_info,get_info'); header('Location: ' . $url); } else { echo 'QQ登陆OAuth2.0演示<a href="?go_oauth">点击去授权</a>'; } } } } if ($exit) { echo '<a href="?exit">退出再来一次</a>'; }
/** * 获得OAuth2 对象 * @return OpenSDK_OAuth2_Client */ protected static function getOAuth() { if (null === self::$oauth) { self::$oauth = new OpenSDK_OAuth2_Client(self::$_debug); } return self::$oauth; }