2014-05-08 70 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");