Как отправить на страницу Facebook с помощью PHP
Я бы хотел опубликовать свою собственную страницу на Facebook с моего сайта, используя PHP.
У меня есть следующее:
- Приложение Facebook с AppID, AppSecret, ApiKey
- Страница Facebook с PageID
- моя собственная учетная запись Facebook. Я - администратор и создатель приложения и страницы, упомянутых выше.
например. Я пишу запись в блоге, и я хотел бы получить имя, краткое описание и картинку на моей стене в Facebook. Или я хотел бы публиковать некоторые статьи на странице Facebook каждый день автоматически в качестве задания cron.
Не могли бы вы предоставить шаг за шагом учебник, как это сделать?
Я прочитал эту статью о Facebook Логин:
https://developers.facebook.com/docs/facebook-login/
но я до сих пор не знаю, что писать в моем коде.
ОБНОВЛЕНИЕ 1
Вот как я отправляю запрос на токен доступа к приложениям:
$url = 'https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id='
.Yii::app()->params['FacebookAppID']
.'&client_secret='
.Yii::app()->params['FacebookSecret'];
Ответ подобен этому (поддельные символы):
access_token=326584076429|ax3-D39YbpDcR9rMRQn_fMvNu_s
Что это за access_token
? Идентификатор доступа к приложениям? Как получить токен доступа пользователя?
Я попытался использовать токен доступа отсюда:
https://developers.facebook.com/tools/explorer?method=GET&path=me%2Faccounts
но я получил следующее сообщение об ошибке:
Активный токен доступа должен использоваться для запроса информации о текущем пользователе
Итак, как мне получить нужный токен доступа?
ОБНОВЛЕНИЕ 2:
Как я могу получить нужные токены Facebook в своем приложении без какого-либо взаимодействия с клиентом?
Я администратор и создатель Facebook-приложения и Facebook.
Ответы
Ответ 1
Шаг за шагом
- Аутентификация пользователя, который является администратором страницы (самостоятельно)
- Запросить токен расширенного доступа (чтобы получить 60-дневный сорт, поскольку offline_access отсутствует). См. https://developers.facebook.com/docs/offline-access-deprecation/
- API вызовов
me/accounts
и выполните поиск по списку, чтобы найти интересующую вас страницу.
- Возьмите токен доступа к странице со страницы и начните использовать это для вызовов, чтобы отправить сообщение
- Возможно, можно получить токен доступа для токена доступа к странице, как описано в шаге 2, пожалуйста, попробуйте сообщить нам, если это можно сделать и для токена доступа к странице.
Вы можете поэкспериментировать с приведенным выше в https://developers.facebook.com/tools/explorer
Счастливое кодирование!
ИЗМЕНИТЬ
Для получения токена доступа без диалогов для любого пользователя вы можете использовать https://developers.facebook.com/tools/access_token/, чтобы получить токен доступа.
Ответ 2
Шаги:
-
Запрос для разрешения manage_pages (разрешить этот процесс):
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=manage_pages&response_type=token
-
Получить токен доступа по URL-адресу:
Если администратор разрешает это разрешение. Вы должны перенаправить URL-адрес ниже:
http://YOUR_URL/#access_token=AAABY5jBXQz0BAEzNKkb6FZC22D7aOoKIfFuozIjoOpkGHRJ6SyzBvqx24JGooMc31374EdRFNXkOyLZCBzETRD9vhZAZC8MZD&expires_in=0
Используйте токен доступа в URL-адресе, и вы должны это сделать:
AAABY5jBXQz0BAEzNKkb6FZC22D7aOoKIfFuozIjoOpkGHRJ6SyzBvqx24JGooMc31374EdRFNXkOyLZCBzETRD9vhZAZC8MZD
-
Проверить маркер доступа с помощью Graph API:
https://graph.facebook.com/me/accounts?access_token=TOKEN_FROM_ABOVE
Соединение будет возвращать информацию и токен доступа для каждой страницы.
-
Внесите его в свой код:
Вы можете использовать токен доступа к приложениям, вызывая метод API Facebook Graph.
Update:
Если вы хотите использовать API-метод в Facebook SDK, DEPRECATED REST API или FQL Query...
Вы должны использовать users_accesstoken
следующим образом:
-
Метод 1:
Используйте свою учетную запись или пользователей для входа на свою страницу Facebook с разрешениями offline_access и захватите access_token во время успешного входа в систему, используя $facebook->getAccessToken()
, и сохраните ее в базе данных, чтобы вы могли ее использовать в любое время.
Вы можете проверить время истечения срока действия токена здесь, токен с разрешениями offline_access
никогда не истекает, кроме случаев, когда пользователь меняет свой пароль или, возможно, что-то еще.
-
Способ 2:
Вы можете динамически обновлять access_token
, используя приведенный ниже код (попрощайтесь с токеном истечения). Facebook показывает это решение здесь, это пример кода для выполнения запроса FQL:
Код:
<?php
$app_id = 'YOUR_APP_ID';
$app_secret = 'YOUR_APP_SECRET';
$my_url = 'POST_AUTH_URL';
$code = $_REQUEST["code"];
//auth user
if(empty($code)) {
$dialog_url = 'https://www.facebook.com/dialog/oauth?client_id='
. $app_id . '&redirect_uri=' . urlencode($my_url) ;
echo("<script>top.location.href='" . $dialog_url . "'</script>");
}
//get user access_token
$token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
. $app_id . '&redirect_uri=' . urlencode($my_url)
. '&client_secret=' . $app_secret
. '&code=' . $code;
$access_token = file_get_contents($token_url);
Ответ 3
Попробуйте эту простую функцию для публикации на стене:
function doWallPost($postName = '', $postMessage = '', $postLink = '', $postCaption = '', $postDescription = '') {
$FB_APP_ID = 'xxxxxxxxxxxxxxxxxxxxxxxx';
$FB_APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx';
$APP_RETURN_URL = ((substr($_SERVER['SERVER_PROTOCOL'], 0, 4) == "HTTP") ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
$code = $_REQUEST["code"];
if (empty($code)) {
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $FB_APP_ID . "&redirect_uri=" . $APP_RETURN_URL . "&scope=publish_stream";
header("Location:$dialog_url");
}
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $FB_APP_ID . "&redirect_uri=" . urlencode($APP_RETURN_URL) . "&client_secret=" . $FB_APP_SECRET . "&code=" . $code;
$access_token = file_get_contents($token_url);
$param1 = explode("&", $access_token);
$param2 = explode("=", $param1[0]);
$FB_ACCESS_TOKEN = $param2[1];
$url = "https://graph.facebook.com/me/feed";
$attachment = array(
'access_token' => $FB_ACCESS_TOKEN,
'name' => $postName,
'link' => $postLink,
'description' => $postDescription,
'message' => $postMessage,
'caption' => $postCaption
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
$result = curl_exec($ch);
header('Content-type:text/html');
curl_close($ch);
return $result;
}