1

我正在编写一个简单的 Facebook 页面选项卡应用程序,它允许我将消息(状态更新、链接、照片和视频)发布到多个页面。

我在尝试将各种内容发布到页面时间轴的 Facebook API(使用 PHP SDK)时遇到问题。

当我发布状态更新时,它成功地以页面名称发布。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $data = array(
                'access_token' => $page->access_token,
                'message' => Arr::get('status', $_POST)
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

只要我添加更多参数(即尝试发布链接),就会在我的管理员帐户下发布帖子(即 Chris Hayes 发布了指向“页面 X”的链接)。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $data = array(
                'access_token' => $page->access_token,
                'link' => Arr::get('link', $_POST),
                'message' => Arr::get('status', $_POST)
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

我不知道这里发生了什么。从字面上看,唯一改变的是添加“链接”参数。如果有人可以帮助我,我将不胜感激!

编辑我获得的权限是:email、user_about_me、user_likes、user_birthday、manage_pages、publish_stream

问候,克里斯

4

1 回答 1

0

我在另一篇文章中找到了答案。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $this->facebook->setAccessToken($page->access_token);

            $data = array(
                'access_token' => $page->access_token,
                'name' => 'Facebook API: Posting As A Page',
                'link' => 'https://www.webniraj.com/2012/08/09/facebook-api-posting-as-a-page/',
                'caption' => 'The Facebook API lets you post to Pages you own automatically - either as real-time updates or in the case that you want to schedule posts.',
                'message' => 'Check out my new blog post!'
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

关键是通过 Facebook SDK 设置页面访问令牌。这可能是因为我在其他地方使用库将访问令牌设置为用户的;我猜这个库必须覆盖作为参数发送的令牌。

$this->facebook->setAccessToken($page->access_token);

参考: 作为主页(不是个人)发布到 Facebook 主页


编辑:我刚刚发现的另一个问题是我自己构建查询字符串并将其附加到 API 端点,如下所示:

$this->facebook->api("$page->id/feed?".$queryString, 'POST');

您应该做的是发送 $data 数组作为 API 调用的第三个参数:

$this->facebook->api("$page->id/feed", 'POST', $data);

PHP SDK 在 $data 中查找“access_token”参数,因为我没有在该数组中发送它,所以它没有找到它(因此默认使用我之前设置的用户访问令牌)。

在将数据作为 API 调用的第三个参数发送后,我能够删除该行:

$this->facebook->setAccessToken($page->access_token);
于 2013-03-07T18:32:29.720 回答