web-dev-qa-db-fra.com

Facebook SDK v4 pour PHP Exemple minimal

J'essaie d'obtenir l'exemple minimal

using Facebook\FacebookSession;

FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET');

// Use one of the helper classes to get a FacebookSession object.
//   FacebookRedirectLoginHelper
//   FacebookCanvasLoginHelper
//   FacebookJavaScriptLoginHelper
// or create a FacebookSession with a valid access token:
$session = new FacebookSession('access-token-here');

// Get the GraphUser object for the current user:

try {
  $me = (new FacebookRequest(
    $session, 'GET', '/me'
  ))->execute()->getGraphObject(GraphUser::className());
  echo $me->getName();
} catch (FacebookRequestException $e) {
  // The Graph API returned an error
} catch (\Exception $e) {
  // Some other error occurred
}

du README fonctionne, mais je ne comprends pas ce que signifie la première ligne de code. Où dois-je placer le fichier PHP en utilisant cet exemple de code minimal dans la structure de fichier SDK. J'ai essayé directement dans le dossier src, mais cela renvoie l'erreur PHP suivante

[01-May-2014 20:12:26 Europe/Berlin] PHP Parse error:  syntax error, unexpected 'Facebook' (T_STRING) in /Applications/MAMP/htdocs/facebook-php-sdk-v4/src/test.php on line 9

La structure du fichier ressemble à ceci

├── src
│   ├── 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
11
Nick Weisser

ont récemment résolu ce problème car il y a un fichier autoload.php disponible avec sdk que vous n'avez pas besoin d'utiliser, etc etc .

 <?php
session_start();
// added in v4.0.0
require_once 'autoload.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\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;

// start session

// init app with app id and secret
FacebookSession::setDefaultApplication( 'app-id','app-secret' );

// login helper with redirect_uri

    $helper = new FacebookRedirectLoginHelper('http://yourhost/facebook/' );

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 '<pre>' . print_r( $graphObject, 1 ) . '</pre>';
} else {
  // show login url
  echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

?>

après cela, vous devez vérifier le chemin dans le fichier autoload.php

$base_dir = defined('FACEBOOK_SDK_V4_SRC_DIR') ? FACEBOOK_SDK_V4_SRC_DIR : __DIR__ . '/src/Facebook/';

cette ligne est le code par défaut si vous avez changé le nom des répertoires comme tous les fichiers placés dans/src/Facebook/en/sdk/alors remplacez simplement le nom vérifiez toujours le chemin inclus en utilisant die(__DIR__ . '/src/Facebook/');pour vous assurer que si c'est correct.

22
zoomi

Vous trouverez ici un exemple complet (de travail): http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-get- commencé/

Code: 

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' );

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;

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

// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'http://www.metah.ch/' );

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>';
}
10
Ahmet

Je pense que vous devez changer cette ligne: 

using Facebook\FacebookSession;

à

use Facebook\FacebookSession;

utiliser un espace de noms dans php, le mot clé est use plus sur php en utilisant espaces de noms

Mettre à jour:

l'utilisation d'espaces de nommage n'inclut pas automatiquement le script. Vous devez soit inclure le chemin d'accès dans votre chargement automatique (si vous en avez un), soit simplement:

include 'path/to/FacebookSession.php';

Update2: premièrement, veuillez lire les espaces de noms php du manuel, deuxièmement, non, s'il est déjà inclus dans la classe d'origine, vous ne le savez pas. ou s'il adhère à psr- *, vous pouvez utiliser un chargeur automatique ou utiliser spl_autoload_register

6

Pour éviter d'utiliser require ou require_once et pour améliorer la structure du projet, procédez comme suit:

  1. Installez composer à partir de https://getcomposer.org/
  2. Créez un fichier composer.json à la racine de votre application Web avec le contenu suivant: { "require" : { "facebook/php-sdk-v4" : "4.0.*" } }

  3. Appelez php composer.phar install

  4. Créer un dossier src/Acme/App
  5. Créez un fichier src/Acme/App/Run.php avec le contenu suivant:

<?php

namespace Acme\App;

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

class Run {
    const APP_ID = 'app_id';
    const APP_SECRET = 'app_secret';

    public function __construct()
    {
        FacebookSession::setDefaultApplication(self::APP_ID, self::APP_SECRET);
       // ...your code goes here...
    }

}
  1. Créez un fichier index.php avec le contenu suivant:

<?php

$loader = require_once 'vendor/autoload.php';
$loader->add('Acme\App', __DIR__.'/src');
$app = new Run();

Ce sera un squelette de votre application Facebook (toutes vos classes ultérieures doivent suivre la norme PSR-4). En utilisant l'autoloader du compositeur, vous n'avez pas besoin d'utiliser require_once pour les classes dans un espace de noms enregistré.

P.S. Vous voudrez peut-être supprimer toutes vos bibliothèques de la racine Web. Cela aidera à empêcher un accès direct du Web à eux. Ensuite, vous pouvez simplement ajuster les noms de chemin et ne conserver que index.php dans votre racine Web. J'espère que c'est clair.

2
Denis V

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