web-dev-qa-db-fra.com

Erreur: Classe 'Facebook\FacebookSession' introuvable avec le facebook PHP SDK

J'ai de la difficulté avec la documentation de Facebook sur le SDK. J'ai téléchargé le SDK de Github et je l'ai ajouté à mon projet PHP.

Voici le système de fichiers:

   ├── Facebook
   │   ├── FacebookAuthorizationException.php
   │   ├── FacebookCanvasLoginHelper.php
   │   ├── FacebookClientException.php
   │   ├── FacebookJavaScriptLoginHelper.php
   │   ├── FacebookOtherException.php
   │   ├── FacebookPermissionException.php
   │   ├── FacebookRedirectLoginHelper.php
   │   ├── FacebookRequest.php
   │   ├── FacebookRequestException.php
   │   ├── FacebookResponse.php
   │   ├── FacebookSDKException.php
   │   ├── FacebookServerException.php
   │   ├── FacebookSession.php
   │   ├── FacebookThrottleException.php
   │   ├── GraphLocation.php
   │   ├── GraphObject.php
   │   ├── GraphSessionInfo.php
   │   ├── GraphUser.php
   │   └── fb_ca_chain_bundle.crt
   └── test.php

voici mon code jusqu'à présent:

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

FacebookSession::setDefaultApplication('*******','******');

$helper = new FacebookRedirectLoginHelper('http://isgeek.eu/fb/FaRepost/return.php');
$loginUrl = $helper->getLoginUrl();
// Use the login url on a link or button to redirect to Facebook for authentication

Je reçois cette erreur

Fatal error: Class 'Facebook\FacebookSession' not found in /homepages/2/d184071366/htdocs/isgeek/fb/FaRepost/test.php on line 9

À la mise à jour de ma version PHP, le problème ne vient donc pas d'ici. Il semble que les fichiers PHP ne soient pas trouvés. J'ai lu cette question ( Facebook SDK v4 pour PHP Exemple minimal ), mais cela n’aide en rien.

D'où vient-il?

10
Paul Fournel

J'ai trouvé la solution ici

Je n'ai pas codé en php depuis un certain temps et les choses ont changé. use Facebook\FacebookSession; n'est pas suffisant. Vous devez également ajouter un require_once.

require_once( 'Facebook/FacebookSession.php' );

Edit: pour une solution plus détaillée, veuillez vérifier la réponse ci-dessous.

14
Paul Fournel

Ce code a fonctionné pour moi 

session_start();

require_once( 'Facebook/FacebookSession.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/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/Entities/AccessToken.php' );
require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );
require_once( 'Facebook/HttpClients/FacebookCurl.php' ); 

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookCurl; 

// init app with app id (APPID) and secret (SECRET)
FacebookSession::setDefaultApplication('XXXX', 'XXXXXXXXXXXX');

// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'http://localhost/demo/demo2/demo2.php' );

try {

  $session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
  // When Facebook returns an error
} catch( Exception $ex ) {
  // When validation fails or other local issues
}

// see if we have a session
if ( isset( $session ) ) {
  // graph api request for user data
  $request = new FacebookRequest( $session, 'GET', '/me' );
  $response = $request->execute();
  // get response
  $graphObject = $response->getGraphObject();

  // print data
  echo  print_r( $graphObject, 1 );
} else {
  // show login url
  echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
3
www.amitpatil.me

Vous devriez faire attention avec tous les chemins!

Je ne vois pas "autoload.php" dans votre système de fichiers. Dans mon cas, j'ai mis le contenu de PHP SDK dans le répertoire "fb" et utilisé les chemins d'accès (ajoutés DIR. Dans la ligne "define" par rapport à l'exemple de https : //developers.facebook.com/docs/php/gettingstarted/4.0.0 )

define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/fb/src/Facebook/');
require __DIR__ . '/fb/autoload.php';

echo FACEBOOK_SDK_V4_SRC_DIR; //to check if the paths are correct

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
<...>

Cela a aidé à éviter ce genre d'erreur.

3
Darius Miliauskas
require_once 'Facebook/autoload.php';
$fb = new Facebook\Facebook([
  'app_id' => '{app_id}',
  'app_secret' => '{app_secret}',
  'default_graph_version' => 'v2.2',
]);

-Juste ajouter ce code .il fonctionne . entrez votre app_id et app_secret de votre facebookAPP 

0
Gaurav

Pas besoin d'utiliser require ou include. Je l'ai résolu. Utilisez simplement la ligne suivante en haut de votre script:

define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');

et vous avez terminé.

0
Arvind Bhardwaj