在没有登录用户的情况下发布到Facebook页面墙


Post to Facebook Page Wall without logged in user

我有一个Facebook应用程序,我想用它来代表我的客户在Facebook页面墙上发布。我现在已经设置好了,这样当他们验证我的应用程序时,我会得到访问令牌,但当我张贴到墙上时,我收到以下错误:"OAuthException:验证访问令牌时出错:会话无效,因为用户注销了。"

如何在不登录的情况下从脚本中发布?

这是我的代码:

include_once('fb-php-sdk/src/facebook.php');
$facebook = new Facebook(array(
    'appId' => 'XXX',
    'secret' => 'XXX',
));
try {
    $page_id = '215133535279290'; //page id of the customer's facebook page
    $args = array(
        'access_token' => 'XXX', //access token received when user authenticated app
        'message'      => 'A test message'
    );
    $post_id = $facebook->api("/$page_id/feed","post",$args);
} catch (FacebookApiException $e) {
echo "Error:" . $e;
}

新的facebook API具有所谓的扩展访问令牌(它取代了离线访问:https://developers.facebook.com/roadmap/offline-access-removal/我想),我相信它会持续60天(或类似的时间)。要使用它,只需在通过您的网站登录时获得访问令牌:

$token = $facebook->getAccessToken();

将其保存到Db并稍后使用此令牌:

$facebook = new Facebook();
$facebook->setAccessToken($accessTokenFromDB);

然后你应该能够继续,就好像用户已经登录一样

至于被注销的用户部分,请确保您使用的是API的最新版本,而不是旧版本,并确保我链接的页面标题"场景2:如果您之前请求offline_access-更新日期为2012年4月30日"下的内容。

您可以继续使用offline_access,直到10月3日,但如果它在两个月后被真正关闭,那么为什么必须重写您的代码呢。

获取publish_stream扩展权限。一旦你有了这个权限,你就可以在用户离线时使用你的应用访问令牌发布订阅源故事。在这种情况下,不需要offline_access权限,也不需要保存和使用用户访问令牌。