使用旧的(2.x)SDK我用它来记录某人的offline_access:
$session = array
(
'uid' => $userdata['fb_uid'],
'sig' => $userdata['fb_sig'],
'access_token' => $userdata['fb_access_token']
);
$facebook->setSession($session);
在新的SDK中,此功能不再存在。我想我需要登录:
setPersistentData($ key,$ value)
但是这个功能受到保护,我不知道'代码'是什么?我需要这个来登录用户吗? 'sig'发生了什么?我不再需要这个了吗?
希望有人已经明白了这一点,因为文档确实无济于事!
答案 0 :(得分:21)
使用Facebook PHP SDK v3(see on github),它非常简单。要记录具有offline_access
权限的人员,请在生成登录URL时询问。这是你如何做到的。
首先检查用户是否已登录:
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) {
// The access token we have is not valid
$user = null;
}
}
如果不是,则会生成“使用Facebook登录”网址,要求offline_access
权限:
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
然后在模板中显示链接:
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
然后您可以检索离线访问令牌并存储它。要获得它,请致电:
$facebook->getAccessToken()
在用户未登录时使用脱机访问令牌:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
现在您可以为此用户进行API调用:
$user_profile = $facebook->api('/me');
希望有所帮助!
答案 1 :(得分:0)
使用PHP SDK 2.0(我猜),我只是像
一样使用它$data = $facebook->api( '/me', 'GET', array( 'access_token' => $userdata['fb_access_token'] ) );
这应该适用于较新的一个,因为它似乎更像是一种干净的方法,而不是自己设置会话。你能试试吗?
答案 2 :(得分:0)
Quentin的回答非常好但不完整,我想。它工作得很好,但我的例子getUser()
在那段时间没有工作,因为userId(getUser()
返回)被缓存。
我已经创建了一种新方法来清除所有缓存并持久保存它。
public function setPersistentAccessToken($access_token) {
$this->setAccessToken($access_token);
$this->user = $this->getUserFromAccessToken();
$this->setPersistentData('user_id', $this->user);
$this->setPersistentData('access_token', $access_token);
return $this;
}