首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook营销API,版本2.8错误,尽管在composer.json中为2.8

Facebook营销API,版本2.8错误,尽管在composer.json中为2.8
EN

Stack Overflow用户
提问于 2017-02-15 16:11:52
回答 2查看 675关注 0票数 0

我正在为facebook编写一个营销API,并遇到以下错误:

代码语言:javascript
复制
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

下面是我用来安装SDK的文件[MY FOLDER]/composer.json

代码语言:javascript
复制
{
  "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以及位于[MY FOLDER]/vendor中的sdks (facebook和facebook-ads)。以下是php文件:

文件[MY FOLDER]/index.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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返回上面的错误以及跟踪:

代码语言:javascript
复制
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。但这是我干的。有人能告诉我到底怎么回事吗?

EN

回答 2

Stack Overflow用户

发布于 2017-02-15 16:29:11

我找到了一个(恼人的)解决办法。我去了github并手动下载了最新版本。

这太荒谬了。我遵循了https://developers.facebook.com/docs/marketing-api/sdks上的正式安装说明(创建composer.json文件包括。显式版本细节->执行终端命令php composer.phar install --no-dev)。我不明白为什么这不管用。

还有其他人遇到过这个问题吗?还是少数几个没有自动安装的人之一?

票数 0
EN

Stack Overflow用户

发布于 2017-02-16 09:17:05

我认为这可能与登录部分有关。在这里初始化Facebook类时,

代码语言:javascript
复制
$fb = new Facebook([
  'app_id' => '000000000000', // censored
  'app_secret' => '000000000000', // censored
]);

您没有指定要使用的API版本,因此它回到了应用程序可以使用的最低API版本。当您稍后使用生成的令牌调用市场营销API时,很可能会把事情搞砸。

尝试并显式指定要使用的API版本,

代码语言:javascript
复制
$fb = new Facebook([
  'app_id' => '000000000000', // censored
  'app_secret' => '000000000000', // censored
  'default_graph_version' => 'v2.8',
]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42254528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档