2017-02-15 100 views
0

我编程为Facebook营销的API和正在运行到以下错误2.8:Facebook的营销API,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软件开发工具包:

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

在应用程序文件夹(这是我上传到专用服务器,从/localhost/~[my user name]/[some directory]/,以下简称为[MY FOLDER])我有两个php文件index.phplogin-callback.php以及为t他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); 
?> 

文件试图调用$campaign->read(array(···))时出现[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; 
} 
?> 

错误。该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。但我已经这样做了。有人可以告诉我,地球上发生了什么?

回答

0

我发现了一个令人讨厌的解决方案。我去了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版本。当您使用生成的令牌调用Marketing API时,可能会在稍后发生混乱。

尝试,并明确指定要使用的API版本,

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

事物的状态下工作在https://developers.facebook.com/docs/marketing-api/的SDK安装后的指令sdks这不起作用。从GIT-Hub手动下载SDK的v2.8后,添加或删除''default_graph_version'=>'v2.8''不起作用。结论:facebook安装说明错误,需要手动下载SDK。 – Thomas