function callback() { //var_dump($_REQUEST); //这个key就是这个用户的令牌,很NB,要好好保存 $callback = site_url() . '/binding/tqq/callback'; //var_dump($this->session); $o = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $this->session->userdata('oauth_token'), $this->session->userdata('oauth_token_secret')); $result = $o->getAccessToken($_REQUEST['oauth_verifier']); //获取ACCESSTOKEN //var_dump($result); $sns_oauth_token = $result['oauth_token']; $sns_oauth_token_secret = $result['oauth_token_secret']; $sns_uid = $result['name']; //让人吃金啊 if (empty($sns_uid)) { throw new Exception('oauth fail, havnt got getAccessToken()'); } //获取用户信息 //$c = new WeiboClient( WB_AKEY , WB_SKEY , $sns_oauth_token , $sns_oauth_token_secret); $c = new MBApiClient(MB_AKEY, MB_SKEY, $sns_oauth_token, $sns_oauth_token_secret); $me = $c->getUserInfo(); $me = $me['data']; //把资料准备好之后,剩下的就交给父类里的模版方法了! parent::post_login(UserManager::sns_website_tqq, $sns_uid, $sns_oauth_token, $sns_oauth_token_secret, $me['name']); /* $binding = $this->usermanager->get_binding_by_sns_uid(UserManager::sns_website_tqq, $sns_uid); if(empty($binding)) { //初次登录用户 //创建用户(同时创建sns_binding) $user = $this->usermanager->create_user(UserManager::sns_website_tqq, $sns_uid, $sns_oauth_token, $sns_oauth_token_secret, $me['name']); //把新创建的用户放到ci->weixiao里 $this->weixiao->set_user_token($user->user_token); $cur_user = $this->weixiao->get_cur_user(); if(empty($cur_user)) throw new Exception("something strange happens, cant get user just login."); $data = array('user'=>$cur_user); $this->load->view('binding/first_binding', $data); } else { //老用户 //TODO 初次登录进入binding/first_binding,否则关闭弹出窗口,刷新父页面 $user = $this->usermanager->get_by_id($binding->user_id); //把新创建的用户放到ci->weixiao里 $this->weixiao->set_user_token($user->user_token); $cur_user = $this->weixiao->get_cur_user(); if(empty($cur_user)) throw new Exception("something strange happens, cant get user just login."); $data = array('user'=>$cur_user); $this->load->view('binding/not_first_binding', $data); } */ }
/** * 此函数,供Callback处调用,如果返回false,认证失败,否则返回以下哈希表: * last_key -> callback得到的last_key * oauth_token -> 上述lastkey中的oauth_token * oauth_token_secret -> 上述lastkey中的oauth_token_secret * user_id -> 用户ID * user_name -> 用户昵称 * user_email -> 用户邮箱 */ function AuthCallback_tencent() { // 取得腾讯Auth对象 $o = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']); // 获取last_key $last_key = $o->getAccessToken($_REQUEST['oauth_verifier']); if ($last_key) { $rtn = array(); $rtn['last_key'] = $last_key; $rtn['oauth_token'] = $last_key['oauth_token']; $rtn['oauth_token_secret'] = $last_key['oauth_token_secret']; $rtn['user_id'] = $last_key['name']; $client = new MBApiClient(MB_AKEY, MB_SKEY, $last_key['oauth_token'], $last_key['oauth_token_secret']); $user = $client->getUserInfo(); $rtn['user_name'] = $user['data']['nick']; $rtn['user_email'] = $user['data']['email']; return $rtn; } else { return $last_key; } }
/** * 当腾讯授权正常完成时,将转到task=tencentcallback回调,这时调用这个函数 */ function tencentCallback() { // 取得腾讯Auth对象 $o = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']); // 获取last_key $last_key = $o->getAccessToken($_REQUEST['oauth_verifier']); if ($last_key) { // 如果成功取得last_key $db =& JFactory::getDBO(); // 先将数据库中原有数据无论有无均删除 $sql = "DELETE FROM #__weibo_auth WHERE type='tencent'"; $db->setQuery($sql); $db->Query(); // 将取得的last_key写入数据库中 $sql = "INSERT INTO #__weibo_auth(id,oauth_token,oauth_token_secret,name,type ) VALUES ('1','{$last_key['oauth_token']}','{$last_key['oauth_token_secret']}','{$last_key['name']}','tencent') "; $db->setQuery($sql); $db->Query(); // 显示已经成功获得授权的页面 HTML_weibo::finishedTencentAuth($last_key); } else { // 如果未成功取得last_key,显示出错的页面 HTML_weibo::errorTencentAuth(); } }
<?php if (!defined('IN_ET')) { exit; } session_start(); include_once "oauth.php"; include_once "qqweibo/config.inc.php"; include_once "qqweibo/opent.class.php"; $qqwb = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $_SESSION['qqkeys']['oauth_token'], $_SESSION['qqkeys']['oauth_token_secret']); $last_key = $qqwb->getAccessToken($_REQUEST['oauth_verifier']); $_SESSION['qqlast_key'] = $last_key; unset($_SESSION['qqkeys']); unset($_SESSION['qqaurl']); if ($last_key['oauth_token']) { $bind = D('Weibobind')->where("qq_uid='{$last_key['name']}'")->find(); if (!$bind) { Cookie::set('qqloginauth', $last_key['name']); header("location: " . SITE_URL . "/register"); } else { $user = D('Users')->where("user_id='{$bind['uid']}'")->find(); Cookie::set('authcookie', authcode("{$user['user_name']}\t{$user['user_id']}", 'ENCODE'), 31536000); Cookie::set('setok', '通过腾讯微博帐号登陆成功!'); header("location: " . SITE_URL . '/' . $user['user_name']); } } else { echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>提示信息</title><style>body{font-size:12px;margin:0 auto}.box{text-align:center;width:250px;height:42px;background:url("' . ET_URL . '/Plugin/weibologin/images/tip.gif") no-repeat;color:#000000;margin:200px auto;line-height:38px;color:#ffffff}a {color:#fff}</style></head><body><div class="box">很抱歉,腾讯认证失败!<a href="' . SITE_URL . '">返回主页</a></div></body></html>'; }
function page() { $type = $_GET['t'] ? $_GET['t'] : 'sina'; $action = $_REQUEST['act']; $user = Action::$login_user; $weibo = D('weibobind'); $bind = $weibo->where("uid='{$user['user_id']}'")->find(); if ($action == 'sinasave') { $sinatb = intval($_POST['sinatb']); $weibo->where("uid='{$user['user_id']}'")->setField('sendtosina', $sinatb); Cookie::set('setok', '新浪帐号设置成功'); header('location: ' . SITE_URL . '/p/weibologin?t=sina'); exit; } if ($action == 'qqsave') { $qqtb = intval($_POST['qqtb']); $weibo->where("uid='{$user['user_id']}'")->setField('sendtoqq', $qqtb); Cookie::set('setok', '腾讯帐号设置成功'); header('location: ' . SITE_URL . '/p/weibologin?t=qq'); exit; } if ($action == 'unbindsina') { $weibo->where("uid='{$user['user_id']}'")->setField(array('sina_uid', 'sina_token', 'sina_tsecret', 'sendtosina'), '0'); Cookie::set('setok', '新浪帐号解绑成功'); header('location: ' . SITE_URL . '/p/weibologin?t=sina'); exit; } if ($action == 'unbindqq') { $weibo->where("uid='{$user['user_id']}'")->setField(array('qq_uid', 'qq_token', 'qq_tsecret', 'sendtoqq'), '0'); Cookie::set('setok', '腾讯帐号解绑成功'); header('location: ' . SITE_URL . '/p/weibologin?t=qq'); exit; } if ($action == 'bindsina') { if (!$bind['sina_uid']) { $sinawb = new WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']); $last_key = $sinawb->getAccessToken($_REQUEST['oauth_verifier']); if ($last_key['oauth_token']) { $canbind = $weibo->where("sina_uid='{$last_key['user_id']}'")->find(); if ($canbind) { Cookie::set('setok', '很抱歉,该新浪帐号已经被其他帐号绑定'); header('location: ' . SITE_URL . '/p/weibologin?t=sina'); exit; } if ($bind) { $weibo->where("uid='{$user['user_id']}'")->setField(array('sina_uid', 'sina_token', 'sina_tsecret'), array($last_key['user_id'], $last_key['oauth_token'], $last_key['oauth_token_secret'])); } else { $insert['uid'] = $user['user_id']; $insert['sina_uid'] = $last_key['user_id']; $insert['sina_token'] = $last_key['oauth_token']; $insert['sina_tsecret'] = $last_key['oauth_token_secret']; $weibo->add($insert); } Cookie::set('setok', '新浪帐号绑定成功'); } else { Cookie::set('setok', '新浪帐号绑定失败'); } } header('location: ' . SITE_URL . '/p/weibologin?t=sina'); exit; } if ($action == 'bindqq') { if (!$bind['qq_uid']) { $qqwb = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $_SESSION['qqkeys']['oauth_token'], $_SESSION['qqkeys']['oauth_token_secret']); $last_key = $qqwb->getAccessToken($_REQUEST['oauth_verifier']); if ($last_key['oauth_token']) { $canbind = $weibo->where("qq_uid='{$last_key['name']}'")->find(); if ($canbind) { Cookie::set('setok', '很抱歉,该腾讯帐号已经被其他帐号绑定'); header('location: ' . SITE_URL . '/p/weibologin?t=qq'); exit; } if ($bind) { $weibo->where("uid='{$user['user_id']}'")->setField(array('qq_uid', 'qq_token', 'qq_tsecret'), array($last_key['name'], $last_key['oauth_token'], $last_key['oauth_token_secret'])); } else { $insert['uid'] = $user['user_id']; $insert['qq_uid'] = $last_key['name']; $insert['qq_token'] = $last_key['oauth_token']; $insert['qq_tsecret'] = $last_key['oauth_token_secret']; $weibo->add($insert); } Cookie::set('setok', '腾讯帐号绑定成功'); } else { Cookie::set('setok', '腾讯帐号绑定失败'); } } header('location: ' . SITE_URL . '/p/weibologin?t=qq'); exit; } $result .= '<div class="friends" style="height:400px">'; if ($type == 'sina') { $result .= '<div class="indexh"><div class="tabon"><a href="' . SITE_URL . '/p/weibologin?t=sina">新浪帐号</a></div><div class="taboff"><a href="' . SITE_URL . '/p/weibologin?t=qq">腾讯帐号</a></div></div>'; } else { $result .= '<div class="indexh"><div class="taboff"><a href="' . SITE_URL . '/p/weibologin?t=sina">新浪帐号</a></div><div class="tabon"><a href="' . SITE_URL . '/p/weibologin?t=qq">腾讯帐号</a></div></div>'; } $result .= '<div style="ine-height:200%;padding:0 10px;">'; if ($type == 'sina') { if ($bind['sina_uid']) { $result .= '<div style="float:right"><img src="' . ET_URL . '/Plugin/weibologin/images/sinalogo.jpg"></div><div class="clearline"></div> <form action="' . SITE_URL . '/p/weibologin" method="post"> <table style="margin:10px 0 0 10px;font-size:12px;text-indent:10px" width="100%"> <tr height="60px"> <td width="150px" bgcolor="#f3f3f3">绑定新浪微博帐号:</td> <td bgcolor="#ffffde">' . $bind['sina_uid'] . '</td>'; $result .= '</tr><tr height="60px"><td bgcolor="#f3f3f3">是否同步发表微博:</td>'; if ($bind['sendtosina']) { $result .= '<td bgcolor="#ffffde"><input type="radio" name="sinatb" value="1" checked> 是 <input type="radio" name="sinatb" value="0"> 否</td>'; } else { $result .= '<td bgcolor="#ffffde"><input type="radio" name="sinatb" value="1"> 是 <input type="radio" name="sinatb" value="0" checked> 否</td>'; } $result .= '</tr> <tr height="120px"> <td> </td> <td><input type="hidden" name="act" value="sinasave"> <input type="submit" class="button1" value="提交保存"> <input type="button" class="button3" value="解绑帐号" onclick="if(confirm(\'是否确定要解绑新浪微博帐号?\')){window.location.href=\'' . SITE_URL . '/p/weibologin?act=unbindsina\'}"> </td> </tr> </table> </from>'; } else { session_start(); unset($_SESSION['keys']); $sinawb = new WeiboOAuth(WB_AKEY, WB_SKEY); $keys = $sinawb->getRequestToken(); $aurl = $sinawb->getAuthorizeURL($keys['oauth_token'], false, SITE_URL . '/p/weibologin?act=bindsina'); $_SESSION['keys'] = $keys; $result .= '<div style="text-align:center;width:100%;margin-top:80px;font-size:14px"> <img src="' . ET_URL . '/Plugin/weibologin/images/sinalogo.jpg"><br/><br/><a href="' . $aurl . '">您还未绑定新浪帐号,点击绑定!</a> </div>'; } } else { if ($type == 'qq') { if ($bind['qq_uid']) { $result .= '<div style="float:right"><img src="' . ET_URL . '/Plugin/weibologin/images/qqlogo.jpg"></div><div class="clearline"></div> <form action="' . SITE_URL . '/p/weibologin" method="post"> <table style="margin:10px 0 0 10px;font-size:12px;text-indent:10px" width="100%"> <tr height="60px"> <td width="150px" bgcolor="#f3f3f3">绑定腾讯微博帐号:</td> <td bgcolor="#ffffde">' . $bind['qq_uid'] . '</td>'; $result .= '</tr><tr height="60px"><td bgcolor="#f3f3f3">是否同步发表微博:</td>'; if ($bind['sendtoqq']) { $result .= '<td bgcolor="#ffffde"><input type="radio" name="qqtb" value="1" checked> 是 <input type="radio" name="qqtb" value="0"> 否</td>'; } else { $result .= '<td bgcolor="#ffffde"><input type="radio" name="qqtb" value="1"> 是 <input type="radio" name="qqtb" value="0" checked> 否</td>'; } $result .= '</tr> <tr height="120px"> <td> </td> <td><input type="hidden" name="act" value="qqsave"> <input type="submit" class="button1" value="提交保存"> <input type="button" class="button3" value="解绑帐号" onclick="if(confirm(\'是否确定要解绑腾讯微博帐号?\')){window.location.href=\'' . SITE_URL . '/p/weibologin?act=unbindqq\'}"> </td> </tr> </table> </from>'; } else { session_start(); unset($_SESSION['qqkeys']); $qqwb = new MBOpenTOAuth(MB_AKEY, MB_SKEY); $keys = $qqwb->getRequestToken(SITE_URL . '/p/weibologin?act=bindqq'); $aurl = $qqwb->getAuthorizeURL($keys['oauth_token'], false, ''); $_SESSION['qqkeys'] = $keys; $result .= '<div style="text-align:center;width:100%;margin-top:80px;font-size:14px"> <img src="' . ET_URL . '/Plugin/weibologin/images/qqlogo.jpg"><br/><br/><a href="' . $aurl . '">您还未绑定腾讯帐号,点击绑定!</a> </div>'; } } } $result .= '</div></div>'; return $result; }
if ($_POST['type'] == 'm') { go('/m/index.php'); } else { go(); } break; case 'sina_oauth': $sina_oa = new WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['sina_keys']['oauth_token'], $_SESSION['sina_keys']['oauth_token_secret']); $sina_last_key = $sina_oa->getAccessToken($_REQUEST['oauth_verifier']); $_SESSION['sina_last_key'] = $sina_last_key; $page = MF_URL . 'action.php?act=insert_oauth&mb=sina'; go($page); break; case 'qq_oauth': $tecent_oa = new MBOpenTOAuth(MB_AKEY, MB_SKEY, $_SESSION['tecent_keys']['oauth_token'], $_SESSION['tecent_keys']['oauth_token_secret']); $tecent_last_key = $tecent_oa->getAccessToken($_REQUEST['oauth_verifier']); $_SESSION['tecent_last_key'] = $tecent_last_key; $page = MF_URL . 'action.php?act=insert_oauth&mb=qq'; go($page); break; case '163_oauth': $wangyi_oa = new wy_WeiboOAuth(WY_AKEY, WY_SKEY, $_SESSION['wangyi_keys']['oauth_token'], $_SESSION['wangyi_keys']['oauth_token_secret']); $wangyi_last_key = $wangyi_oa->getAccessToken($_REQUEST['oauth_token']); $_SESSION['wangyi_last_key'] = $wangyi_last_key; $page = MF_URL . 'action.php?act=insert_oauth&mb=163'; go($page); break; case 'insert_oauth': $user = sql_query('SELECT * FROM ' . DB_PREFIX . 'user WHERE username = "******"'); $user = mysql_fetch_array($user); $microblog = unserialize($user['microblog']);