php - Facebook Ad API PHP:无效的 OAuth 访问令牌
问题描述
我正在研究 Facebook 广告 API,对此我完全陌生。我在获取 Ads 帐户时遇到错误。错误是Invalid OAuth access token.
收到此错误后,我来到谷歌并搜索了很多类似
First Link Another one another one的内容。但是没有找到任何解决方案所以我决定来 Stackoverflow所以这个问题不是重复的
这是我如何使用 Facebook 广告 API 的代码
public function login() {
$helper = $this->facebook->getRedirectLoginHelper();
$this->request->session()->write('fb_access_token', false);
$access_token = $this->request->session()->read('fb_access_token');
if ($access_token) {
echo "You are logged in!";
} else {
$permissions = ['email', 'ads_management', 'pages_show_list', 'publish_pages', 'manage_pages', 'ads_read'];
$loginUrl = $helper->getLoginUrl('http://localhost/FacebookManager/Adsmanagement/authenticate', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook</a>';
}
}
public function authenticate() {
if (isset($_GET['state'])) {
$helper = $this->facebook->getRedirectLoginHelper();
$helper->getPersistentDataHandler()->set('state', $_GET['state']);
$accessToken = $helper->getAccessToken();
if($accessToken) {
echo "got the token";
$this->request->session()->write('fb_access_token', $accessToken);
//echo $accessToken;
$oAuth2Client = $this->facebook->getOAuth2Client();
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
$this->facebook->setDefaultAccessToken($longLivedAccessToken);
}
}
}
我得到这样的广告帐户
public function getAdsAccount() {
$accesstoken = $this->request->session()->read('fb_access_token');
//$accesstoken = "AQwfmuNgKZCZCiZBuhAMGB8xZBty5dgNR7J9ZBO2ZCDl1SWYxnBLn9ahIn5FQTWxkJ0FPKbemeG0vUAwPsZCN2FFxOFey9BQr8CZBW07IwlZB0FK81SH8ozOil2GllR35BCyxQGhQ7JrtuCdNE6kjEOU0FZCAZDZD";
Api::init(
$this->app_id, // App ID
$this->appsecret,
$accesstoken // Your user access token
);
//*****************
$account = new AdAccount('****************');
$contracts = $account->read();
echo "<pre>"; print_r($contracts->getData());
}
所以我正在使用开发人员帐户,尝试从 APP 仪表板-> 角色-> 测试用户与 facebook 测试用户一起获取这个。我正在设置适当的权限等。不知道我错在哪里。
更新 现在的问题是,如果我从Graph Explorar创建访问令牌它可以工作,但如果我使用 SDK 创建它会给我错误“invalid aouth Tokan”
请帮我。提前致谢。
解决方案
您好@manoj Kumar 请使用以下 URL 与管理员登录检查应用程序调试您的AccessToken
.
https://developers.facebook.com/tools/explorer/
请检查以下来自 facebook PHP SDK 的代码以获取具有权限的有效访问令牌ads_management
。
require_once __DIR__ . '/vendor/autoload.php';
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
// Init PHP Sessions
session_start();
$fb = new Facebook([
'app_id' => '{your-app-id}',
'app_secret' => '{your-app-secret}',
]);
$helper = $fb->getRedirectLoginHelper();
if (!isset($_SESSION['facebook_access_token'])) {
$_SESSION['facebook_access_token'] = null;
}
if (!$_SESSION['facebook_access_token']) {
$helper = $fb->getRedirectLoginHelper();
try {
$_SESSION['facebook_access_token'] = (string) $helper->getAccessToken();
} catch(FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
}
if ($_SESSION['facebook_access_token']) {
echo "You are logged in!";
} else {
$permissions = ['ads_management'];
$loginUrl = $helper->getLoginUrl('http://localhost:8888/marketing-api/', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook</a>';
}
在那之后,你必须得到 AdAccount 所以使用下面的代码
use FacebookAds\Object\AdUser;
// Add after Api::init()
$me = new AdUser('me');
$my_adaccount = $me->getAdAccounts()->current();
推荐阅读
- wpf - 展开/折叠时如何使扩展器的图标移动到边缘
- python - 熊猫将特定列下的单元格合并为一个
- java - 为什么我们不能将 List转换为 List
- python - 使大型数据集的 Plotly 散点图更快 - Python
- c# - Windows C# 窗体应用程序中 Metro 选项卡式布局中 MetroStyle TAB 的边界清晰
- algorithm - 从具有大量重复数字的数组中选择预期线性时间
- python - 如何根据 Pandas 中字符串的出现有效地分配列值?
- java - 如何在Android中限制Textview的最大长度,我想设置10行100字
- reactjs - 添加渲染 pdf 会话后,React jsx 类显示数据两次
- c# - 如何让 IIS 将请求重定向回浏览器,而不是应用程序重定向它?