2012-07-04 3 views
1

J'ai un problème pour intégrer mon jeu sur Facebook. En lisant la documentation, j'ai lu que le meilleur et le plus à jour pour communiquer avec FB depuis Flash est via l'API Facebook sur javascript. J'appelle cela pour obtenir toutes les boîtes de dialogue de l'interface utilisateur et les informations de connexion de base. Maintenant, mes jeux flash se connecte à un php pour envoyer et recevoir highscore comme ceci:?Access_token en php et javascript avec l'API Facebook

scores.php action = NewsCore & userId = 123123123 & score = 100

scores.php action = VIEW

scores.php? action = VIEWFRIENDS & userId = 123123123

maintenant, dans scores.php, quand je mets l'action VIEWFRIENDS, je veux le php pour créer la requête facebook. Je le fais en ajoutant

// Init the Facebook SDK 
$facebook = new Facebook(array(
'appId' => $app_id, 
'secret' => $app_secret, 
)); 

// Get the current user 
$user = $facebook->getUser(); 

$access_token = $facebook->getAccessToken(); 
$fbresponse = $facebook->api("/me/friends?fields=installed", array('access_token'=>$access_token.$access_token,)); 

if ($fbresponse) 
{ 
    $friendsData = $fbresponse['data']; 
    $friendsString = ''; 
    $friendCount = 0; 
    for ($i = 0; $i < sizeof($friendsData); $i++) 
    { 
     $friend = $friendsData[$i]; 

     if ($friend['installed']) 
     { 
      if ($friendCount > 0) 
       $friendsString = $friendsString . ","; 

      $friendsString = $friendsString . "'" . $friend['id'] . "'";     $friendCount++; 
     } 
    } 
    // Get the friends highscores 
    $sql = "SELECT * FROM Highscores WHERE FacebookId IN (" . $friendsString . ") ORDER BY Score DESC LIMIT " . $scoresize ; 
    $result = mysql_query($sql); 
} 

Quand vous faites cela, tout semble travailler si je suis à l'extérieur Facebook, mais quand je l'intégrer dans mon application, il jette l'erreur suivante:

<br /> 
<b>Fatal error</b>: Uncaught OAuthException: Invalid access token signature. 
    thrown in <b>/home/public_html/mysite.org/games/myGameFacebook/fb-php-sdk/base_facebook.php</b> 

on line 1106

I J'essaie de vérifier ce qui se passe et je dois encore savoir ce qu'il faut faire à ce sujet. Je comprends que le jeton d'accès est généré sur Javascript lors de la connexion par ce code.

getLoginStatus:function() { 
    log("getLoginStatus"); 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 

      log("Logged in."); 
      F.token = response.authResponse.accessToken; 
      F.getCurrentUserInfo(); 
     } else if (response.status === 'not_authorized') { 
      log("User did not authorize app"); 
     } else { 
      log("Not logged in."); 
      FB.login(function(response) { 
       if(response.session) { 
        log("Logging successful."); 
        F.token = response.session.access_token; 
        F.getCurrentUserInfo(); 
       } else { 
        log("Logging failed."); 
       } 
      }); 
     } 
    }); 
}, 

Comment puis-je résoudre ce problème? J'ai essayé de comprendre comment le faire, mais j'ai lu son soit impossible, ou un lien vers une variable de session inconnue qui n'a jamais fonctionné.

Répondre

0

Vous êtes concaténer le jeton d'accès avec lui-même dans l'appel à Facebook- $> api

array('access_token'=>$access_token.$access_token,) 

devrait ressembler à:

array('access_token'=>$access_token,) 

Mais je suppose que vous devez utiliser un jeton d'accès de l'application pour récupérer ce dont vous avez besoin, avec une fonction comme:

// Helper function to get an APP ACCESS TOKEN 
function get_app_access_token($app_id, $app_secret) { 
    $token_url = 'https://graph.facebook.com/oauth/access_token?' 
    . 'client_id=' . $app_id 
    . '&client_secret=' . $app_secret 
    . '&grant_type=client_credentials'; 

    $token_response =file_get_contents($token_url); 
    $params = null; 
    parse_str($token_response, $params); 
    return $params['access_token']; 
} 

Vous aurez besoin de passer le secret de l'application que vous pouvez lire sur Facebook Developer App Page.

Questions connexes