[英]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.