#php #facebook #facebook-graph-api
#php #Facebook #facebook-graph-api
Вопрос:
Я написал код для публикации сообщения на своей странице (не на собственной временной шкале)
post.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
session_start();
$fb = new FacebookFacebook([
'app_id' => 'xxxxxxxxxxxxxx',
'app_secret' => 'xxxxxxxxxxxxxx',
'default_graph_version' => 'v2.5',
]);
$data = [
'message' => 'My awesome photo upload example.',
];
try {
// Returns a `FacebookFacebookResponse` object
$response = $fb->post('/xxxxxxxxxxxxxx/feed', $data, $_SESSION['facebook_access_token']);
} catch(FacebookExceptionsFacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
echo 'Photo ID: ' . $graphNode['id'];
index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
session_start();
$app_id = 'xxxxxxxxxxxxxx';
$app_secret = 'xxxxxxxxxxxxxx';
$fb = new FacebookFacebook([
'app_id' => $app_id,
'app_secret' => $app_secret,
'default_graph_version' => 'v2.4',
'default_access_token' => isset($_SESSION['facebook_access_token']) ? $_SESSION['facebook_access_token'] : 'APP-ID|APP-SECRET'
]);
try {
$response = $fb->get('/xxxxxxxxxxxxxx?fields=id,name');
$user = $response->getGraphUser();
echo 'Name: ' . $user['name'];
//exit; //redirect, or do whatever you want
} catch(FacebookExceptionsFacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
} catch(FacebookExceptionsFacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
}
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes', 'manage_pages', 'publish_actions'];
$loginUrl = $helper->getLoginUrl('http://xxxxxxxxxxxxxx/facebook/login-callback.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
login-callback.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
session_start();
$app_id = 'xxxxxxxxxxxxxx';
$app_secret = 'xxxxxxxxxxxxxx';
$fb = new FacebookFacebook([
'app_id' => $app_id,
'app_secret' => $app_secret,
'default_graph_version' => 'v2.4',
'default_access_token' => 'APP-ID|APP-SECRET'
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(FacebookExceptionsFacebookResponseException $e) {
// When Graph returns an error
//echo 'Graph returned an error: ' . $e->getMessage();
} catch(FacebookExceptionsFacebookSDKException $e) {
// When validation fails or other local issues
//echo 'Facebook SDK returned an error: ' . $e->getMessage();
}
if (isset($accessToken)) {
// Logged in!
$_SESSION['facebook_access_token'] = (string) $accessToken;
} elseif ($helper->getError()) {
// The user denied the request
}
header('Location: index.php');
Это просто работает, когда в файле post.php
используется этот код:
$response = $fb->post('/me/feed', $data, $_SESSION['facebook_access_token']);
А затем публикация отображается на моей временной шкале.
Но когда я хочу опубликовать на странице и использовать это:
$response = $fb->post('/xxxxxxxxxxxxxx/feed', $data, $_SESSION['facebook_access_token']);
не работает и ничего не отображается, и не показывайте мой пост на странице или временной шкале!
Комментарии:
1. Вам нужно использовать токен доступа к странице
2. Убедитесь, что вы используете правильные разрешения при генерации URL-адреса для входа. Токен доступа пользователя с разрешением publish_actions может использоваться для публикации новых сообщений от имени этого человека. Сообщения будут отображаться голосом пользователя. Токен доступа к странице с разрешением publish_pages может использоваться для публикации новых сообщений от имени этой страницы. Сообщения будут отображаться в озвучке страницы.
3. @WizKid, @Pazuzu156 Вы сказали правильно, но проблема в том, что при входе в facebook и получении
facebook_access_token
Это для зарегистрированного пользователя (не для доступа к странице), теперь, как я могу предоставить facebook токен доступа к странице после входа?! Для тестирования я используюGraph API Explorer
и выбираю страницу и получаю токен доступа и использую его напрямую (без входа пользователя), но я выдаю эту ошибку:Graph returned an error: Invalid appsecret_proof provided in the API argument
и…4. @WizKid, @Pazuzu156 … и для ее решения в
srcFacebookFacebookRequest.php
файле прокомментируйте строку # 470 ($params['appsecret_proof'] = $this->getAppSecretProof();
), после нее я публикую сообщение об успешном завершении страницы. Но это не очень хорошее решение.5. Не используйте graph Explorer. Прочитайте документацию на developers.facebook.com/docs/pages/access-tokens