Facebook Marketing API, ошибка версии 2.8, несмотря на версию 2.8 в composer.json

Я программирую Marketing-API для facebook и сталкиваюсь со следующей ошибкой:

Fatal error: Uncaught exception
    'FacebookAds\Http\Exception\AuthorizationException'
with message
    '(#2635) You are calling a deprecated version of the Ads API.
    Please update to the latest version: v2.8.'
in [MY FOLDER]/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:163

Вот файл [MY FOLDER]/composer.json, который я использовал для установки SDK:

{
  "require": {
      "facebook/php-sdk-v4" : "~5.0",
      "facebook/php-ads-sdk": "2.8.*"
   }
}

В папке приложения (которую я загружаю на частный сервер из /localhost/~[my user name]/[some directory]/, далее именуемой [MY FOLDER]) у меня есть два файла php index.php и login-callback.php, а также SDKS (facebook и facebook-ads), расположенные в [MY FOLDER]/vendor. Вот файлы php:

Файл [MY FOLDER]/index.php

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Facebook\Facebook;
session_start();
$fb = new Facebook([
    'app_id' => '000000000000', // censored
    'app_secret' => '000000000000', // censored
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['ads_management'];
$loginUrl = $helper->getLoginUrl('[MY FOLDER]/login-callback.php',$permissions);
?>

Файл [MY FOLDER]/login-callback.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Authentification\AccessToken;
use FacebookAds\Api;
use FacebookAds\Object\AdUser;
use FacebookAds\Object\Campaign;

date_default_timezone_set('GMT');
session_start();
$fb = new Facebook([
'app_id' => '000000000000', // censored
'app_secret' => '000000000000', // censored
]);
$helper = $fb->getRedirectLoginHelper();
$accessToken = $helper->getAccessToken();
// This is actually wrapped in a try-catch control group
// I have left it out for this question, as there are no problems
// in this respect and the clauses are really long.
Api::init(
$app_id,
$app_key,
$_SESSION['facebook_access_token']
);
$campaign = new Campaign('000000000000'); // censored
try {
    $campaign->read(array(
        CampaignFields::ID,
        CampaignFields::NAME,
        CampaignFields::OBJECTIVE,
    ));
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    // error with Graph API
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    // error with Facebook SDK
    exit;
}
?>

Ошибка возникает при попытке позвонить $campaign->read(array(···)). SDK возвращает указанную выше ошибку вместе с отслеживанием:

Stack trace:
#0 [API-FOLDER]/Http/Client.php
    (217): FacebookAds\Http\Exception\RequestException::create(Array, 400)
#1 [API-FOLDER]/Http/Request.php
    (282): FacebookAds\Http\Client->sendRequest(Object(FacebookAds\Http\Request))
#2 [API-FOLDER]/Api.php
    (152): FacebookAds\Http\Request->execute()
#3 [API-FOLDER]/Api.php
    (194): FacebookAds\
in [API-FOLDER]/Http/Exception/RequestException.php
    on line 163

Здесь [API-FOLDER] = [MY FOLDER]/vendor/facebook/php-ads-sdk/src.

Обратите внимание на запрос в ошибке: ...Ads API. Пожалуйста, обновитесь до последней версии: v2.8. Но я сделал это. Может кто-нибудь, пожалуйста, скажите мне, что, черт возьми, происходит?


person Thomas    schedule 15.02.2017    source источник


Ответы (2)


Я нашел (n раздражающее) решение. Я пошел на github и вручную загрузил последнюю версию.

Это смешно. Я следовал официальным инструкциям по установке на https://developers.facebook.com/docs/marketing-api/sdks (создать composer.json файл, включая подробные сведения о версии —> выполнить команду терминала php composer.phar install --no-dev). Я не понимаю, почему это не работает.

Кто-нибудь еще сталкивался с этой проблемой? Или я один из немногих, у кого автоматическая установка не привела к нужной версии?

person Thomas    schedule 15.02.2017

Я думаю, что это может быть связано с частью входа в систему. При инициализации класса Facebook здесь

$fb = new Facebook([
  'app_id' => '000000000000', // censored
  'app_secret' => '000000000000', // censored
]);

вы не указали используемую версию API, поэтому она возвращается к самой низкой версии API, которую может использовать ваше приложение. Скорее всего, это испортит ситуацию позже, когда вы будете использовать полученный токен для вызовов Marketing API.

Попробуйте явно указать используемую версию API,

$fb = new Facebook([
  'app_id' => '000000000000', // censored
  'app_secret' => '000000000000', // censored
  'default_graph_version' => 'v2.8',
]);
person CBroe    schedule 16.02.2017
comment
Работа с состоянием вещей после выполнения инструкций по установке SDK на developers.facebook.com/ docs/marketing-api/sdks это не действует. После ручной загрузки версии 2.8 SDK из GIT-Hub добавление или удаление 'default_graph_version' => 'v2.8' не имеет никакого эффекта. Вывод: инструкция по установке фейсбука неверная, SDK приходится качать вручную. - person Thomas; 16.02.2017