【问题标题】:Facebook Graph API PHP SDK v4 - Post on PageFacebook Graph API PHP SDK v4 - 在页面上发布
【发布时间】:2014-05-08 04:39:11
【问题描述】:

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

【问题讨论】:

  • yes cUrl 已安装。

标签: php facebook facebook-graph-api


【解决方案1】:

更新: 2014 年 6 月 27 日,SDK 现在为无法使用 composer 的用户提供 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 的内部依赖于您未包含的其他几个类。这就是自动加载在这里非常重要的原因。

使用 Composer 自动加载

最好的方法是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");

【讨论】:

    【解决方案2】:

    在这里,我修复了更新 Facebook Graph SDK 的解决方案,对于简短的回答,我深表歉意。

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

    ;extension=fileinfo
    

    删除 ;标记到

    extension=fileinfo
    

    然后执行命令,

    composer update
    

    致谢:StackOverflow、Bing 和 Google 搜索。 警告:我使用 Laravel、Wnmp 作为本地网络服务器。 注意:此评论可能需要修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多