Интеграция с Facebook из PHP проста с помощью PHP SDK Facebook и некоторых HTTP-библиотек, таких как Zend_Http_Client или PEAR HTTP_Request2. В этой статье я покажу вам, как начать использовать Facebook PHP SDK. Вы узнаете об API Graph Facebook и создадите приложение Facebook, способное обновлять ваше статусное сообщение и загружать фотографии.
Если у вас его еще нет, вы можете клонировать или загрузить PHP SDK с GitHub . Вам также понадобится подтвержденная учетная запись Facebook.
Регистрация вашего приложения на Facebook
Сначала вам нужно зарегистрировать свое приложение на Facebook. Перейдите по адресу developers.facebook.com/apps и нажмите кнопку « Создать новое приложение» в верхней части страницы.
В открывшемся диалоговом окне запрашивается имя и пространство имен для вашего приложения. Отображаемое имя приложения — это имя вашего приложения, которое будет показано пользователям. Пространство имен приложения — это пространство имен, которое ваше приложение будет использовать для Open Graph и Canvas Page.
После регистрации приложения вы попадете на экран «Основные настройки», на котором вам нужно указать, как ваше приложение будет интегрироваться с Facebook:
- Веб-сайт — опция веб-сайта используется для добавления социальных функций на ваш сайт.
- Приложение на Facebook — эта опция приложения Facebook встраивает ваше приложение на страницу Facebook Canvas. Код размещается на ваших серверах, но выполняется в контексте страницы Facebook, аналогично IFrame.
- Мобильная сеть — опция мобильной сети аналогична опции интеграции с веб-сайтом, хотя и предназначена для мобильных сайтов.
- Собственное приложение для iOS / Android — встроенные опции позволяют интегрировать данные Facebook в приложения для iOS и Android.
- Вкладка страницы — опция вкладки представляет ваше приложение как вкладку страницы Facebook.
Для целей этой статьи я буду использовать вариант интеграции с веб-сайтом. Мое приложение будет автономным веб-сайтом, и после авторизации Facebook перенаправит пользователя на указанный URL-адрес. Установите флажок рядом с параметром и введите URL-адрес страницы входа вашего приложения. Затем обязательно нажмите кнопку « Сохранить изменения» внизу страницы.
Вы также должны отметить значения App ID и App Secret в верхней части страницы, поскольку эти значения понадобятся вам для подключения вашего приложения к Facebook.
Использование SDK
Функциональность подключения и взаимодействия с Facebook предоставляется через объект Facebook
Конструктор принимает массив параметров, которые содержат информацию о вашем приложении, например, идентификатор приложения и секрет приложения, которые отображаются на странице основных настроек вашего приложения.
<?php
session_start();
require_once "php-sdk/src/facebook.php";
$config = array(
"appId" => FACEBOOK_APP_ID,
"secret" => FACEBOOK_APP_SECRET);
$fb = new Facebook($config);
авторизация
Метод getUser()
Информация может быть или не быть доступной, в зависимости от того, вошел ли пользователь в систему или нет. Если метод возвращает 0, то вы знаете, что пользователь не вошел в систему.
<?php
$user = $fb->getUser();
Ссылка для входа в систему, которая служит отправной точкой для процесса аутентификации OAuth с Facebook, получается с помощью getLoginUrl()
getLoginUrl()
redirect_uri и scope .
<?php
$params = array(
"redirect_uri" => REDIRECT_URI,
"scope" => "email,read_stream,publish_stream,user_photos,user_videos");
echo '<a href="' . $fb->getLoginUrl($params) . '">Login</a>';
Redirect_url должен быть тем же адресом, который вы указали для URL сайта при регистрации приложения. Область действия — это список запрошенных разрешений, необходимых приложению, через запятую. Приложениям разрешен доступ к информации общего профиля и другим настройкам по умолчанию, разрешенным Facebook, когда пользователь вошел в систему, но если вы хотите получить доступ к дополнительным функциям (таким как публикация сообщений о состоянии), вы должны быть авторизованы пользователем для этого. Документация разработчиков Facebook имеет список доступных разрешений . Здесь я запросил разрешение на доступ к адресу электронной почты пользователя, чтению и публикации обновлений статуса, публикации фотографий и видео.
Независимо от того, принимает ли пользователь запрос и входит ли он в Facebook или отклоняет ли он запрос, он будет перенаправлен обратно на redirect_uri, и в качестве параметров URL будут доступны несколько значений. Отклонение будет включать в себя параметры error
error_reason
error_description
http://example.com/facebook/myapp.php?error=access_denied&error_reason=user_denied&error_description=The+user+denied+your+request.
Успешная аутентификация / авторизация добавит параметр code
http://example.com/facebook/myapp.php?code=TOKEN_VALUE
Затем этот код используется для запроса токена доступа:
https://graph.facebook.com/oauth/access_token?client_id=FACEBOOK_APP_ID&redirect_uri=FACEBOOK_REDIRECT_URI&client_secret=FACEBOOK_APP_SECRET&code=TOKEN_VALUE
Поскольку вы используете SDK, который обрабатывает все это для вас, я не буду больше вдаваться в то, как работает OAuth. Если вы заинтересованы в получении дополнительной информации, прочитайте статью Дастина Раннелла « Понимание OAuth» и документацию SDK по аутентификации . (Facebook использует OAuth v2 и статью Дастина, посвященную v1, но он все же даст вам хорошее представление о роли запросов и учетных данных, которые играют в этом процессе).
API Graph
После того, как пользователь предоставит разрешение, вы можете прочитать пользовательский поток сообщений о состоянии с помощью запроса GET
https://graph.facebook.com/me/feed?access_token=ACESS_TOKEN
Кроме того, вы можете использовать метод api()
<?php
$data = $fb->api("/me/feed");
В этом случае метод api()
GET
Graph API предоставляет интерфейс для доступа к участникам и отношениям в социальной сети Facebook. Каждый участник имеет уникальный идентификатор, и к нему можно получить доступ в стиле REST через ресурсы, начинающиеся с «https://graph.facebook.com». Например, отправив запрос GET
https://graph.facebook.com/harikt
вернет объект JSON с основной общедоступной информацией обо мне и моем профиле.
{ "id": "596223095", "имя": "Хари кт", "first_name": "Hari", "last_name": "Kt", "ссылка": "http://www.facebook.com/harikt", "username": "harikt", "мужской пол", "locale": "en_US" }
Для некоторых запросов требуется токен доступа. Запрос ленты обновлений сообщений является привилегированным действием, поэтому отправка запроса GET
https://graph.facebook.com/harikt/feed
вернет объект JSON, заполненный информацией об ошибке OAuthException
{ "ошибка": { "message": "Требуется токен доступа для запроса этого ресурса.", "type": "OAuthException" } }
Идентификатор me
Чтобы добавить обновление в фид пользователя с помощью метода api()
POST
/me/feed
сообщения .
<?php
$data = array("message" => "Hello World!");
$status = $fb->api("/me/feed", "POST", $data);
Чтобы загрузить новую фотографию, вы должны сделать запрос POST
/me/photos
ALBUM_ID/photos
name и image .
<?php
$fb->setFileUploadSupport(true);
$data = array(
"name" => "a vacation photo",
"image" => "@/home/hari/vacation/img42.jpg");
$status = $fb->api("/me/photos", "POST", $data);
SDK использует расширение PHP cURL для публикации данных, а вызов setFileUploadSupport()
true
CURLOPT_POSTFIELDS
Также с cURL связано использование @
См. Описание для CURLOPT_POSTFIELDS
документации PHP curl_setopt()
для получения дополнительной информации.
Чтобы узнать больше о Graph API в Facebook, я рекомендую вам прочитать документацию по Graph API и поэкспериментировать с Graph API Explorer, довольно удобной утилитой.
Ваше первое приложение
Давайте соберем все, что вы узнали сейчас, и напишем очень простой пример приложения для Facebook. Он предложит пользователю войти в систему и авторизовать приложение, а затем даст ему возможность обновить свое статусное сообщение и загрузить фотографию.
<?php
session_start();
require_once "php-sdk/src/facebook.php";
$config = array(
"appId" => FACEBOOK_APP_ID,
"secret" => FACEBOOK_APP_SECRET);
$fb = new Facebook($config);
$user = $fb->getUser();
?>
<html>
<head>
<title>Hello Facebook</title>
</head>
<body>
<?php
if (!$user) {
$params = array(
"scope" => "read_stream,publish_stream,user_photos",
"redirect_uri" => REDIRECT_URI);
echo '<a href="' . $fb->getLoginUrl($params) . '">Login</a>';
}
else {
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" enctype="multipart/form-data">
<textarea name="message" id="message" rows="2" cols="40"></textarea><br>
<input type="file" name="image" id="image"><br>
<input type="submit" value="Update">
</form>
<?php
// process form submission
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST["message"])) {
if (is_uploaded_file($_FILES["image"]["tmp_name"])) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["image"]["tmp_name"]);
$allowed = array("image/gif", "image/jpg", "image/jpeg", "image/png");
// upload image
if (in_array($mime, $allowed)) {
$data = array(
"name" => $_POST["message"],
"image" => "@" . realpath($_FILES["image"]["tmp_name"]));
$fb->setFileUploadSupport(true);
$status = $fb->api("/me/photos", "POST", $data);
}
}
else {
// update status message
$data = array("message" => $_POST["message"]);
$status = $fb->api("/me/feed", "POST", $data);
}
}
if (isset($status)) {
echo "<pre>" . print_r($status, true) . "</pre>";
}
}
?>
</body>
</html>
Код представляет ссылку для входа или выхода в зависимости от ситуации в зависимости от возвращаемого значения getUser()
Затем отображается простая форма HTML, которая позволяет пользователю вводить сообщение о состоянии и, возможно, файл изображения. Когда пользователь отправляет форму, код проверяет загруженное изображение, если оно предоставлено, и публикует его в Facebook или выполняет только обновление сообщения о состоянии.
Резюме
Данный код предназначен для демонстрационных целей, и я пропустил множество проверок, связанных с фильтрацией и безопасностью, которые вы хотели бы выполнять при написании реальных приложений. Тем не менее, он подчеркивает основные моменты, представленные в этой статье. PHP PHP SDK упрощает интеграцию с Facebook. Он описывает работу с аутентификацией OAuth и API Graph Facebook.
Изображение через mkabakov / Shutterstock