Facebook Marketing Api-循环运行会引发“ AuthorizationException发生未知错误。” (第二次)

问题描述 投票:0回答:1

我正在使用Facebook Ads SDK,并尝试将用户添加到自定义受众列表中。由于有一个10000 data limit at a time,为了将来证明,我试图在一个循环中添加数据。

但是,当它第二次命中时,会引发错误。

1。

public function test($audienceId, $data)
    Api::init($appId, $appSecret, $token);

    $audience = new CustomAudience($audienceId);

    $schema = [
       CustomAudienceMultikeySchemaFields::EMAIL,
       CustomAudienceMultikeySchemaFields::PHONE,
       //...
    ];

    foreach (array_chunk($data, 500) as $chunk) {
        $audience->addUsersMultiKey($chunk, $schema, true);
    }
}

// And run as

$class = new FbTestClass();
$class->test($audienceId, $data);

如果addUsersMultiKey()运行1次,则运行良好,但是如果运行2次,则将引发错误

FacebookAds \ Http \ Exception \ AuthorizationException-发生未知错误。


2然后我尝试将App:init()部分移到__construct(),但问题仍然存在。

public function __construct() {
   Api::init($appId, $appSecret, $token);
}

public function test($audienceId) {
   $audience = new CustomAudience($audienceId);

   $schema = [
       CustomAudienceMultikeySchemaFields::EMAIL, //...
   ];

   $audience->addUsersMultiKey($chunk, $schema, true);
}

// And run as:

$class = new FbTestClass();

foreach (array_chunk($data, 500) as $chunk) {
   $class->test($audienceId, $chunk);
}

3。我尝试在test()函数外部循环,并将App::init()保留在[​​C0]函数内部,因此test()被多次调用。仍然是同一问题。


App::init()说要单独执行请求,但是怎么可能呢?但是,我没有尝试所有可能的情况吗?

错误似乎与批处理请求有关-我们的解决方案是更改代码以单独执行请求。


我相信这与运行时有关,因为当我刷新时,它可以正常运行;因此,我认为这不是节流问题(我也尝试This answers,实际上它可以刷新)。

如何克服这个问题?

  • 也许有一种方法可以销毁sleep(10)实例?还是有办法创建一个新的App实例来覆盖以前的实例?

  • 我看到了App,但不知道如何在我的用例(自定义受众和addUsersMultiKey())中使用它。


堆栈跟踪:

batch request in the facebook docs

更新:4我也用graph-sdk尝试了同样的事情

An unknown error has occurred. {"userId":1,"exception":"[object] (FacebookAds\\Http\\Exception\\AuthorizationException(code: 1): An unknown error has occurred. at /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:165)    
[stacktrace]
#0 /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Client.php(215): FacebookAds\\Http\\Exception\\RequestException::create()
#1 /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Request.php(286): FacebookAds\\Http\\Client->sendRequest()
#2 /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(165): FacebookAds\\Http\\Request->execute()
#3 /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(214): FacebookAds\\Api->executeRequest()
#4 /home/vagrant/Code/myApp/vendor/facebook/php-ads-sdk/src/FacebookAds/Object/CustomAudience.php(537): FacebookAds\\Api->call()

#5 is where I execute the code:
$audience->addUsersMultiKey($chunk, $schema, true);

这里,响应数组同时具有两个请求。第一个成功,第二个相同。

$fb = new Facebook([
      'app_id' => env("FB_APP_ID"),
      'app_secret' => env("FB_APP_SECRET"),
      'default_graph_version' => 'v6.0',
      'default_access_token' => env("FB_ACCESS_TOKEN")
]);

foreach ($chunks as $chunk) {
      $payload = [
          'schema' => $schema,
          'data' => $chunk->toArray()
      ];

      $requests[] = $fb->request("POST", "/$customAudienceId/users", ['payload' => $payload]);
}

$batchResponse = $fb->sendBatchRequest($requests);
php facebook facebook-graph-api facebook-sdk-4.0 facebook-marketing-api
1个回答
0
投票

我已经将其发布为评论,但格式没有帮助。

$batchResponse contains: responses: array:2 [▼ 0 => Facebook\FacebookResponse ▼ body => // successful data returned... 1 => Facebook\FacebookResponse ▼ body => "{"error":{"message":"An unknown error has occurred.","type":"OAuthException","code":1,"fbtrace_id":"A5...464cGc22gi28Kb"}}" 之前,将以下几行添加到FacebookAds/Http/Adapter/CurlAdapter.php

$raw_response = $this->getCurl()->exec();

这样,您可以检查所发出请求的实际内容。如果请求相同,则肯定是一个Facebook错误。

编辑:放在$fp = fopen("/temp/log_" . uniqid() . ".txt", "w"); // change this to any file, but make sure it changes between requests curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_STDERR, $fp); 上方的确切代码

$raw_response
© www.soinside.com 2019 - 2024. All rights reserved.