即使我已经退出,php也会发布到Facebook

时间:2013-07-20 19:16:54

标签: php facebook

我创建了这个PHP脚本,用于定期将消息发送到我管理的Facebook页面。

我的脚本工作正常,但依赖于我作为用户登录Facebook。我希望这个脚本作为一个cron作业运行,所以我担心如果我退出,脚本将无法工作。

即使我没有登录Facebook,我怎样才能使它工作?

请注意,我根据要求创建了一个Facebook应用程序,以便能够使用Facebook API。有没有办法发布Facebook应用程序呢?

这是我的代码,如果它有帮助。

require_once('config.inc.php');
require '_classes/facebook-php-sdk/src/facebook.php';


$homeurl = 'http://domain.com/to-facebook/index.php';
$post_url = '/'.PAGEID.'/feed';



// The message
        $msg_body = array(
        'message' => 'hello world',
        );

// Post to Facebook

$facebook = new Facebook(array(
        'appId'  => FB_APP_ID,
        'secret' => FB_APP_SECRET,
    ));


// Get User ID
$fbuser = $facebook->getUser();
if ($fbuser) {
    try {
        $postResult = $facebook->api($post_url, 'post', $msg_body );
    } catch (FacebookApiException $e) {
        echo $e->getMessage();
    }
}else{
 // I would like never to come to this point...
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>'publish_stream,manage_pages,publish_actions,status_update,offline_access'));
    header('Location: ' . $loginUrl);
}
if($postResult)
{

    echo '<h1>Your message is posted on your facebook wall.</h1>';
}

*更新* 我尝试了cronjob,不幸的是,过了一段时间我得到了“错误验证访问令牌:会话已在unix时间到期”消息。我很困惑。我做错了什么?

3 个答案:

答案 0 :(得分:0)

对于与您的应用相关的网站: 当您拥有应用获得manage_pages的权限时,您可以使用您的用户令牌运行api,从而为您提供所有页面的访问权限。这些令牌可以永远存在。

授权应用的用户: 您可以使access_token持续更长时间。但是,用户需要登录才能刷新扩展令牌。阅读更多关于“Facebook Extend Token”的信息。

以前有一个允许应用程序能够永久重用令牌的权限,但它已不再可用。现在最好的办法就是每次用户登录应用程序时都只需运行api即可扩展令牌。

答案 1 :(得分:0)

**更新** 我尝试了cronjob,不幸的是,过了一段时间我得到了“错误验证访问令牌:会话已在unix时间到期”消息。我很困惑。我做错了什么?


我似乎找到了基于这个答案Facebook Access Token for Pages的解决方案。 它解释了如何将access_token获取到FB应用程序的特定页面。 我获得了它,然后调整了我的代码。我使用浏览器对其进行了测试,其中我没有登录到Facebook,并且它可以正常工作。

如果有帮助,这是更新的脚本。

$msg_body = array(
    'message' => $message->message.' v/ @'.$message->author,
    'access_token' => FB_ACCESS_TOKEN
);



try {
    $postResult = $facebook->api($post_url, 'post', $msg_body );
} catch (FacebookApiException $e) {
    echo $e->getMessage();
}

if($postResult)
{
    echo '<h1>Your message is posted on your facebook wall.</h1>';
    print_r($msg_body);
}

我会把cronjob运行几天,如果证明不能可靠地工作,我会回复你。

答案 2 :(得分:0)

您可以轻松使用CURL。 Google就像这样,“CURL登录,CURL facebook登录”