facebook / facebook-php-business-sdk

PHP SDK for Meta Marketing API
https://developers.facebook.com/docs/business-sdk
Other
818 stars 514 forks source link

Keywordstats returns AuthorizationException #485

Closed merkushin closed 5 years ago

merkushin commented 5 years ago

I try to get data from keywordstats endpoint.

When I call this endpoint without params, then I get empty data array. And I catch error, when I pass concrete date (like in my example below). Both behaviours I consider as wrong. This ad took part in split test, which finished on 1 September 2018.

Here is the error: PHP Fatal error: Uncaught FacebookAds\Http\Exception\AuthorizationException: An access token is required to request this resource.

Here is full example (without secrets):

<?php
declare(strict_types=1);

/**
 * composer.json:
 * {
 *   "require": {
 *     "php": "^7.0",
 *     "facebook/graph-sdk" : "~5.0",
 *     "facebook/php-ads-sdk": "3.1.*"
 *   }
 * }
 */

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

use FacebookAds\Api;
use FacebookAds\Logger\CurlLogger;

$token = '<here-is-token-with-ads-management>';

$api = Api::init(
    '<here-is-app-id>', 
    '<here-is-app-secret>',
    $token
);
$api->setLogger(new CurlLogger());

$response = $api->call("/23842919165120405/keywordstats?date=2018-08-31");
echo 'Ad 23842919165120405 keywordstats on date:' . PHP_EOL;
echo $response->getBody();
echo PHP_EOL . PHP_EOL;

And this is output of this script (w/o secrets):

/usr/local/Cellar/php/7.2.4_1/bin/php /Users/merkushin/dev/app/splittest/facebook-example.php
curl -G \
  -d 'access_token=<token-here>' \
  -d 'appsecret_proof=<app-secret-proof-here>' \
  https://graph.facebook.com/v3.1/23842919165120405/keywordstats?date=2018-08-31

PHP Fatal error:  Uncaught FacebookAds\Http\Exception\AuthorizationException: An access token is required to request this resource. in /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:152
Stack trace:
#0 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Client.php(215): FacebookAds\Http\Exception\RequestException::create(Object(FacebookAds\Http\Response))
#1 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Request.php(282): FacebookAds\Http\Client->sendRequest(Object(FacebookAds\Http\Request))
#2 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(162): FacebookAds\Http\Request->execute()
#3 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(203): FacebookAds\Api->executeRequest(Object(FacebookAds\Http\Request))
#4 /Users/merkushin/dev/app/splittest/facebook-example.php(30): FacebookAds\Api->call('/23842919165120...')
#5 {main}
  thrown in /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php on line 152

Fatal error: Uncaught FacebookAds\Http\Exception\AuthorizationException: An access token is required to request this resource. in /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:152
Stack trace:
#0 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Client.php(215): FacebookAds\Http\Exception\RequestException::create(Object(FacebookAds\Http\Response))
#1 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Request.php(282): FacebookAds\Http\Client->sendRequest(Object(FacebookAds\Http\Request))
#2 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(162): FacebookAds\Http\Request->execute()
#3 /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(203): FacebookAds\Api->executeRequest(Object(FacebookAds\Http\Request))
#4 /Users/merkushin/dev/app/splittest/facebook-example.php(30): FacebookAds\Api->call('/23842919165120...')
#5 {main}
  thrown in /Users/merkushin/dev/app/splittest/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php on line 152

Process finished with exit code 255

You'll get empty data if you would run curl example. But we get AuthorizationException while using SDK. (And empty data itself is wrong response.)

jingping2015 commented 5 years ago

This will be fix in next release.