PHP Facebook API - 扩展权限数据未与(离线)access_token一起显示


PHP Facebook API - extended permission data not showing up with (offline) access_token

我正在尝试检索有关允许我的应用程序收集有关他们的数据的用户的个人资料信息(生日、位置等)。仅当用户实际访问我的应用程序并通过令牌交换向 facebook 进行身份验证时,这才有效。

但是,我希望能够定期检查用户位置是否没有更改,如果用户在FB上添加了有关自己的信息,我想将其与我的应用程序"同步",以便信息保持不变。

所以我保存了用户的访问令牌,稍后,通过 cron 作业,我使用该令牌来获取他的配置文件:

$user = mysql_query ... <- get data from mysql

然后:

$user_profile = $facebook->api('/'.$user['uid']);

当然,它可以工作,但是我想要使用扩展权限的所有数据 - 只是没有显示!

offline_access的诅咒是致残的吗?还是我需要使用其他方式来获取此类数据。我尝试在查询末尾添加 ?fields=birthday 等,但它仍然不起作用。

不确定这是否是你所说的"offline_access禁用"的意思,但是Facebook正在弃用offline_access,正如你在路线图中看到的那样:

http://developers.facebook.com/roadmap/

您可以在此处阅读有关弃用的更多信息:

http://developers.facebook.com/roadmap/offline-access-removal/

另外,是否正确设置了从数据库接收的访问令牌?

$facebook->setAccessToken($user['access_token']);

了解如何实现此目的 - 访问令牌必须作为 API 查询的附加参数传递,如下所示:

$user_profile = $facebook->api('/'.$user['uid'].'', array('access_token' => $session['access_token']));

如果有人想知道此页面,可以使用以下方法使用保存的访问令牌来访问有关所需用户的完整信息,而无需进行身份验证:

<?
require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => your_app_id,
    'secret' => your_app_secret
));
// get the saved user details 
$user = mysql_fetch_assoc(mysql_query('SELECT * FROM `facebook_tokens` WHERE `id` = "1"'));
$session = array(
    'access_token' => $user['access_token'],
    'secret' => $user['secret'],
    'session_key' => $user['session_key'],
    'uid' => $user['uid']
);
$sig = '';
foreach($session as $key => $value) {
    $sig .= implode('=', array($key, $value));
} 
$session['sig'] = md5($sessionStr.'Your App Secret');
$facebook->setSession($session, false);
$user_profile = $facebook->api('/'.$session['uid'], array('access_token' => $session['access_token']));
echo '<pre>';
print_r($user_profile);
echo '</pre>';  
?>