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

от автора

Многие сайты публикуют в социальных сетях информацию о новых материалах, это можно сделать и для 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>'; 


ссылка на оригинал статьи https://habr.com/ru/post/481482/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *