2014-05-08 41 views
3

我想给我所有的网站作者一个可能性,发布他们的文章在我们的Facebook页面上,而不必让他们的管理员访问它。Facebook图形API PHP SDK v4 - 张贴在页面

所以我创建了一个简单的表格,在这里笔者类型: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!"; 
} 
+0

是cUrl作者:安装? – Tobi

+0

是安装了cUrl。 – user3614800

+0

任何人都可以帮忙吗? – user3614800

回答

6

更新:月,27 2014,该SDK现在使用了built-in autoloader对于那些谁不能使用作曲家。

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的内部靠,你还不包括其他几个班。这就是为什么自动加载在这里非常重要。

自动加载与作曲家

做到这一点,最好的办法就是install composer。然后将composer.json文件中的SDK添加到项目的根目录中。

{ 
    "require" : { 
     "facebook/php-sdk-v4" : "4.0.*" 
    } 
} 

然后通过命令行,其中composer.json文件是运行composer install。然后将自动加载器包含在脚本的顶部。

require_once __DIR__ . '/vendor/autoload.php'; 

手动自动加载

的另一种方式自动加载这些文件是在顶部与rm-vanda这个解决方案,以取代require_once的:

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

spl_autoload_register("facebookLoader");