Hi all, I have a new problem :-X and after 3 hour of generic errors, I get this error from facebook:
active access token must be used to query information about the current user.
I try to find some solution on the web, and I try to read the manual of facebook (my english isn’t very good…so, I spend a lot of time to understand why I get this error)
so, in my index.php, I have the loading of the user and get some information about it:
INDEX.PHP
[php]<?php
session_start();
require_once( ‘Facebook/HttpClients/FacebookHttpable.php’ );
require_once( ‘Facebook/HttpClients/FacebookCurl.php’ );
require_once( ‘Facebook/HttpClients/FacebookCurlHttpClient.php’ );
require_once( ‘Facebook/Entities/AccessToken.php’ );
require_once( ‘Facebook/Entities/SignedRequest.php’);
require_once( ‘Facebook/FacebookSession.php’ );
require_once( ‘Facebook/FacebookSignedRequestFromInputHelper.php’);
require_once( ‘Facebook/FacebookCanvasLoginHelper.php’);
require_once( ‘Facebook/FacebookRedirectLoginHelper.php’ );
require_once( ‘Facebook/FacebookRequest.php’ );
require_once( ‘Facebook/FacebookResponse.php’ );
require_once( ‘Facebook/FacebookSDKException.php’ );
require_once( ‘Facebook/FacebookRequestException.php’ );
require_once( ‘Facebook/FacebookOtherException.php’ );
require_once( ‘Facebook/FacebookAuthorizationException.php’ );
require_once( ‘Facebook/GraphObject.php’ );
require_once( ‘Facebook/GraphUser.php’);
require_once( ‘Facebook/GraphSessionInfo.php’ );
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
FacebookSession::setDefaultApplication(‘id’,‘secret’);
$helper = new FacebookCanvasLoginHelper();
// see if a existing session exists
if ( isset( $_SESSION ) && isset( $_SESSION[‘fb_token’] ) ) {
// create new session from saved access_token
$session = new FacebookSession( $_SESSION[‘fb_token’] );
// validate the access_token to make sure it’s still valid
try {
if ( !$session->validate() ) {
$session = null;
}
} catch ( Exception $e ) {
// catch any exceptions
$session = null;
}
}
if ( !isset( $session ) || $session === null ) {
// no session exists
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
// When Facebook returns an error
// handle this better in production code
print_r( $ex );
} catch( Exception $ex ) {
// When validation fails or other local issues
// handle this better in production code
print_r( $ex );
}
}
// see if we have a session
if ( isset( $session ) ) {
try {
// Exchange the short-lived token for a long-lived token.
$_SESSION[‘fb_token’] = $session->getToken();
// create a session using saved token or the new one we generated at login
$session = new FacebookSession( $session->getToken() );
//$longLivedAccessToken = $accessToken->extend();
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$me = $response->getGraphObject();
echo $me->getProperty('id');
$_SESSION['idD'] = $me->getProperty('id');
echo $me->getProperty('name');
$_SESSION['nameD'] = $me->getProperty('name');
echo $me->getProperty('email');
$_SESSION['emailD'] = $me->getProperty('email');
require ‘MYCANVAS.php’;
} catch(FacebookRequestException $e) {
echo $e->getMessage();
}
} else {
$helper = new FacebookRedirectLoginHelper(‘https://apps.facebook.com/myapp/’);
$auth_url = $helper->getLoginUrl(array(‘user_about_me’, ‘email’, ‘user_friends’, ‘publish_actions’, ‘user_games_activity’,‘friends_games_activity’));
echo “";
}
?>[/php]
this works perfect, no problem… in this page, I also load a canvas and this, with AJAX, send some data ($score) to another page (the page I want to get works), and the page is this:
POSTSCORE.PHP
[php]<?php
session_start();
$myscore= $_POST[‘myscore’];
echo $_SESSION[‘fb_token’];
require_once( ‘Facebook/HttpClients/FacebookHttpable.php’ );
require_once( ‘Facebook/HttpClients/FacebookCurl.php’ );
require_once( ‘Facebook/HttpClients/FacebookCurlHttpClient.php’ );
require_once( ‘Facebook/Entities/AccessToken.php’ );
require_once( ‘Facebook/Entities/SignedRequest.php’);
require_once( ‘Facebook/FacebookSession.php’ );
require_once( ‘Facebook/FacebookSignedRequestFromInputHelper.php’);
require_once( ‘Facebook/FacebookCanvasLoginHelper.php’);
require_once( ‘Facebook/FacebookRedirectLoginHelper.php’ );
require_once( ‘Facebook/FacebookRequest.php’ );
require_once( ‘Facebook/FacebookResponse.php’ );
require_once( ‘Facebook/FacebookSDKException.php’ );
require_once( ‘Facebook/FacebookRequestException.php’ );
require_once( ‘Facebook/FacebookOtherException.php’ );
require_once( ‘Facebook/FacebookAuthorizationException.php’ );
require_once( ‘Facebook/GraphObject.php’ );
require_once( ‘Facebook/GraphUser.php’);
require_once( ‘Facebook/GraphSessionInfo.php’ );
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
FacebookSession::setDefaultApplication(‘id’,‘secret’);
$session = FacebookSession::newAppSession();
if ($session) {
try {
//$session->validate();
$session = new FacebookSession($session->getToken());
$request = new FacebookRequest($session, ‘GET’, ‘/me’);
$response = $request->execute();
$me = $response->getGraphObject();
echo $me->getProperty('name');
$request = new FacebookRequest( $session, ‘POST’, ‘/me/scores’, array ( ‘score’ => $myscore,‘application’ => ‘763405453345565’, ));
$response = $request->execute();
$graphObject = $response->getGraphObject();
echo “works”;
} catch(FacebookRequestException $e) {
echo $e->getMessage();
}
} else {
$helper = new FacebookRedirectLoginHelper(‘https://apps.facebook.com/myapp/’);
$auth_url = $helper->getLoginUrl(array(‘user_about_me’, ‘email’, ‘user_friends’, ‘publish_actions’, ‘user_games_activity’,‘friends_games_activity’));
//echo “";
}
?>[/php]
I get the error this page… but, if I try to load the old token with:
$session = $_SESSION[‘fb_token’];, I get another error:
PHP Catchable fatal error: Argument 1 passed to Facebook\FacebookRequest::__construct() must be an instance of Facebook\FacebookSession, string given, called in postScore.php on line 63 and defined in FacebookRequest.php on line 182
the line 63 is this: $request = new FacebookRequest($session, ‘GET’, ‘/me’);
someone know how I can fix it? should be a problem in the token… but I don’t understand why, I also tried to load the token generated in the index.php…so, I don’t have any idea ???
thank you very much!! really