本地會員與新浪微博api綁定和同步登陸


說明:此設計僅為我個人簡單的制作。沒有考慮安全因素、bug、效率等。僅限於學習本地會員同步新浪微博登陸。

附:伸手黨可到csdn資源下載源碼。包含源碼文件、數據庫文件以及使用方法

csdn資源下載網址:http://download.csdn.net/detail/x171306523c/4957607

1、先設計了一個簡單的mysql數據庫表

CREATE TABLE IF NOT EXISTS `user2` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `api` int(1) NOT NULL DEFAULT '0',
  `username` varchar(128) NOT NULL,
  `passwd` varchar(32) NOT NULL,
  `access_token` varchar(32) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

id為主鍵,不用說了

api記錄是不是微博用戶以及時哪個微博。比如規定api=0不是微博用戶。api=1新浪微博用戶。api=2騰訊微博。api=3 QQ賬號

username用戶名

passwd密碼

access_token微博的access_token是微博用戶,則記錄微博的access_token值


2、文件目錄


3.1、數據庫連接文件conn.php

<?php
header('Content-Type: text/html; charset=UTF-8');
mysql_connect("127.0.0.1","root","");//這是我的數據庫地址、用戶名、密碼
mysql_select_db("zzz");//這是我的數據庫名
mysql_query("set names 'utf-8'");
session_start();
?>

3.2、index.html兩個文件入口,一個是登錄,一個是注冊

<a href="login.php">login</a><br>
<a href="reg.php">reg</a>

3.3、login.php登錄、退出頁面

<?php
session_start();
 include("conn.php");
 
 if(!empty($_POST['sub'])){
   $u = trim($_POST['user']);
   $p = md5($_POST['pass']);   
 $sql="select * from user2 where `username`='$u' && `passwd`='$p'";
 $query=mysql_query($sql);
 $rs = mysql_fetch_array($query);
   if($rs[0]){
    $_SESSION['uid']=$rs['id'];
    echo "<script>alert('登陸成功');location.href='my.php'</script>";
   }else{
    echo "登陸失敗";
   }
   
 }

 //==================退出登錄
 if($_GET['action'] == "logout"){
     unset($_SESSION['uid']);
 
     echo '注銷登錄成功!點擊此處 <a href="login.php">登錄</a>';
     exit;
 }
 
 //已經是登錄狀態
 if ($_SESSION['uid']){
     echo "您已經登錄,請進入<a href='my.php'>用戶中心</a>";
 }else {
     echo "
     <form action='' method='post'>
     用戶<input type='text' name='user' ><br>
     密碼<input type='password' name='pass'> <br>
     <input type='submit' name='sub' value='login'>
     </form>
     <a href='weibo/'>使用微博賬號登陸</a><br><br>
     <a href='reg.php'>還沒有注冊?點擊此處</a>
     ";
 }
 
 
?>

有三種情況

一、正常登錄,點擊按鈕后檢測用戶名、密碼是否正確,正確則跳轉到用戶中心頁面,否則提示錯誤

二、退出,action==logout時銷毀$_SESSION['uid'],退出成功

三、已經是登錄狀態,又進入到login.php頁面,提示已是登錄狀態


3.4、my.php用戶中心

<?php
 include("conn.php");
 if(!empty($_SESSION['uid'])){
     $sql="select * from user2 where id='".$_SESSION['uid']."'";
     $query=mysql_query($sql);
     $rs = mysql_fetch_array($query);
     echo "歡迎".$rs['username']."登陸成功!<br> 我的md5密碼是:".$rs['passwd']."<a href=login.php?action=logout>退出</a><br><br>";
     if (empty($rs['access_token'])){
         echo "<a href='weibo'>綁定微博</a>";
     }else {
         echo "已經綁定微博";
     }
 }else{
     echo "登陸失敗,請重新<a href=login.php>登陸</a>";
 }

?>

判斷$_SESSION['uid']是否為空,空則沒有登錄,否則為登錄

判斷$rs['access_token']是否為空,為空則沒有綁定微博,否則為已經綁定了微博


3.5、reg.php注冊頁面

<?php
session_start();
 include("conn.php");
 
 if(!empty($_POST['sub'])){
   $u = trim($_POST['user']);
   $p = md5($_POST['pass']);   
   $sql_1 = "INSERT INTO `zzz`.`user2` (`username`, `passwd`";//INSERT INTO `zzz`.`user2` (`username`, `passwd`) VALUES ('$u', '$p')
   if ($_GET['reg'] == "api"){
       $sql_2 = ", `api`, `access_token`";
       $access_token = $_SESSION['token']['access_token'];
       $sql_3 = ", '1', '$access_token'";
   }else {
       $sql_2 = "";
       $sql_3 = "";
   }
   $sql = $sql_1.$sql_2.") VALUES ('$u', '$p'".$sql_3.")";
   //echo $sql;
   $query=mysql_query($sql);
   if($query){
    $log_sql="select * from user2 where `username`='$u' && `passwd`='$p'";
    $log_query=mysql_query($log_sql);
    $log_rs = mysql_fetch_array($log_query);
    $_SESSION['uid']=$log_rs['id'];
    echo "<script>alert('注冊成功');location.href='my.php'</script>";
   }else{
    echo "注冊失敗";
   }
   
 } 
 
 if ($_GET['reg'] == "api"){
     $weibo_reg = " style=\"display:none\"\;";
     echo "您好!".$_GET['username']."<br>";
     
 }

