Facebook Ads API / SDK - 不允许使用全局ID [xxxx]。请改用特定于应用程序的ID

时间:2014-10-15 14:02:44

标签: php facebook facebook-ads-api

我正在尝试将该名称与广告帐户相关联。使用API​​调用/me获取我的用户信息没问题。调用/ me / adaccounts获取一个带有数据节点的对象,该数据节点是具有id节点的帐户id对象数组。我使用此ID尝试获取广告帐户,但我收到以下错误:

不允许使用全局ID [xxxx]。请改用特定于应用程序的ID。

代码包含在下面,有人可以告诉我我做错了什么吗?

    FacebookSession::setDefaultApplication($config['id'], $config['secret']);
    $session = new FacebookSession($accessToken);
    $api = new Api($session);
    echo '<pre>';
    $adAccountsResponse = $api->call('/me/adaccounts','GET');
    $adAccounts = $adAccountsResponse->getResponse();

    foreach($adAccounts->data as $adAccount)
    {
        $adAccountId = $adAccount->account_id;
        $adAccount = new AdAccount($adAccountId, null, $api);
        $adAccount->read(array(AdAccountFields::NAME));
        print_r($adAccount);
    }

我做了一个print_r($api),它说我正在使用API​​的第2版。

[responseHeaders:protected] => Array
            (
                [http_code] => HTTP/1.1 200 OK
                [Last-Modified] => 2014-07-20T14:37:10+0000
                [Facebook-API-Version] => v2.0
                [ETag] => "XXXXXXXXXXXXXX"
                [Content-Type] => application/json; charset=UTF-8
                [Pragma] => no-cache
                [Access-Control-Allow-Origin] => *
                [X-FB-Rev] => 1454522
                [Cache-Control] => private, no-cache, no-store, must-revalidate
                [Expires] => Sat, 01 Jan 2000 00:00:00 GMT
                [X-FB-Debug] =>  "XXXXXXXXXXXXXX"
                [Date] => Wed, 15 Oct 2014 15:10:36 GMT
                [Connection] => keep-alive
                [Content-Length] => 234
            )

当我使用Graph API Explorer使用我拥有的令牌在API版本号之间切换时,无论API的版本是什么,我都会获得相同的用户ID。所以有些事搞砸了。

2 个答案:

答案 0 :(得分:0)

您可以尝试在调用中添加Graph API版本前缀:

$adAccountsResponse = $api->call('/v2.1/me/adaccounts','GET');

答案 1 :(得分:0)

这是一个非常奇怪的错误,因为它实际上与adaccounts无关。

但是,有一种更简单的方法可以使用对象AdUser的连接在单个调用中检索所需的属性列表:

use FacebookAds\Object\AdUser;
use FacebookAds\Object\Fields\AdAccountFields;

$user = new AdUser('me');
$accounts = $user->getAdAccounts(array(AdAccountFields::NAME)));

foreach($accounts as $account) {
  echo $account->name."\n";
}