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

如何通过代码在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:47:10