You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl调用Facebook Graph API获取好友列表返回空数据求助

解决Facebook Graph API返回空好友列表的问题

看起来你遇到的问题是Facebook Graph API的权限和接口逻辑导致的,我来帮你拆解一下:

核心原因:Facebook API的好友列表限制

从Graph API v2.0开始,/{user-id}/friends接口只会返回同时安装了你的应用的好友。如果你的2位好友都没有使用你的应用,那么接口就会返回data为空,但summary.total_count会显示你实际的好友总数(也就是你截图里的2)。这是Facebook的隐私政策调整导致的,不是你的代码问题。

你需要做的几个调整:

1. 确认是否申请了user_friends权限

你在使用Socialite获取用户授权的时候,必须明确请求user_friends权限,否则Facebook不会返回任何好友相关数据。修改你的Socialite授权代码:

return Socialite::driver('facebook')
    ->scopes(['user_friends']) // 加上这个权限
    ->redirect();

注意:现在user_friends权限需要经过Facebook的应用审核,而且只有在特定的使用场景(比如游戏邀请好友、社交类应用的好友互动)下才会被批准。如果你的应用没有合理的使用场景,Facebook可能会拒绝你的权限申请。

2. 改用/me/friends替代/{id}/friends

虽然两者功能类似,但/me/friends是更标准的调用方式,而且不需要传递用户ID,直接用当前授权用户的上下文:

public function getFriendsFB($token) {
    $url = "https://graph.facebook.com/v18.0/me/friends?access_token=$token"; // 升级API版本
    $type = "GET";
    $out = $this->getCurlRequestForFacebook($url, $type);
    return $out;
}

3. 升级Graph API版本

你现在用的是v3.0,这个版本已经非常老旧了,Facebook已经停止了对旧版本的支持,建议升级到最新的稳定版本(比如v18.0),避免出现兼容性问题。你可以在Facebook开发者后台查看当前的最新版本。

4. 测试时用测试用户

如果你还在开发阶段,可以在Facebook开发者后台创建测试用户,并给测试用户添加同样使用该应用的测试好友,这样调用接口就能看到返回的好友数据了,方便你调试。

额外提示:如果需要获取所有好友(无论是否使用应用)

现在Facebook已经不再允许普通应用获取用户的全部好友列表了,除非你的应用是游戏类且符合Facebook的游戏平台政策。如果你的应用需要好友相关的功能,可以考虑使用/me/taggable_friends接口,但这个接口返回的好友只能用于在应用内标记,不能用于其他用途,而且同样需要权限审核。

内容的提问来源于stack exchange,提问作者Sahil Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:23:03