?>
<form action="" method="post">
用戶<input type="text" name="user" value="<?php echo $_GET['username']?>" ><br>
密碼<input type="password" name="pass"> <br>
<input type="submit" name="sub" value="reg">
</form>
<a<?php echo $weibo_reg;?> href='weibo/index.php?do=reg'>使用微博賬號注冊</a>

注冊分為2種,1、網站注冊,2、微博注冊

4、weibo文件夾為新浪api的sdk。可從網上下載

下載地址 http://open.weibo.com/wiki/SDK    選擇PHP SDK下載即可


 

4.1、callback.php沒有修改。


 

4.2、config.php  將WB_AKEY、WB_SKEY、WB_CALLBACK_URL設置成自己的即可

define( "WB_AKEY" , '**********' );
define( "WB_SKEY" , '*****************************' );
define( "WB_CALLBACK_URL" , 'http://***************/callback.php' );

申請地址:http://open.weibo.com/index.php

登陸后點管理中心→添加網站→輸入相應的信息后選擇驗證方式,通過驗證后得到App Key、App Secret、

WB_CALLBACK_URL為下載的sdk里的callback.php文件所在的url


4.3、index.php

因為考慮到微博注冊,所以我將$_SESSION['do']賦值為reg

在 include_once( 'saetv2.ex.class.php' ); 下面添加如下代碼

if ($_GET['do'] == "reg"){
    $_SESSION['do'] = "reg";
}

4.4、saetv2.ex.class.php沒有修改


4.5、weibolist.php可以復制weibolist.php並改文件名為weibolist.php.bak作為備份

<?php
header("Content-type:text/html;charset=utf-8");
session_start();
include("../conn.php");
include_once( 'config.php' );
include_once( 'saetv2.ex.class.php' );

$sql = "select * from `user2` where `access_token` = '{$_SESSION['token']['access_token']}'";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);


//使用微博登陸
if (!empty($row['access_token']) && empty($_SESSION['uid'])){//!empty($row['access_token'])該微博已經綁定了賬號,empty($_SESSION['uid'])沒有使用賬號登錄        使用微博登陸
    $_SESSION['uid'] = $row['id'];
    header("Location: ../my.php");
    exit;
}else if (!empty($row['access_token']) && !empty($_SESSION['uid'])){//該微博已經綁定過了
    echo "該微博已經綁定了其他賬號。綁定失敗!<a href=\"../my.php\">返回用戶中心</a>";
}else if (empty($row['access_token']) && !empty($_SESSION['uid'])){//微博賬號沒有綁定並且使用了本地賬號登錄
    //進行綁定
    $bd_sql = "update `user2` set `access_token` = '{$_SESSION['token']['access_token']}', `api` = '1' where `id`={$_SESSION['uid']}";
    mysql_query($bd_sql);
    header("Location: ../my.php");
    exit;
}else if (empty($row['access_token']) && empty($_SESSION['uid']) && $_SESSION['do'] == "reg"){//微博沒有綁定並且本地賬號沒有登錄,使用微博注冊
    unset($_SESSION['do']);
    $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['token']['access_token'] );
    $c->set_debug( DEBUG_MODE );
    $uid_get = $c->get_uid();
    $uid = $uid_get['uid'];
    $user_message = $c->show_user_by_id( $uid);//根據ID獲取用戶等基本信息
    header("Location: ../reg.php?reg=api&username=".$user_message['screen_name']);
    exit;
}else if (empty($row['access_token']) && empty($_SESSION['uid'])){//微博沒有綁定並且本地賬號沒有登錄
    echo "用戶不存在,<a href=\"../login.php\">返回登錄頁面進行注冊</a>".$_SESSION['do'];
}



?>

五種情況(我暫時考慮到五種)

第一:使用微博登陸,即$row['access_token']不為空,$_SESSION['uid']為空

第二:綁定微博,使用本地會員登陸,但是微博已經於其他賬號綁定,綁定失敗。即empty($row['access_token']不為空,empty($_SESSION['uid']不為空

第三:綁定微博,使用本地會員登陸,微博沒有綁定其它護院,綁定成功。即empty($row['access_token']為空,empty($_SESSION['uid']不為空

第四:使用微博注冊,即$row['access_token']為空,empty($_SESSION['uid']為空,$_SESSION['do']為reg(4.3的index.php賦的值)

第五:微博登陸,但是該微博沒有綁定本地賬號。$row['access_token']為空,$_SESSION['uid']為空


 

 附:伸手黨可到csdn資源下載源碼。包含源碼文件、數據庫文件以及使用方法

csdn資源下載網址:http://download.csdn.net/detail/x171306523c/4957607

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM