В настоящее время у меня проблема с API Facebook, который не встречался летом 2012 года. В моем приложении facebook пользователь может ввести текст в текстовое поле, которое затем отправляется на фан-страницу facebook, так же, как он сам отправился на страницу на facebook и разместил ее там.
Поэтому для моего приложения требуются расширенные разрешения publish_stream
чтобы отправлять сообщения на ленту страниц.
Чтобы решить эту проблему, я делал следующее:
try{ $response_object = $fb->api('XXX/feed', 'POST', array( 'message' => $input->post('user_text'), )); } catch(Exception $e){ die($e->getMessage()); }
В прошлом году это работало без проблем. На фиде страницы (PageId заменено на XXX в фрагменте кода выше) на странице появляется сообщение, которое использовало приложение.
К моему удивлению, исключение из приведенного выше фрагмента было принято, когда я попытался сделать то же самое сегодня. Я ничего не изменил, как обрабатываю данные с помощью API-интерфейсов.
Сообщение, которое я получил, следующее:
(#283) Requires extended permission: manage_pages
Мне не нужно публиковать сообщения в стене как администратор страницы, а как пользователь. Я получил токен доступа пользователей при авторизации с разрешениями publish_stream, и я не хочу иметь разрешение manage_pages
так как мне просто не нужно управлять страницей пользователей.
То, что я хочу сделать, это просто отправить на страницу поклонника, как пользователь, который использует приложение.
Заменила ли Facebook в последнее время что-нибудь в «процедуре после подачи» или я лично что-то пропустил?
Заранее спасибо
Извините за то, что так эгоистично. Я решил проблему через несколько дней после того, как задал этот вопрос. Не спрашивайте меня, почему, но, используя CURL при отправке на фид страниц в качестве пользователя, все работает так, как ожидалось.
<?php $postfields = array( 'message' => 'The message to be posted on the feed', 'link' => 'http://anyurl.com', 'access_token' => 'A_VALID_USER_ACCESS_TOKEN', // This is the important part, don't miss it ); $posturl = 'https://graph.facebook.com/PAGE_ID/feed'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $posturl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); curl_close($ch); ?>
Обратите внимание, что вам запрещено публиковать предопределенный контент, но всегда позволяйте пользователю публиковать сообщение. В противном случае facebook приостановит ваше приложение от возможности отправлять сообщения в фиды страниц.
Это может быть связано с проблемой, которая запрещает пользователям, которые являются администраторами данной страницы, размещать на канале этих страниц (как пользователь не как страница).
Проверьте, если это произойдет, если вы пытаетесь опубликовать его как обычного пользователя (а не как администратора страницы). По моему опыту, сред. пользователь может это сделать, если у приложения есть разрешения: publish_stream, publish_action.
Вот мой отчет об ошибке: https://developers.facebook.com/bugs/167764356741336?browse=external_tasks_search_results_51f780dd6e9da2d82532422