Facebook SDK v4 для PHP Минимальный пример

Я пытаюсь получить минимальный пример

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
}

из README, но я не понимаю, что означает первая строка кода. Где я должен поместить файл PHP, используя этот минимальный пример кода в структуре файла SDK. Я пробовал прямо в папке src, но это возвращает следующую ошибку PHP

[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

Структура файла выглядит следующим образом:

├── 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

Ответ 1

недавно решили это. поскольку есть файл autoload.php, доступный с помощью sdk, вам не нужно использовать require и т.д. и т.д. просто включите, что autoload.php в начале

 <?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>';
}

?>

после этого вам необходимо проверить путь в файле autoload.php

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

эта строка является кодом по умолчанию, если вы изменили имя каталогов, например, поместили все файлы из/src/Facebook/в/sdk/, а затем просто замените имя всегда проверяйте входящий путь с помощью die(__DIR__ . '/src/Facebook/'); чтобы убедиться, что это правильно.

Ответ 2

Здесь есть полный (рабочий) пример: http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-get-started/

Код:

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

Ответ 3

Я думаю, вам нужно изменить эту строку:

using Facebook\FacebookSession;

к

use Facebook\FacebookSession;

для использования пространства имен в php ключевое слово use больше на php с использованием пространств имён

Update:

с помощью пространств имен автоматически не включается script, вам нужно указать путь в вашей автозагрузке (если он у вас есть) или просто:

include 'path/to/FacebookSession.php';

Update2:, сначала прочитайте пространства имен php в руководстве, во-вторых, нет, если он уже включен в исходный класс, то вы этого не сделаете. или если он придерживается psr- *, то вы можете использовать некоторый автозагрузчик или использовать spl_autoload_register

Ответ 4

Да, новые уроки не очень полезны.

Я бегу через них, сам, и просто чтобы привести примеры к работе, я сделал:

function facebookLoader($class) {
    require "/path/to/facebook-php-sdk-v4-master/src/" . str_replace("\\", "/", $class) . ".php";
}

spl_autoload_register("facebookLoader");

Facebook\FacebookSession::setDefaultApplication([...]

и добавлено Facebook\ где-либо, где было вызвано имя класса.

Кроме того, в учебнике есть часть, в которой говорится: FacebookRedirectLoginHelper();

Когда вы, по сути, все равно должны внести свой вклад:

FacebookRedirectLoginHelper("http://yourRedirectUri.com/");

Получил меня через учебник -! Теперь выясним, как получить адрес электронной почты пользователя/полную информацию о профиле.

Ответ 5

Чтобы избежать использования require или require_once и чтобы иметь лучшую структуру проекта, вы должны выполнить следующие шаги:

  • Установить композитор из https://getcomposer.org/
  • Создайте файл composer.json в корне вашего веб-приложения со следующим содержимым: { "require" : { "facebook/php-sdk-v4" : "4.0.*" } }

  • Вызов php composer.phar install

  • Создать папку src/Acme/App
  • Создайте файл src/Acme/App/Run.php со следующим содержимым:

<?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...
    }

}
  • Создайте файл index.php со следующим содержимым:

<?php

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

Это будет скелет вашего приложения Facebook (все ваши последующие классы должны соответствовать стандарту PSR-4). Используя автозагрузчик композитора, вам не нужно использовать require_once для классов в любом зарегистрированном пространстве имен.

P.S. Вы можете удалить все свои библиотеки из корня веб-сайта. Это поможет предотвратить прямой доступ из Интернета к ним. Затем вы можете просто изменить пути и сохранить только index.php в своем веб-корне. Надеюсь, это ясно.

Ответ 6

  • Требуется PHP версия 5.4.0 или выше.
  • Facebook использует Реализации PSR-4. Следовательно, вам не нужно использовать require или require_once или include или include_once.
  • В PSR-4 вам просто нужно указать имя пакета (namespace), то есть имя каталога и имя файла класса. Он будет динамически регистрировать классы из указанного имени пакета .Ex.:- use packaname\classname.
  • Вы найдете файл autoload.php в Facebook SDK Autoload корневой каталог.
  • use используется для загрузки динамических классов с помощью spl_autoload_register
  • Facebook регистрирует всю библиотеку, используя autoload.php или autoload_fb.php
  • Вам необходимо найти autoload.php в вашей загруженной библиотеке, например facebook-php-sdk-v4-4.0-dev/.
  • Если вы просто хотите использовать Facebook библиотеку из источника загрузки. Затем вам нужно скопировать autoload.php в корневую директорию или в каталог Facebook.
  • определенная константа для FACEBOOK_SDK_V4_SRC_DIR то есть путь библиотеки facebook
  • Вам нужно сделать, как показано ниже, использовать в php

Примечание: Я скопировал каталог /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook и /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php в корневой каталог /var/www/stack/24006673/

define('FACEBOOK_SDK_V4_SRC_DIR','/var/www/stack/24006673/Facebook/');
require_once("autoload.php");
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET');

Ответ 7

Я решил это. Просто используйте следующую строку вверху вашего script:

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

и все готово.

Ответ 8

просто включите эту страницу include:

требуется DIR. '/path/to/facebook-php-sdk-v4/autoload.php';

Также вызывайте класс перед использованием, каждый раз, когда вам нужно:

использовать Facebook\FacebookSession;