Facebook Graph API SDK v5-将图片发布到页面的相册

时间:2019-05-02 19:13:27

标签: facebook-graph-api facebook-php-sdk facebook-apps

我正在尝试使用Facebook PHP SDK v5 将图片发布到属于Facebook页面的相册

我已经检查了(很多)类似的问题,但是当publish_actions仍被允许时,它们都与SDK的早期版本有关。

我的设置:

  1. 我的应用程序已正确配置,并且能够检索访问令牌
  2. 我能够毫无问题地运行一些测试API查询
  3. 我是此页面的管理员,我的访问令牌具有以下权限['manage_pages','publish_pages','user_photos']
  4. 已使用'fileUpload' => true作为参数正确初始化了SDK

将图片发布到相册的代码

它基于example provided in the SDK documentation

<?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已弃用

实际上,changes introduced in April 2018删除了使用publish_actions的功能,但是似乎文档尚未进行相应的更新。

将图片发布到页面相册的新方法是什么?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

研究了数小时的替代解决方案后,我找到了解决方法。

显然我使用的是用户访问令牌,而不是页面访问令牌

解决方案

1-首先,verify(如果您的令牌是用户/页面访问令牌)

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();

我希望这会有所帮助!