Facebook长期访问令牌可用于多个用户吗?

时间:2013-04-28 14:38:55

标签: php facebook yii facebook-php-sdk

我正在试验Facebook的长期访问令牌,我发现长期访问令牌可以在不同的用户中使用。这是正常的吗?

我正在使用Facebook PHP SDK v3.2.2和Yii。这是我从App_User_1

生成长期访问令牌的代码
Yii::import('application.vendors.facebook.Facebook');
$facebook = new Facebook(
    array(
        'appId' => Yii::app()->params['facebookApi'],
        'secret' => Yii::app()->params['facebookSecretCode'],
        'cookie' => true,
    )
);
$loginUrl = $facebook->getLoginUrl(array('display' => 'touch', 'scope' => 'publish_actions'));
$fbUser = $facebook->getUser();
if(!empty($fbUser))
{
    $facebook->setExtendedAccessToken(); //long-live access_token 60 days
    $access_token = $facebook->getAccessToken();
    exit(print_r($access_token));
}

这是我测试发布到App_User_1 Facebook墙的代码。

$message = "A message";
$link = "http://www.alink.com";
$picture = "http://www.alink/image.png";
$sendTo = "`**App_User_1**`";
$access_token = "xxxxxxxxxx";

Yii::import('application.vendors.facebook.Facebook');
$facebook = new Facebook(
    array(
        'appId' => Yii::app()->params['facebookApi'],
        'secret' => Yii::app()->params['facebookSecretCode'],
        'cookie' => true,
    )
);

$attachment = array('message' => $message, 'link' => $link, 'picture' => $picture );
$api = "/$sendTo/feed/?access_token='.$access_token,";
$result = $facebook->api($api,'post', $attachment);

我有2个测试应用用户。如果我替换App_User_1的访问令牌,我也可以发布到App_User_2的Facebook Wall。这是正常的吗?

1 个答案:

答案 0 :(得分:0)

我想我可能是以错误的方式做这件事。使用PHP SDK,api方法无法将access_token识别为其path参数的一部分。 (e.g. /me/feed/?access_token=blah

相反,应在数组格式的可选参数下指定访问令牌。

以下是我的工作方式。

$facebook_uid = '1234567890';
//Initialize array for the params parameter
$fb_data = array();
$fb_data['access_token'] = 'xxxxxxxxxx';
$fb_data['message'] = 'A test message';
$facebook->api('/'.$facebook_uid.'/feed/', 'post', $fb_data);

尝试使用其他应用用户的访问令牌交换访问令牌,而根本不指定access_token。两者都会导致错误(#200)用户未授权应用程序执行此操作。

我还建议您使用Facebook使用此工具来验证您的应用是否正确生成了access_token。 https://developers.facebook.com/tools/debug