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/
Добавить комментарий