繁体   English   中英

Facebook Ads API Cron工作

[英]Facebook Ads API Cron Job

我们正在尝试使用Facebook广告报告api更新第三者应用程序,以保持我们在Facebook上的每日支出的最新信息。 我们希望这些值通过cron作业自动更新,但这似乎不起作用。 我们必须转到页面并刷新它,才能刷新api数据。 是否可以让我们的脚本自动更新? 这是我们的访问令牌代码。

我认为可以获取一个长寿的令牌并将其保存到数据库中并使用它,但是我们无法检索accessToken,因为它的:protected在返回json中。

use FacebookAds\Api;
use FacebookAds\Object\AdSet;
use FacebookAds\Object\AdGroup;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\AdGroupFields;
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdAccountFields;
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookSDKException;
use Facebook\Entities\AccessToken;

// Initialize the SDK
FacebookSession::setDefaultApplication( $app_id, $app_secret );

// Create the login helper and replace REDIRECT_URI with your URL
// Use the same domain you set for the apps 'App Domains'
// e.g. $helper = new FacebookRedirectLoginHelper( 'redirect' );
$helper = new FacebookRedirectLoginHelper( $redirect_uri );

// Check if existing session exists
if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
 // Create new session from saved access_token
$session = new FacebookSession( $_SESSION['fb_token'] );

// Validate the access_token to make sure it's still valid
try {
  if ( ! $session->validate() ) {
    $session = null;
  }
} catch ( Exception $e ) {
  // Catch any exceptions
  $session = null;
}
} else {
 // No session exists
try {
$session = $helper->getSessionFromRedirect();

} catch( FacebookRequestException $ex ) {

// When Facebook returns an error
} catch( Exception $ex ) {

  // When validation fails or other local issues
  echo $ex->message;
}
}

// Check if a session exists
if ( isset( $session ) ) {

  // Save the session
   $_SESSION['fb_token'] = $session->getToken();
$access_token = $_SESSION['fb_token'];
$long_session = $session->getLongLivedSession();
//print_r($long_session);
$longtoken = $long_session->getToken();
  // Create session using saved token or the new one we generated at login
   $session = new FacebookSession( $long_session->getToken() );

  } else {
   // No session

   // Get login URL
   $loginUrl = $helper->getLoginUrl( $permissions );

//echo '<a href="' . $loginUrl . '">Log in</a>';
  header('Location: '.$loginUrl.'');
   }
    // Initialize a new Session and instanciate an Api object
Api::init($app_id, $app_secret, $access_token);

// The Api object is now available trough singleton
$api = Api::instance();

// Get the GraphUser object for the cusrrent user:

try {
 $me = (new FacebookRequest(
   $session, 'GET', '/me'
 ))->execute()->getGraphObject(GraphUser::className());
// echo $me->getName();
} catch (FacebookRequestException $e) {
 // The Graph API returned an error
} catch (\Exception $e) {
  // Some other error occurred
 }

我在您的帖子中读了两个问题,第一个是您希望有一个后台进程(由cron调用)来读取您的日常支出,第二个是您没有长期的用户访问令牌,因此您的脚本是“不能正常工作。

如果我正确地理解了您的目标,看来这两个问题有点混为一谈,建议将其分开。 请遵循Facebook访问令牌文档以获取长期存在的令牌,然后直接在脚本中使用它。 跳过PHP会话管理,只需将长期令牌放入数据库,简单的配置文件中,或直接放入脚本中即可。

然后,如果还没有,请让cron或另一个预定的后台处理系统调用此脚本。 它可以提取您的每日支出数据并将其提供给第三方应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM