2017-07-06 4 views
0

Maintenant, je développe un site en vedette. En utilisant l'API facebook, j'ai obtenu facebook_access_token et je l'ai stocké dans la base de données pour l'utiliser. Si j'utilise access_token du même compte de développeur facebook, j'ai obtenu des données de campagne avec succès. Mais si j'utilise le access_token d'un autre compte facebook, alors je ne peux pas obtenir les données de la campagne avec des mesures - J'aime, atteindre, etc. Et le message d'erreur de Facebook SDK est ci-dessous.Comment puis-je obtenir des données de campagne à partir du jeton d'accès Facebook?

This Ads API call requires the user to be admin of the application. User is not admin or developer of this application. in /ezond/networks/facebook/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:140 

Comment puis-je obtenir des données de campagne à partir du jeton d'accès Facebook?

L'extrait de code est ci-dessous.

<?php 

require_once __DIR__ . '/vendor/autoload.php'; 

// Add to header of your file 
use FacebookAds\Api; 
use FacebookAds\Object\User; 
use FacebookAds\Object\Campaign; 

use Facebook\Facebook; 
use Facebook\FacebookRequest; 
use Facebook\Exceptions\FacebookResponseException; 
use Facebook\Exceptions\FacebookSDKException; 


$facebookAppID = "456797558007270"; 
$facebookAppSecret = "c69f7f97677d5852875a23045305cc8e"; 
$facebook_access_token = "xxxxxxxxxxxxxxx"; 

$viewID = "xxxxxxxxxx"; 

if(isset($_GET['viewID'])) $viewID = $_GET['viewID']; 
if($viewID == "") exit(); 

if(isset($_GET['refreshToken'])) $facebook_access_token = $_GET['refreshToken']; 
if($facebook_access_token == "") exit(); 

$fb = new Facebook([ 
     'app_id' => $facebookAppID, 
     'app_secret' => $facebookAppSecret, 
     'default_graph_version' => 'v2.9', 
     ]); 


// Initialize a new Session and instantiate an Api object 
Api::init(
    '456797558007270', // App ID 
    'c69f7f97677d5852875a23045305cc8e', 
    $facebook_access_token // Your user access token 
); 

$me = new User('me'); 
$my_ad_accounts = $me->getAdAccounts()->getObjects(); 

$campaign_fields = array(
    'name', 
    'status', 
    'effective_status', 
    'objective' 
    ); 

$insight_fields = array(
    'clicks', 
    'impressions', 
    'cpc', 
    'cpm', 
    'cpp', 
    'ctr', 
    'reach' 
    ); 

$insight_params = array(
    'date_preset' => 'lifetime' 
    ); 

$ret = new stdClass(); 
foreach ($insight_fields as $insight_name) { 
    $ret->$insight_name = 0; 
} 

for ($i=0; $i < sizeof($my_ad_accounts); $i++) { 
    $my_ad_account = $my_ad_accounts[$i]; 
    if($viewID == $my_ad_account->account_id){ 
     try { 
      $account_campaigns = $my_ad_account->getCampaigns(); 
     } catch(Facebook\Exceptions\FacebookResponseException $e) { 
      exit; 
     } catch(Facebook\Exceptions\FacebookSDKException $e) { 
      exit; 
     } 
     $my_campaigns = $account_campaigns->getObjects(); 

     if (sizeof($my_campaigns) >= 1){ 
      $campaign = $my_campaigns[0]; 
      $campaign = $campaign->getSelf($campaign_fields); 
      /*foreach ($campaign_fields as $field_name) { 
       echo $field_name . ': ' . $campaign->$field_name . '<br />'; 
      }*/ 
      $campaign_insights = $campaign->getInsights($insight_fields, $insight_params)->current(); 
      if($campaign_insights){ 
       foreach ($insight_fields as $insight_name) { 
        $ret->$insight_name += $campaign_insights->$insight_name; 
       } 
      } else { 
      // echo "NO"; 
      } 
     } 
    } 
} 

foreach ($insight_fields as $insight_name) { 
    $ret->$insight_name = round($ret->$insight_name, 2); 
} 
echo json_encode($ret); 

?> 

L'id compte développeur access_token et compte est

"xxxxxxxxxxx" 

et "xxxxxxxxxx". Et le compte test access_token et id compte est "xxxxxxxxxxxx" et

"xxxxxxxxxxxxxxx". 

Si je ne peux pas obtenir données avec cette méthode, comment puis-je obtenir des données par jeton d'accès?

+0

Ne publiez jamais publiquement des jetons d'accès de ce type. Puisque vous l'avez déjà fait ici, vous devez les invalider maintenant (à moins que vous ne vouliez que quelqu'un d'autre qui lit cela puisse prendre ces jetons et effectuer les actions que les portées autorisent au nom de ces deux utilisateurs.) – CBroe

+0

Ensuite, lisez attentivement les documents de l'API Marketing. Si vous êtes dans le domaine du développement, Facebook restreint délibérément les comptes auxquels votre application peut accéder. – CBroe

+0

Salut, CBroe. Merci pour votre commentaire. Si j'ai terminé le développement de l'application, alors que dois-je faire? –

Répondre

0
This Ads API call requires the user to be admin of the application. User is not admin or developer of this application. 

Pour accéder aux données Facebook Insights via l'API nécessite 2 choses:

  1. Un jeton de dev avec les read_insights propres autorisations
  2. Le compte doit être un administrateur

Vous devez donnez au deuxième compte que vous avez mentionné l'accès administrateur à l'application ou utilisez simplement le compte initial.