调用Facebook API发布带图页面帖失败,报OAuthException错误
Facebook API 带图片发帖报错排查(OAuthException code:1)
操作流程与问题
我尝试通过Facebook API向Facebook页面发布含图片的帖子,操作步骤如下:
1. 上传图片
$res = Http::post( env("FB_API") . 'my-page-id' . "/photos?access_token=" . 'my-access-token', [ "url" => 'https://cdn.filestackcontent.com/DAOSdaS9ed3GPsJlAmqw', ] );
返回结果:
{"id":"52305359978858","post_id":"31457605812596_523305373312190"}
2. 发布帖子
$id = json_decode($res->body())->id; $uri = env("FB_API") . 'my-page-id' . "/feed?access_token=" . 'my-access-token'. '&attached_media[0]={"media_fbid":"'.$id.'"}'; $res = Http::post($uri, [ 'message' => "test" ]);
错误信息
{"error":{"message":"An unknown error has occurred.","type":"OAuthException","code":1,"fbtrace_id":"ARajcZtA7tWcd05G5V71pr"}}
无图片时发帖可正常成功,当前令牌权限包括:
pages_read_engagement, pages_manage_posts, pages_show_list, instagram_basic, instagram_content_publish, instagram_manage_comments
错误原因与解决办法
1. 参数传递方式错误
attached_media参数被放在URL查询参数中,导致JSON字符串被自动转义,格式被破坏。Facebook API要求该参数必须放在POST请求的body中,且需为JSON字符串格式。
2. 图片上传逻辑问题
当前上传图片后返回了post_id,说明图片已自动生成一条独立帖子,再用该id关联新帖子会引发冲突。需在上传时添加published=false参数,让图片仅作为媒体资源上传,不自动发布帖子。
3. 修正后的代码
上传图片(修改版)
$res = Http::post( env("FB_API") . 'my-page-id' . "/photos?access_token=" . 'my-access-token', [ "url" => 'https://cdn.filestackcontent.com/DAOSdaS9ed3GPsJlAmqw', "published" => false // 仅上传媒体,不自动发帖 ] );
发布帖子(修改版)
$mediaData = json_decode($res->body()); $uri = env("FB_API") . 'my-page-id' . "/feed?access_token=" . 'my-access-token'; $res = Http::post($uri, [ 'message' => "test", 'attached_media' => json_encode([ ["media_fbid" => $mediaData->id] ]) ]);
额外验证建议
- 确认使用的是页面令牌而非用户令牌,可通过官方令牌调试工具检查令牌的权限、过期时间及关联页面是否匹配。
- 确保图片URL可被Facebook服务器正常访问,无防盗链或权限限制。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

