如何使用新的Facebook PHP SDK 3.0.0登录OFFLINE_ACCESS?

mar*_*yyy 9 facebook facebook-graph-api facebook-php-sdk

使用旧的(2.x)SDK我用它来记录某人的offline_access:

$session = array
(
    'uid' => $userdata['fb_uid'],
    'sig' => $userdata['fb_sig'],
    'access_token' => $userdata['fb_access_token']
);

$facebook->setSession($session);
Run Code Online (Sandbox Code Playgroud)

在新的SDK中,此功能不再存在.我想我需要登录使用:

setPersistentData($ key,$ value)

但这个功能受到保护,我不知道'代码'是什么?我需要这个来登录用户吗?'sig'发生了什么?我不再需要这个吗?

希望有人已经想到这一点,因为文档真的无济于事!

Que*_*tin 21

使用Facebook PHP SDK v3(参见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;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果他不是,您生成"登录Facebook"URL请求offline_access权限:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}
Run Code Online (Sandbox Code Playgroud)

然后在模板中显示链接:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud)

然后,您可以检索脱机访问令牌并将其存储.要获得它,请致电:

$facebook->getAccessToken()
Run Code Online (Sandbox Code Playgroud)

使用脱机访问令牌

要在用户未登录时使用脱机访问令牌:

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

$facebook->setAccessToken("...");
Run Code Online (Sandbox Code Playgroud)

现在,您可以为此用户进行API调用:

$user_profile = $facebook->api('/me');
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!