API рекламы Facebook PHP: неверный токен доступа OAuth

Я работаю над рекламным API Facebook, и я совершенно новичок в этом. Я получаю сообщение об ошибке при получении аккаунта Ads. Ошибка Invalid OAuth access token. После получения этой ошибки я пришел в Google и много искал, как
Первая ссылка Другой другой. Но не нашел решения, поэтому решил приехать в Stackoverflow так что этот вопрос не дублирует

Вот код, как я использовал Facebook Ads 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());
}

Поэтому я использую учетную запись разработчика, пытаясь получить это с тестовым пользователем facebook с панели управления приложения-> Roles-> Test User. Я устанавливаю правильные разрешения и т. Д. Не знаю, где я не прав.

Обновить
Теперь проблема в том, если я создаю токен доступа из Граф Эксплорер Это работает, но если я создаю с SDK, он дает мне ошибку «invalid aouth Tokan»

Пожалуйста, помогите мне. Заранее спасибо.

0

Решение

Здравствуйте @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();
0

Другие решения

На самом деле это была моя ошибка. API Facebook возвращает нам защищенный объект. Если вы напечатаете переменную, она будет отображаться в виде строки.

<?php
echo $longLivedAccessToken;
var_dump($longLivedAccessToken);
?>

На выходе что-то вроде
введите описание изображения здесь

Я старался $longLivedAccessToken->getValue();

$oAuth2Client = $this->facebook->getOAuth2Client();
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
$accesstoken = $longLivedAccessToken->getValue();
$this->request->session()->write('fb_access_token', $accesstoken);
$this->facebook->setDefaultAccessToken($longLivedAccessToken);
0

По вопросам рекламы [email protected]