проблема с публикацией на странице facebook с api

#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