如何通过Facebook Graph API与Laravel Socialite获取商家页面信息
问题描述
我使用Laravel Socialite包调用Facebook Graph API,希望获取关联普通Facebook账号的商家页面或商家账户信息。目前通过端点 https://graph.facebook.com/user_id/accounts 可以正常获取用户及相关页面信息,但尝试获取所有商家页面/账户时遇到问题:
- 调用
/user-id/business_users返回空数据 - 调用
/user-id/businesses出现(#100) Missing Permission错误
解决方案
1. 先理清三个端点的差异
/user-id/accounts:返回用户管理的Facebook公共主页,这正是你已经能用的接口,普通商家页面的核心信息(名称、分类、页面访问令牌等)都在这里。/user-id/business_users:返回用户在**商务管理平台(Business Manager)**中的身份信息,只有当用户加入了某个商务管理平台时才会返回数据,空结果说明当前用户未关联任何商务管理平台。/user-id/businesses:返回用户拥有或管理的商务管理平台账户,这个接口需要特定权限才能调用。
2. 解决 /user-id/businesses 的权限错误
要调用这个接口,你的应用必须获取 business_management 权限,操作步骤如下:
- 在Laravel Socialite生成授权链接时,添加该权限:
return Socialite::driver('facebook') ->scopes(['business_management', 'pages_show_list']) // 按需补充其他必要权限 ->redirect();
- 如果是公开上线的应用,需要将
business_management权限提交Facebook审核;测试阶段使用测试用户的话,直接授权即可生效。
3. 明确需求:商家页面还是商务管理账户
- 如果只是要获取用户管理的商家页面,
/user-id/accounts完全够用,返回的每个Page对象已经包含商家运营所需的核心信息。 - 如果确实需要获取商务管理平台账户,需确认:
- 用户已加入至少一个商务管理平台
- 应用已申请并通过
business_management权限审核 - 当前访问令牌包含该权限(可调用
/debug_token端点验证)
4. 实用调试技巧
- 验证令牌权限:调用
https://graph.facebook.com/debug_token?input_token=你的访问令牌&access_token=APP_ID|APP_SECRET查看令牌包含的权限列表 - 检查用户状态:让用户登录Facebook商务管理平台,确认自己是否属于某个商务管理平台
- 先用Graph API Explorer测试:在Facebook官方工具中先验证请求是否成功,再迁移到代码中
内容的提问来源于stack exchange,提问作者Nir ina
相关产品推荐
相关产品推荐

