Facebook Ads Cron Job API

0

Мы пытаемся использовать рекламную кампанию facebook, чтобы обновить стороннее приложение, чтобы постоянно обновлять наши ежедневные расходы на facebook. Мы хотели бы, чтобы эти значения автоматически обновлялись с помощью задания cron, но это не работает. Мы должны перейти на страницу и обновить ее, чтобы она обновляла данные api. Можно ли автоматически обновить наш скрипт? Вот наш токен-код доступа.

Я думал, что можно получить долгоживущий токен и сохранить его в базе данных и использовать, но мы не можем получить accessToken, потому что он: защищен в возврате 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 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
facebook-access-token
facebook-ads-api

1 ответ

2

Я прочитал два вопроса в вашем сообщении, во-первых, вы хотите, чтобы у вас был фоновый процесс (вызванный cron), который читает ваши ежедневные расходы, а во-вторых, у вас нет долгоживущего токена доступа пользователя, поэтому ваш скрипт isn ' t работает правильно.

Если я правильно понимаю ваши цели, кажется, что эти два вопроса немного сконфигурированы, и я рекомендую их разделять. Следуйте документации токена доступа Facebook, чтобы получить долгоживущий токен и использовать его прямо в своем скрипте. Пропустите управление сеансом PHP и просто поместите долгоживущий токен в базу данных, простой файл конфигурации или непосредственно в скрипт.

И тогда, если вы еще этого не сделали, используйте этот скрипт cron или другую запланированную систему фоновой обработки. Он может вытащить ваши ежедневные данные о расходах и предоставить их стороннему приложению.

  • 0
    Я не думаю, что размещение токена доступа в конфигурации - это хорошая идея, потому что срок его действия истекает однажды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню