API рекламы Facebook PHP: неверный токен доступа OAuth - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю над рекламным API Facebook, и я совершенно новичок в этом.Я получаю сообщение об ошибке при получении аккаунта Ads.Ошибка: Invalid OAuth access token. После получения этой ошибки я зашел в гугл и много искал, как Первая ссылка Еще одна Еще одна .Но не нашел никакого решения, поэтому я решил обратиться к 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.Я устанавливаю правильные разрешения и т. Д. Не знаю, где я не прав.

Обновление Теперь проблема заключается в том, если я создаю токен доступа из Graph Explorer Это работаетно если я создаю с помощью SDK, это дает мне ошибку "invalid aouth Tokan"

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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

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

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

Вывод будет выглядеть примерно так: enter image description here

Я пытался $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 голосов
/ 27 ноября 2018

Hello @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();
...