Facebook Graph API v11升级v12后发布内容报错问题咨询
问题解决方案
核心原因
Facebook Graph API v12 版本起正式永久废弃publish_actions权限,同时调整了公共主页内容发布的权限校验逻辑,旧版本适配逻辑不再兼容。
修复步骤
1. 权限与令牌调整
- 首先确认你的应用已经申请并通过了
pages_read_engagement、pages_manage_posts两个权限的审核(未公开的测试应用可直接在测试用户/测试主页权限配置中开启,无需审核) - 不要使用用户令牌发起发布请求,需前往Graph API调试工具生成目标公共主页对应的页面令牌,确保令牌有效期为长期有效,且权限列表包含上述两个权限
- 确认生成令牌的Facebook账号对目标公共主页拥有至少「编辑」及以上的管理权限
2. 代码调整
原有代码缺少Graph API版本声明,且端点使用/me/photos容易被识别为用户个人主页发布,需做两处修改:
- 初始化Facebook实例时显式指定v12版本
- 发布端点替换为
/{你的公共主页ID}/photos,也可以在传入正确页面令牌的情况下保留/me/photos,显式指定ID兼容性更高
修改后的代码示例:
require_once __DIR__ . '/vendor/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => '[App ID]', 'app_secret' => '[App Secret]', 'default_graph_version' => 'v12.0', // 新增版本声明 ]); // 此处替换为你生成的目标公共主页页面令牌 $fb->setDefaultAccessToken('[页面访问令牌]'); $data = [ 'message' => 'Testing 1..2..3..', 'source' => $fb->fileToUpload('/path/to/file.jpg'), ]; try { // 替换[目标主页ID]为你的公共主页数字ID $response = $fb->post('/[目标主页ID]/photos', $data); } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); echo 'Photo ID: ' . $graphNode['id']; ?>
3. 额外校验项
- 确认应用已经和目标公共主页完成关联,可在公共主页设置的「应用」板块查看
- 不要在请求参数中携带任何和
publish_actions相关的配置,该权限已完全下线 - 若仍报错,可先将令牌放到Graph API调试工具中,直接调用发布接口排查权限或参数问题
内容的提问来源于stack exchange,提问作者yoi55
相关产品推荐
相关产品推荐

