Ссылка на публикацию в Facebook как проблема страницы

Я пишу простое приложение с вкладками страниц Facebook, которое позволит мне публиковать сообщения (обновления статуса, ссылки, фотографии и видео) на нескольких страницах.

У меня проблема с API Facebook (с использованием 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');
        }
    }

Как только я добавляю дополнительные параметры (например, пытаюсь опубликовать ссылку), публикация создается под моей учетной записью администратора (например, Крис Хейс разместил ссылку на «Страницу 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');
        }
    }

Понятия не имею, что здесь происходит. Буквально единственное, что изменилось, - это добавление параметра «ссылка». Если кто-нибудь может мне помочь, я буду очень признателен!

Изменить. Полученные мной разрешения: электронная почта, user_about_me, user_likes, user_birthday, manage_pages, publish_stream

С уважением, Крис


person Chris Hayes    schedule 07.03.2013    source источник
comment
Сначала запишите фактический используемый токен доступа и пропустите его через инструмент отладки: developers.facebook.com/tools / debug   -  person CBroe    schedule 07.03.2013
comment
В нем говорится, что это токен доступа для моего приложения, действительный в течение следующего часа, со следующими разрешениями: create_note email manage_pages photo_upload publish_actions publish_stream share_item status_update user_about_me user_birthday user_likes video_upload. С ним связан мой идентификатор пользователя, не так ли?   -  person Chris Hayes    schedule 07.03.2013
comment
Нет, не должно - вы хотите публиковать сообщения не как пользователь, а как страница. Так что получите токен доступа к странице.   -  person CBroe    schedule 07.03.2013
comment
Разве это не токен доступа к странице, который я использую? В документации говорится, что вы можете использовать конечную точку «я / учетные записи», чтобы получить список всех ваших страниц с включенными токенами доступа. Это разные токены страницы, чем если бы вы использовали конечную точку '/ PAGE_ID? Fields = access_token'?   -  person Chris Hayes    schedule 07.03.2013
comment
Просто чтобы уточнить, когда я запускал токен страницы через отладчик, он дал мне идентификатор приложения, идентификатор профиля и идентификатор пользователя.   -  person Chris Hayes    schedule 07.03.2013
comment
Попробуйте разместить сообщение на pageid/links вместо pageid/feed, согласно комментарию в этом отчете об ошибке, который помогает: developers.facebook.com / bugs / 482882205102783   -  person CBroe    schedule 07.03.2013
comment
Я нашел исправление, но все равно попробую этот метод (и прочитаю отчет об ошибке). Спасибо за вашу помощь!   -  person Chris Hayes    schedule 07.03.2013


Ответы (1)


Я нашел ответ в другом посте.

    $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 ищет параметр access_token в $ data, и, поскольку я не отправлял этот массив, он не находил его (и поэтому по умолчанию использовался мой токен доступа пользователя, который я установил ранее).

После отправки данных в качестве третьего параметра вызова API я смог удалить строку:

$this->facebook->setAccessToken($page->access_token);
person Chris Hayes    schedule 07.03.2013