Facebook发布链接作为页面问题

时间:2013-03-07 17:35:06

标签: php facebook-graph-api facebook-page

我正在编写一个简单的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发布了一个指向'Page 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');
        }
    }

我不知道这里发生了什么。从字面上看,唯一改变的是添加'link'参数。如果有人能帮助我,我会非常感激!

修改我获得的权限包括:email,user_about_me,user_likes,user_birthday,manage_pages,publish_stream

此致 克里斯

1 个答案:

答案 0 :(得分: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);

参考: Posting to a Facebook Page as the Page (not a person)


编辑:我刚刚发现的另一个问题是我自己构建了查询字符串并将其附加到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);