Я хочу дать всем авторам веб-сайта возможность опубликовать свои статьи на нашей странице в facebook, не предоставив им доступ администратора к нему.
Поэтому я создал простую форму, в которой автор вводит: URL, URL-адрес изображения, сообщение
В режиме отправки эта форма отправит запрос ajax на facebook.php, где должно произойти волшебство.
Первая проблема возникает при «require_once». Невозможно потребовать все 4 файла без ошибки. Если я избавлюсь от исключения facebook, тогда все будет работать, кроме самого запроса. Кажется, что есть ошибка PHP, потому что я вообще не получаю никакого ответа от ajax.
session_start(); require_once($_SERVER['DOCUMENT_ROOT'].'/sys/facebook/FacebookSession.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/sys/facebook/FacebookRequest.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/sys/facebook/GraphObject.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/sys/facebook/FacebookRequestException.php'); use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\GraphObject; use Facebook\FacebookRequestException; $message = safe($_POST["message"]); $url = safe($_POST["url"]); $image = safe($_POST["image"]); if($message == "" OR $url == "" OR $image == ""){ echo "incomplete"; return; } FacebookSession::setDefaultApplication('{APP ID}','{APP SECRET}'); $session = new FacebookSession('{Page Access Token}'); if($session) { try { $response = (new FacebookRequest( $session, 'POST', '/{Page ID}/feed', array( 'message' => $message, 'link' => $url, 'picture' => $image ) ))->execute()->getGraphObject(); echo "Posted with id: " . $response->getProperty('id'); } catch(FacebookRequestException $e) { echo "Exception occured, code: " . $e->getCode(); echo " with message: " . $e->getMessage(); } } else { echo "No Session available!"; }
Обновление: 27 июня 2014 года. Теперь SDK оснащен встроенным автозагрузчиком для тех, кто не может использовать композитор.
require __DIR__ . '/path/to/facebook-php-sdk-v4/autoload.php';
Если этот путь автоматически не найден, вы можете определить его с помощью FACEBOOK_SDK_V4_SRC_DIR
.
define('FACEBOOK_SDK_V4_SRC_DIR', '/path/to/facebook-php-sdk-v4/src/Facebook/'); require __DIR__ . '/path/to/facebook-php-sdk-v4/autoload.php';
Внутренние части SDK полагаются на несколько других классов, которые вы не включаете. Вот почему автозагрузка действительно важна здесь.
Лучший способ сделать это – установить композитор . И добавьте SDK в файл composer.json
в корень вашего проекта.
{ "require" : { "facebook/php-sdk-v4" : "4.0.*" } }
Затем запустите composer install
из командной строки, где находится файл composer.json
. Затем включите автозагрузчик в верхней части вашего скрипта.
require_once __DIR__ . '/vendor/autoload.php';
Альтернативным способом автозагрузки этих файлов является замена вашего require_once
вверху этим решением от rm-vanda :
function facebookLoader($class) { require "/path/to/facebook-php-sdk-v4-master/src/" . str_replace("\\", "/", $class) . ".php"; } spl_autoload_register("facebookLoader");