Facebook Graph API SDK v5 - публикация изображения в альбоме страницы - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь опубликовать изображение в альбом, принадлежащий странице Facebook , используя Facebook PHP SDK v5.

Я уже проверил (много) похожих вопросов, однако все они связаны с предыдущими версиями SDK, когда publish_actions был разрешен.

Моя настройка:

  1. Мое приложение правильно настроено, и мне удалось получить токен доступа
  2. Мне удалось выполнить несколько тестовых запросов API без проблем
  3. Я администратор этой страницы, и мой токен доступа имеет следующие разрешения ['manage_pages','publish_pages','user_photos']
  4. SDK был правильно инициализирован с 'fileUpload' => true в качестве параметра

Код публикации изображения в альбоме

Он основан на примере , приведенном в документации SDK .

<?php

require_once __DIR__.'/vendor/autoload.php';

$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$access_token = 'mytoken';

try {
    $response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $access_token);
} 
catch(Facebook\Exceptions\FacebookResponseException $e) {
    die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
    die('Facebook SDK returned an error: ' . $e->getMessage());
}

$graphNode = $response->getGraphNode();

Вот ошибка, которую я получаю

График возвратил ошибку: (# 200) Эта конечная точка устарела, поскольку требуемое разрешение publish_actions устарело

Действительно, изменения, внесенные в апреле 2018 г. удалили возможность использовать publish_actions, однако, похоже, что документация не была обновлена ​​соответствующим образом.

Каков новый способ публикации изображения в альбоме страницы?

Ваша помощь очень ценится!

1 Ответ

0 голосов
/ 03 мая 2019

После нескольких часов поиска альтернативных решений мне удалось найти обходной путь.

Очевидно, я использовал токен доступа пользователя вместо токена доступа к странице .

Решение

1 - Сначала проверьте , является ли ваш токен токеном пользователя / доступа к странице

2 - если это токен пользователя, вам нужно запросить токен доступа к странице:

$user_access_token = 123456;
$page_id = 123456; // Can be retrieved via right click on your page logo + Copy link address
$response = $fb->get('/'.$page_id.'?fields=access_token',  $user_access_token);
$page_access_token = json_decode($response->getBody())->access_token;
echo $page_access_token;

3 - Наконец, опубликуйте картинку на странице с помощью токена доступа к странице

Полный код

<?php

require_once __DIR__.'/vendor/autoload.php';

$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$user_access_token = 'mytoken';
$page_id = 123456;

try {
    $response = $fb->get('/'.$page_id.'?fields=access_token', $user_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    die('Graph returned an error: ' . $e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    die('Facebook SDK returned an error: ' . $e->getMessage());
}

$page_access_token = json_decode($response->getBody())->access_token;

try {
    $response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $page_access_token);
} 
catch(Facebook\Exceptions\FacebookResponseException $e) {
    die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
    die('Facebook SDK returned an error: ' . $e->getMessage());
}

$graphNode = $response->getGraphNode();

Надеюсь, это поможет!

...