Получить маркер доступа к странице с Facebook API 5.0 PHP

Мне нужно размещать сообщения на странице Facebook. В частности, я хочу опубликовать через cron.

вот что говорят документы API:

маркер доступа к странице - эти маркеры доступа похожи на маркеры доступа пользователя, за исключением того, что они предоставляют разрешения API, которые читают, пишут или изменяют данные, принадлежащие странице Facebook. Чтобы получить маркер доступа к странице, вам нужно начать с получения маркера доступа пользователя и запроса разрешения manage_pages. Как только вы маркер доступа пользователя затем вы получаете маркер доступа к странице через API Graph.

Как я могу получить доступ пользователя и маркер доступа к странице без обратного вызова страницы? Возможно ли это?

4 ответов


что вам нужно это расширенный маркер страницы, он действителен навсегда. Вы получаете один, как это:

  • авторизоваться с помощью manage_pages разрешения (и publish_pages Если вы хотите разместить страницу позже), чтобы получить токен пользователя
  • расширить токен пользователя
  • использовать /me/accounts?fields=access_token С помощью расширенного маркера пользователя, чтобы получить список всех ваших страниц с расширенными маркерами страниц-или использовать /page-id?fields=access_token чтобы получить расширенный маркер страницы для определенной страницы

информация о все токены и как расширить токен пользователя:


PHP API V5

приведенный ниже код работал для меня после 24 часов чесания головы .... надеюсь, это поможет кстати, если вам нужен этот код для работы, вы должны были выполнить первые два шага

  1. должен иметь вход в facebook, который я использовал getRedirectLoginHelper
  2. установите переменную сеанса с полученным маркером доступа пользователя в файле обратного вызова $_SESSION['fb_access_token'] = (string) $accessToken;

$fbApp  = new Facebook\FacebookApp( 'xxx', 'xxx', 'v2.7' );
$fb      = new Facebook\Facebook( array(
    'app_id' => 'xxx',
    'app_secret' => 'xxx',
    'default_graph_version' => 'v2.7'
) );
$requestxx = new FacebookRequest(
    $fbApp,
    $_SESSION['fb_access_token'],//my user access token
    'GET',
    '/{page-id}?fields=access_token',
    array( 'ADMINISTER' )
);
$responset  = $fb->getClient()->sendRequest( $requestxx );
$json           = json_decode( $responset->getBody() );
$page_access    = $json->access_token;

//posting to page   
$requesty = new FacebookRequest(
    $fbApp,
    $page_access ,
    'POST',
    '/{page-id}/feed?message=Hello fans YYYYYYYYYYYYYYY'
);
$response = $fb->getClient()->sendRequest( $requesty );
var_dump( $response );

вы можете получить маркер страницы таким образом:

$response = $fb->get('/'.$pageId.'?fields=access_token', (string)$accessToken);
$json = json_decode($response->getBody());
$page_token = $json->access_token;
$response = $fb->post('/'.$pageId.'/feed', $fbData, $page_token);

у меня есть только код JavaScript, но как только у вас есть маркер доступа, вы можете получить страницы, которые могут быть администрированы данным пользователем. Это будет содержать маркер доступа к странице для каждого из них:

jQuery.ajax({type: "GET",
                url: "https://graph.facebook.com/v2.2/me/accounts?access_token=" + userToken,
                async: false,
                data: jsonRequest,
                dataType: "json",
                cache: false,
                success: function(data)
                {

данные возвращаются как:

{
  "data": [
    {
      "access_token": "CAACni8TcBB0B...cZBJfwZDZD",
      "category": "Computers/Technology",
      "name": "abc",
      "id": "...",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    },
    {
      "access_token": "CAA...ZDZD",
      "category": "App Page",
      "name": "xyz",
      "id": "....",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }
  ],

access_token - это маркер вашей страницы. Вы можете легко преобразовать запрос в PHP.