2

我的网站上有一个新闻表格。创建此新闻消息后,我想在 Facebook 上发布它。我尝试了很多东西,但没有任何效果。这是我的课:

<?php

class Facebook {

    const FACEBOOK_APP_ID           = 'MY_APP_ID';

    const FACEBOOK_APP_SECRET       = 'MY_APP_SECRET';

    const FACEBOOK_ACCESS_TOKEN_URI = 'https://graph.facebook.com/oauth/access_token';

    const FACEBOOK_FEED_URI         = 'https://graph.facebook.com/app/feed';

    private function getAccessToken() {
        $params = array(
            'client_id'     => self::FACEBOOK_APP_ID,
            'client_secret' => self::FACEBOOK_APP_SECRET,
            'grant_type'    => 'client_credentials',
        );

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, self::FACEBOOK_ACCESS_TOKEN_URI);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

        $data = curl_exec($ch);

        curl_close($ch);

        return substr($data, strpos($data, '=') + 1);
    }

    public function sendFeed() {
        $params =  array(
            'access_token'  => $this->getAccessToken(),
            'message'   => $message,
            'name'      => $name,
            'link'      => $url,
            'description'   => $description,
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::FACEBOOK_FEED_URI);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

        $data = curl_exec($ch);

        curl_close ($ch);

        return $data;
    }

}

如果我调用 sendFeed() 方法,它会返回以下内容:

{"id":"404322099626551_404397542952340"}

我认为提交是成功的,但是当我在 facebook 上访问我的页面时,没有新的提要。我究竟做错了什么?我搜索了整整一天,但无法正常工作。我感谢你的帮助。

4

1 回答 1

0

您在这里所做的是将其发布在用户的提要上。您正在使用用户访问令牌。您要使用的是页面访问令牌

您需要获得代表您的页面执行任务的manage_pages 权限。

另外你应该考虑使用官方的PHP SDK,它会让访问 Facebook 的 API 更加容易并且提高可读性。

于 2012-07-22T21:14:29.250 回答