2017-02-15 7 views
0

Я программирование маркетинг-API для Facebook и бегу в следующее сообщение об ошибке:Facebook Marketing API, версия 2.8 ошибка, несмотря на 2,8 в composer.json

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 я использовал, чтобы установить SDKs:

{ 
    "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.

Обращайте внимание на информацию: ... Реклама API. Обновите последнюю версию: v2.8. Но я сделал это. Может кто-нибудь, пожалуйста, скажите мне, что происходит на Земле?

ответ

0

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

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

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

0

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

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

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

Try и явно указать версию API для использования,

$fb = new Facebook([ 
    'app_id' => '000000000000', // censored 
    'app_secret' => '000000000000', // censored 
    'default_graph_version' => 'v2.8', 
]); 
+0

Работа с состоянием вещей, после того, как в соответствии с инструкциями по установке SDK-на https://developers.facebook.com/docs/marketing-api/ sdks это не имеет никакого эффекта. Загрузив v2.8 SDK из GIT-Hub, добавление или удаление '' default_graph_version '=>' v2.8'' не имеет никакого эффекта. Вывод: инструкции по установке facebook являются ошибочными, нужно вручную загрузить SDK. – Thomas

Смежные вопросы