Php 我可以存储Facebook访问令牌并在以后使用它吗?

Php 我可以存储Facebook访问令牌并在以后使用它吗?,php,facebook,oauth,facebook-graph-api,fbconnect,Php,Facebook,Oauth,Facebook Graph Api,Fbconnect,我正在构建一个使用FB connect的web应用程序(PHP)。我在facebook提供的PHP库的帮助下成功注册/登录用户。我也可以用这个代码贴到墙上 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2; $facebook = new Facebook(array(

我正在构建一个使用FB connect的web应用程序(PHP)。我在facebook提供的PHP库的帮助下成功注册/登录用户。我也可以用这个代码贴到墙上

        Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;               
    $facebook = new Facebook(array(
      'appId'  => $fb_key,
      'secret' => $fb_secret,
      'cookie' => true, // enable optional cookie support
    ));
    $session = $facebook->getSession();
    if ($session)
    {
        $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));                   
    }
但是,如果我手动转到浏览器的cookie管理器并删除存储FB会话的cookie,则代码不起作用。我唯一拥有的是用户的FB ID,它存储在DB中。即使FB会话丢失,是否有办法发布到用户的墙上?将用户的FB访问令牌存储在DB中以便稍后发布到墙上是否有意义,或者访问令牌的寿命相对较短

下面是我的应用程序中可能出现的一个示例情况:
用户单击fb按钮,授权我的应用程序,重定向回我的站点,在那里我根据fb提供的数据自动创建一个帐户,我还存储用户的fb ID,以便稍后登录该用户。现在,他浏览网站,输入一些信息,这些信息被张贴到他的墙上。到目前为止一切正常,因为用户的浏览器保存了FB创建的cookie。现在用户离开站点并联系站点管理员。管理员打开自己的浏览器,进入管理员界面并代表该用户发布一些内容。现在,拥有该用户的FB ID并且假设该用户没有撤销权限,我仍然可以将其发布到他的墙上吗?

更新:由于脱机访问已被弃用,此答案不再有效

您需要请求脱机访问权限。检查一下文件


根据更新和评论编辑-可以找到有关删除脱机访问的一些信息。

使用Facebook PHP SDK v3(),询问和使用用户脱机访问令牌非常简单。下面是你如何做到这一点

获取脱机访问令牌 首先检查用户是否已登录:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}
如果他不是,您将生成“使用Facebook登录”URL,请求
脱机访问
权限:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}
然后在模板中显示链接:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
使用脱机访问令牌 要在用户未登录时使用脱机访问令牌,请执行以下操作:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");
现在您可以为该用户进行API调用:

$user_profile = $facebook->api('/me');

希望有帮助

极好的回答。你应该写Facebook文档,因为它比我搜索了3天的非常好的解决方案要好。弗兰克,离线代币现在不推荐了。。。你应该使用其他东西。这将被弃用。尝试使用60天访问令牌。
$user_profile = $facebook->api('/me');