Я использую Facebook PHP SDK 3.0.1 (последний в настоящее время). То, что мне нужно, это опубликовать как личность страницы на странице.
Я попытался заменить access_token на access_token, который я получаю со страницы (/ me / accounts), однако теперь он говорит, что токен некорректен по какой-либо причине. Facebook «олицетворение» страниц теперь отключен, и я не вижу никакой информации в API о том, что я делаю. Может быть, я потерялся или, может быть, не смотрю в правильном направлении.
Вот пример.php, который я модифицировал и использовал для архивирования:
require '../src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'xxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx' )); // Get User ID $user = $facebook->getUser(); //Lists all the applications and pages if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $accounts_list = $facebook->api('/me/accounts'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } $page_selected = 'xxxxxxxxxxxx'; $page_access_token = $accounts_list['data']['0']['access_token']; echo 'page_access_token:' . $page_access_token; <?php if (isset($_GET['publish'])){ try { $publishStream = $facebook->api("/$page_selected/feed", 'post', array( 'access_token' => '$page_access_token', 'message' => 'Development Test message', 'link' => 'http://xxxxxxx.com', 'picture' => 'http://img.ruphp.com/php/xxxx_logo.gif', 'name' => 'xxxxxxxx Goes Here', 'description'=> 'And the exciting description here!' ) ); //as $_GET['publish'] is set so remove it by redirecting user to the base url } catch (FacebookApiException $e) { echo($e); echo $publishStream; echo 'catch goes here'; } } ?>
Поскольку я не могу ответить на свой вопрос, я отредактировал вопрос.
Прошел через весь API.
Перед публикацией в качестве страницы вам необходимо указать свой доступ к странице входа на одну страницу.
$facebook->setAccessToken($page_access_token);
делает это, а потом все идет так, как обычно ожидалось, нет необходимости изменять функцию post и добавлять параметр «access_token» для публикации.
1. Сначала вам нужно получить токен доступа к странице.
public function getPageToken() { $page_id = "xxxxxxxxxx"; $page_access_token = ""; $result = $this->facebook->api("/me/accounts"); if( !empty($result['data']) ) { foreach($result["data"] as $page) { if($page["id"] == $page_id) { $page_access_token = $page["access_token"]; break; } } } else { $url = "https://www.facebook.com/dialog/oauth?client_id=xxxxxxxxxx&redirect_uri=http://apps.facebook.com/xxxxxx&scope=manage_pages&response_type=token"; echo "<script type='text/javascript'> top.location.href='".$url."'; </script>"; } return $page_access_token; }
2.После получения маркера доступа к странице просто включите этот токен в свой пост в код стены.
<script src="//connect.facebook.net/en_US/all.js"></script> <script type="text/javascript"> var token = '<?php echo $page_access_token ?>'; var wallPost = { access_token: token, message : 'xxxxxxxx', link : 'http://apps.facebook.com/xxxxxxx/', picture : 'xxxxxxxx', name : 'xxxxx', caption : 'xxxxxx', description : 'xxxxxxx', }; FB.api('/pageid/feed', 'post', wallPost, function(response) { if (!response || response.error) { } else { } }); </script>
3. Помните, что этот код будет публиковать только ваше сообщение на стене страницы Фан, и пользователи, которым понравилась страница поклонника, смогут увидеть эту запись, поскольку сообщение опубликовано на своем собственном канале.
Надеюсь, это решит вашу проблему.