使用应用程序令牌访问 facebook 应用程序

accessing facebook app with app token

我在通过应用访问某些广告数据时遇到了一点问题

我有这两个脚本:

登录

<?php


    include_once __DIR__ . '/includes/connect.php';
    require_once __DIR__ . '/vendor/autoload.php';

    use Facebook\Facebook;

    session_start();

    $facebook = new Facebook([
        'app_id' => 'XXX',
        'app_secret' => 'XXX',
        'default_graph_version' => 'v2.5',
        ]);

    $helper = $facebook->getRedirectLoginHelper();

    $permissions = ['ads_read'];
    $loginUrl = $helper->getLoginUrl('http://sparnorddashboard.local:8080/fb_callback.php', $permissions);

    echo '<a href="'.  $loginUrl .'">Log ind</a>';

?>

回调

<?php
include_once __DIR__ . '/includes/connect.php';
require_once __DIR__ . '/vendor/autoload.php';

use Facebook\Facebook;

session_start();

$facebook = new Facebook([
    'app_id' => 'XXX',
    'app_secret' => 'XXX',
    'default_graph_version' => 'v2.5',
    ]);

$helper = $facebook->getRedirectLoginHelper();

try {

    $access_token = $helper->getAccessToken();


} catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo $e->getMessage();
    exit;
}

if(!isset($access_token)) {

    if($helper->getError()) {

        header("HTTP/1.0 401 Unauthorized");

        echo "Error: " . $helper->getError() . "\n";
        echo "Error Code: " . $helper->getErrorCode() . "\n";
        echo "Error Reason: " . $helper->getErrorReason() . "\n";
        echo "Error Description: " . $helper->getErrorDescription() . "\n";

    } else {

        header('HTTP/1.0 400 Bad Request');
        echo 'Bad request';

    }

    exit;   

}

$oAuth2Client = $facebook->getOAuth2Client();
$tokenMetaData = $oAuth2Client->debugToken($access_token);

$tokenMetaData->validateAppId("1694068770828491");
$tokenMetaData->validateExpiration();


if(!$access_token->isLongLived()) {

    try {

        $access_token = $oAuth2Client->getLongLivedAccessToken($access_token);

    } catch(Facebook\Exceptions\FacebookSDKException $e) {

        $e->getMessage();
        exit;

    }

}

$_SESSION['fb_access_token'] = (string) $access_token;

header('Location: http://sparnorddashboard.local:8080/fetchads.php?callback=callback');

?>

但这将使用用户客户端令牌 - 如何设置它以便我可以使用应用程序访问令牌?我不希望用户登录并接受权限,因为这是用于在电视监视器上运行的内部仪表板,它将读取广告数据 - 仅此而已。

您不能将您的 APP 访问令牌用于 ads_read。如果您不想通过用户登录获取它,那么另一种方法是通过 Graph Api Explorer.

获取

假设您已经创建了一个 Ad Account :

  1. 登录Graph Api Explorer
  2. 更改为您的应用程序。

  3. 点击'Get Token'然后点击'Get User Access Token'

  4. 单击 'Extended Permissions' 选项卡并选中 ads_read,然后单击获取访问令牌。

  5. 授予自己所请求的权限。

  6. 使用将在访问令牌表单输入字段中显示给您的用户访问令牌:


为您的内部仪表板使用生成的访问令牌 app/script,例如:

// Add to header of your file
use FacebookAds\Api;

// Initialize a new Session and instantiate an Api object
Api::init(
  '{your-app-id}',
  '{your-app-secret}',
  $_SESSION['facebook_access_token'] // The generated access token
);