Facebook Graph API PHP SDK v4 - Post on Page


Facebook Graph API PHP SDK v4 - Post on Page

我想让我所有的网站作者都有可能在我们的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!";
}

更新: 2014年6月27日, SDK现在带有内置的自动加载器,供那些不能使用composer的人使用。

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的内部依赖于您没有包含的其他几个类。这就是为什么自动加载在这里非常重要。

使用Composer自动加载

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

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

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

require_once __DIR__ . '/vendor/autoload.php';
<标题>手动半自动的h1> 动加载这些文件的另一种方法是将顶部的require_once替换为rm-vanda: 的解决方案。
function facebookLoader($class) {
    require "/path/to/facebook-php-sdk-v4-master/src/" . str_replace("''", "/", $class) . ".php";
}
spl_autoload_register("facebookLoader");

在这里我得到了我的解决方案修复更新Facebook Graph SDK,我很抱歉简短的回答。

我更新了php.ini文件,并通过取消注释启用了fileinfo扩展名

;extension=fileinfo

删除;标签

extension=fileinfo

然后执行命令,

composer update

credit: StackOverflow, Bing和Google搜索。警告:我使用的是Laravel Wnmp作为本地web服务器。注意:此注释可能需要修改