【问题标题】:Store a Facebook Access token in Mysql to post to wall later在 Mysql 中存储一个 Facebook 访问令牌,以便稍后发布到墙上
【发布时间】:2015-02-21 17:49:15
【问题描述】:

我正在使用以下代码将我的 facebook 应用程序用户详细信息存储在 mysql 中,以允许他们查看我网站上的独家内容。

我的问题很简单,如何将用户的访问令牌存储在我的 Mysql 表中,以便以后使用它稍后发布到墙上

<?php 
session_start(); 
if(isset($_POST["connect"]) && $_POST["connect"]==1)
 {      
include_once("config.php"); //Include configuration file.

//Call Facebook API
if (!class_exists('FacebookApiException')) {
require_once('inc/facebook.php' );
}
    $facebook = new Facebook(array(
    'appId' => $appId,
    'secret' => $appSecret,
));

$fbuser = $facebook->getUser();
if ($fbuser) {
    try {
        // Proceed knowing you have a logged in user who's authenticated.
        $me = $facebook->api('/me'); //user
        $uid = $facebook->getUser();
    }
    catch (FacebookApiException $e) 
    {
        //echo error_log($e);
        $fbuser = null;
    }
}





// redirect user to facebook login page if empty data or fresh login requires
if (!$fbuser){
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$return_url, false));
    header('Location: '.$loginUrl);
}

//user details
$fullname = $me['first_name'].' '.$me['last_name'];
$email = $me['email'];
$username = $me['username'];
$gender = $me['gender'];
$locale = $me['locale'];
$token = $me['token'];

/* connect to mysql */
$connecDB = mysql_connect($hostname, $db_username, $db_password)or die("Unable to connect to MySQL");   
mysql_select_db($db_name,$connecDB);

//Check user id in our database
$result = mysql_query("SELECT COUNT(id) FROM usertable WHERE fbid=$uid");   
$UserCount = mysql_fetch_array($result); 

if($UserCount[0])
{   
    //User exist, Show welcome back message
echo 'Ajax Response :<br /><strong>Welcome back '. $me['first_name'] . ' '. $me['last_name'].'!</strong> AT : '.$token.' ( Facebook ID : '.$uid.') [<a href="'.$return_url.'?logout=1">Log Ouuuuuuuuuuuuuut</a>]';
echo '<iframe style="width:1309px; height:526px" src="post2.php"></iframe>';

    //User is now connected, log him in
    login_user(true,$me['first_name'].' '.$me['last_name']);
}
else
{
    //User is new, Show connected message and store info in our Database
    // Insert user into Database.
    @mysql_query("INSERT INTO usertable (fbid, fullname, email, username, gender, token, locale) VALUES ($uid, '$fullname','$email','$username','$gender','$token','$locale')");

    //User is now connected, log him in
    login_user(true,$me['first_name'].' '.$me['last_name']);
}

mysql_close($connecDB);
   }

  function login_user($loggedin,$user_name)
  {
/*
function stores some session variables to imitate user login. 
We will use these session variables to keep user logged in, until s/he clicks log-out link.
If you are using some authentication library, login user with it instead.
*/
$_SESSION['logged_in']=$loggedin;
$_SESSION['user_name']=$user_name;
 }

 ?>

【问题讨论】:

  • 如果您想在用户离线时发布到用户的墙上,您只需要publish_stream 权限,您甚至不需要用户访问令牌...直接使用 PHP-SDK,它会自动添加应用访问令牌,这样就可以了。 P.S.:您的代码需要注意。

标签: php facebook access-token


【解决方案1】:

我不明白。您已经在保存令牌。

您需要做的是在仅经过身份验证的页面中验证用户是否已登录,如果是,您将返回他的 $_SESSION['user_id'] 的令牌(例如),并创建Facebook API 中与该令牌的交互,例如:

$token = $_SESSION['token'];
$facebook->setAccessToken($token);

希望对你有所帮助。

【讨论】:

  • 我正在寻找离线令牌。即使他没有连接到FB,我也想在用户的墙上发布消息。
  • 您可以这样做,您还需要请求 publish_stream 权限才能在访问令牌中允许它。我建议您在保存之前“询问”扩展访问令牌(在 60 天后过期的令牌),使用: $facebook->setExtendedAccessToken(); $fb_access_token = $facebook->getAccessToken();不要忘记令牌过期!如果令牌不再有效并且用户需要刷新它,您总是需要有一个例外。
  • 在 config.php 文件中,我要求获得“publish_stream,offline_access”权限。我的应用程序可以在用户的​​墙上发布消息,但我希望能够随时随地向我的所有应用程序用户发布消息。就像在这个应用程序中,如果我想更新用户墙yougapi.com/products/facebook_viral/admin
  • 我愿意,但是 StackOverflow 的概念是让这里的答案在未来帮助其他人。据我所知,您可以创建一个表单,在其中写一条消息,当单击提交按钮时,它将运行一个 foreach 填充了 fb_token 的所有结果,并将运行一个 PHP 帖子到每个人的墙上.这不是你要找的吗?
  • 实际上你可以在这里尝试我的原始应用程序nizar.kodingen.com/connect/index.php 如果你愿意,我可以为你传递整个代码,因为我尝试了很多东西,但似乎都没有成功
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2016-12-25
  • 2016-03-04
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多