Многие сайты публикуют в социальных сетях информацию о новых материалах, это можно сделать и для Facebook. Предполагается, что вы уже создали приложение и указали разрешенные хосты для перенаправления OAuth во вкладке «Дополнительно» пункта меню «Настройки». Итак, запускаем сессию функцией session_start(), кому надо, тот может включить вывод ошибок, если он отключен.
Далее загружаем библиотеку PHP SDK (которая есть на github) и извлекаем папку src (которую можно переименовать). Затем указываем путь к автозагрузчику.
Теперь создаем экземпляр класса Facebook.
Вызываем помощника для выполнения авторизации, указываем требуемые разрешения для публикации на странице.
После вас перекинет на сайт Facebook, где нужно будет авторизоваться, затем вы перейдете по ссылке, указанной в фунции getLoginUrl(). Здесь вы в очередной раз вызываете помощника, у которого получаете access_token пользователя.
Если вы попытаетесь постить на страницу с этим токеном, то будет возвращаться ошибка «Permissions error», так как для этого нужен токен страницы. Чтобы его получить, необходимо вызвать функцию get() объекта Facebook и передать ему два параметра: часть url запроса токена страницы, содержащую id страницы, на которую вы хотите постить и полученный ранее access_token пользователя.
Полученный токен будет иметь неограниченный срок действия. Информация о токене доступна через дебаггер. Теперь можно попробовать запостить какое-нибудь сообщение.
Если потребуется, то можно выйти из Facebook.
error_reporting(E_ALL);
ini_set("display_errors", 1);
Далее загружаем библиотеку PHP SDK (которая есть на github) и извлекаем папку src (которую можно переименовать). Затем указываем путь к автозагрузчику.
require_once __DIR__ . '/папка_src/autoload.php';
Теперь создаем экземпляр класса Facebook.
$fb = new Facebook\Facebook([
'app_id' => '1234567890123456', //Замените на ваш id приложения
'app_secret' => '12345678901234567890123456789012' //Ваш секрет приложения
]);
Вызываем помощника для выполнения авторизации, указываем требуемые разрешения для публикации на странице.
$helper = $fb->getRedirectLoginHelper();
//Добавьте разрешение publish_actions, чтобы постить от имени пользователя, а не от имени страницы
$permissions = ['manage_pages','publish_pages'];
$loginUrl = $helper->getLoginUrl('url_куда_перейти_после_входа', $permissions);
echo '<a href="' . htmlspecialchars($loginUrl) . '">Вход</a>';
После вас перекинет на сайт Facebook, где нужно будет авторизоваться, затем вы перейдете по ссылке, указанной в фунции getLoginUrl(). Здесь вы в очередной раз вызываете помощника, у которого получаете access_token пользователя.
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph вернул ошибку: ' . $e->getMessage();
exit;
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK вернул ошибку: ' . $e->getMessage();
exit;
}
if (isset($accessToken))
$_SESSION['facebook_access_token'] = (string) $accessToken;
elseif ($helper->getError())
exit;
Если вы попытаетесь постить на страницу с этим токеном, то будет возвращаться ошибка «Permissions error», так как для этого нужен токен страницы. Чтобы его получить, необходимо вызвать функцию get() объекта Facebook и передать ему два параметра: часть url запроса токена страницы, содержащую id страницы, на которую вы хотите постить и полученный ранее access_token пользователя.
try {
$response = $fb->get('/id_страницы?fields=access_token', $_SESSION['facebook_access_token']);
}
catch (Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph вернул ошибку: ' . $e->getMessage();
exit;
}
catch (Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK вернул ошибку: ' . $e->getMessage();
exit;
}
//Токен страницы
echo $response->getGraphNode()['access_token'];
Полученный токен будет иметь неограниченный срок действия. Информация о токене доступна через дебаггер. Теперь можно попробовать запостить какое-нибудь сообщение.
$str_page = '/1234567890123456/feed';
$feed = array('message' => 'тест');
try {
$response = $fb->post($str_page, $feed, 'access_token_страницы');
}
catch (Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph вернул ошибку: ' . $e->getMessage();
exit;
}
catch (Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK вернул ошибку: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
echo 'Опубликовано, id: ' . $graphNode['id'];
Если потребуется, то можно выйти из Facebook.
$helper = $fb->getRedirectLoginHelper();
$logoutUrl = $helper->getLogoutUrl($_SESSION['facebook_access_token'], 'url_куда_перейти_после_выхода');
echo '<a href="' . htmlspecialchars($logoutUrl) . '">Выход</a>';