Facebook Graph API PHP SDK v4 - 在页面上发布

use*_*800 3 php facebook facebook-graph-api

我想给我的所有网站作者一个可能性,在我们的Facebook页面上发布他们的文章,而不必给他们管理员访问它.

所以我创建了一个简单的表单,作者输入:URL,URL到图像,消息

提交时,此表单将向facebook.php发送一个ajax请求,其中魔术"应该"发生.

第一个问题发生在"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!";
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*myK 6

更新: 2014年6月27日,SDK现在为不能使用composer的用户提供内置自动加载器.

require __DIR__ . '/path/to/facebook-php-sdk-v4/autoload.php';
Run Code Online (Sandbox Code Playgroud)

如果这不能自动为您找到路径,您可以使用它来定义它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';
Run Code Online (Sandbox Code Playgroud)

SDK的内部依赖于您未包含的其他几个类.这就是为什么自动加载在这里非常重要的原因.

使用Composer自动加载

最好的方法是安装composer.并将composer.json文件中的SDK添加到项目的根目录中.

{
    "require" : {
        "facebook/php-sdk-v4" : "4.0.*"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后composer installcomposer.json文件所在的命令行运行.然后在脚本顶部包含自动加载器.

require_once __DIR__ . '/vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

手动自动加载

另一种自动加载这些文件的方法是require_once使用rm-vanda的解决方案替换顶部的文件:

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

spl_autoload_register("facebookLoader");
Run Code Online (Sandbox Code Playgroud)