Кросспостинг на страницу Facebook с помощью PHP SDK -7


Многие сайты публикуют в социальных сетях информацию о новых материалах, это можно сделать и для Facebook. Предполагается, что вы уже создали приложение и указали разрешенные хосты для перенаправления OAuth во вкладке «Дополнительно» пункта меню «Настройки». Итак, запускаем сессию функцией session_start(), кому надо, тот может включить вывод ошибок, если он отключен.

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>';




К сожалению, не доступен сервер mySQL