如何通过代码在Facebook PHP SDK中生成带指定权限的访问令牌?
使用Facebook PHP SDK自动生成带指定权限的长效访问令牌
核心结论
可以通过代码完成OAuth授权流程,自动获取带有指定权限的长效访问令牌,替代手动在Graph API Explorer生成的方式。
具体实现步骤
1. 实现OAuth授权流程获取短期用户令牌
首先需要引导用户完成Facebook授权,获取包含所需权限的短期用户令牌(有效期1-2小时)。
代码示例:
use FacebookAds\FacebookSession; use FacebookAds\FacebookRedirectLoginHelper; // 初始化配置 $appId = config('facebook.app_id'); $appSecret = config('facebook.app_secret'); $redirectUrl = '你的授权回调URL'; // 需在Facebook开发者平台配置 FacebookSession::setDefaultApplication($appId, $appSecret); $helper = new FacebookRedirectLoginHelper($redirectUrl); // 检查是否有回调的授权码 if (!isset($_GET['code'])) { // 生成授权URL,包含所需权限 $permissions = [ 'lead_retrieval', 'pages_manage_metadata', 'pages_show_list' ]; $loginUrl = $helper->getLoginUrl($permissions); header("Location: $loginUrl"); exit; } else { // 通过授权码获取短期会话(令牌) try { $session = $helper->getSessionFromRedirect(); $shortLivedToken = $session->getToken(); echo "短期用户令牌: $shortLivedToken"; } catch (Exception $e) { die('授权失败: ' . $e->getMessage()); } }
2. 将短期令牌兑换为长效用户令牌
把短期令牌换成60天有效期的长效令牌:
use FacebookAds\Api; use FacebookAds\Object\FacebookRequest; // 初始化API Api::init($appId, $appSecret); // 发送兑换请求 $request = new FacebookRequest( null, $shortLivedToken, 'GET', '/oauth/access_token', [ 'grant_type' => 'fb_exchange_token', 'client_id' => $appId, 'client_secret' => $appSecret, 'fb_exchange_token' => $shortLivedToken ] ); $response = $request->execute(); $longLivedTokenData = $response->getGraphObject()->asArray(); $longLivedUserToken = $longLivedTokenData['access_token']; echo "长效用户令牌: $longLivedUserToken";
3. 获取长效页面访问令牌(针对页面操作权限)
如果你的业务需要操作Facebook页面,可通过长效用户令牌获取对应页面的长效访问令牌(只要用户令牌有效且权限未被撤销,页面令牌可永久有效):
// 获取用户管理的页面列表 $request = new FacebookRequest( $session, $longLivedUserToken, 'GET', '/me/accounts' ); $response = $request->execute(); $pages = $response->getGraphObject()->asArray()['data']; // 遍历页面获取长效页面令牌 foreach ($pages as $page) { $pageId = $page['id']; // 兑换页面长效令牌 $pageTokenRequest = new FacebookRequest( null, $longLivedUserToken, 'GET', "/$pageId?fields=access_token" ); $pageTokenResponse = $pageTokenRequest->execute(); $pageTokenData = $pageTokenResponse->getGraphObject()->asArray(); $longLivedPageToken = $pageTokenData['access_token']; echo "页面 $pageId 的长效令牌: $longLivedPageToken"; }
注意事项
- 部分权限(如
lead_retrieval)需要提交Facebook应用审核,审核通过后才能正式使用,否则仅在测试用户/测试页面生效。 - 长效用户令牌到期前,可再次执行兑换流程刷新有效期(最多延长至60天)。
- 需确保回调URL已在Facebook开发者平台的应用设置中配置为有效OAuth重定向URI。
内容的提问来源于stack exchange,提问作者JanBoehmer
相关产品推荐
相关产品推荐

