PHP 5.3 可以使用哪个 Facebook SDK?

Which Facebook SDK to use with PHP 5.3?

不幸的是,我已经走到了死胡同。由于各种遗留和其他原因,我无法将系统升级到 PHP 5.4。还有 according to Facebook,我需要 5.4 到 运行 最新的 SDK。

我愿意接受较低的 SDK,但是:

  1. 如果我使用旧版 SDK 可以吗?
  2. 我应该使用哪个 SDK?

奖金问题:

  1. composer路径应该改成什么才能使用旧的SDK?目前我有:

    "facebook/php-sdk-v4":“4.0.*”

您仍然可以使用旧版本:https://github.com/facebookarchive/facebook-php-sdk

api调用是一样的。新的只是推荐的。您甚至可以在没有任何 SDK 的情况下使用自己的 CURL 调用。

不过您应该使用最新的,更换您的供应商可能是个好主意。 PHP 5.4 应该是每个认真的提供商都支持的绝对最低要求。

对于旧的 PHP,您真的不需要作曲家。只需下载并放入您的服务器即可。

不,您使用旧版本的 php-sdk 不会有任何风险。如前所述,您可以编写自己的 curl 而不使用 SDK。直到 2013 年,我的应用程序就是这样编写的。

这是旧版本:

{
    "require": {
        "facebook/php-sdk" : "3.2.3"
    }
}

然后:

php composer.phar require facebook/php-sdk:3.2.3

2020 年我的回答更新 -

我厌倦了 Facebook 首先弃用 PHP 版本,然后弃用其完整的 PHP SDK 我还注意到,使用 Facebook Javascript SDK 可以通过将 Facebook 用户 ID 伪造到我的 Facebook Canvas 网络应用程序。

所以我编写了一个纯粹的 PHP 解决方案来获取基本的用户信息 - 在服务器端并且不使用任何外部库。

我的脚本基于 Facebook 向所有 Canvas 网络应用程序发送 signed_request 参数这一事实。

如果在 PHP 脚本的顶部添加以下行就可以看到它:

error_log(print_r($_POST, TRUE));

通过解析“signed_request”参数,您会得到一个“oauth_token”,可用于获取“/me”GRAPH API 页面。

这是我的脚本,记得用 Facebook dashboard:

中的值替换 APP_ID 和 APP_SECRET
const APP_ID     = '1234567890';
const APP_SECRET = 'abcdefghijk';

$data            = parse_signed_request($_POST['signed_request']);
$oauth_token     = $data['oauth_token'];
$user_id         = $data['user_id'];
$photo           = "https://graph.facebook.com/$user_id/picture?type=large";

$me = json_decode(file_get_contents("https://graph.facebook.com/me?access_token=$oauth_token"), true);
list($given_name, $family_name) = explode(' ', $me['name'], 2);

# TODO use the $user_id, $given_name, $family_name, $photo in your web app!

function parse_signed_request($signed_request) {
    list($encoded_sig, $payload) = explode('.', strtr($signed_request, '-_,', '+/='), 2);

    $sig  = base64_decode($encoded_sig);
    $data = json_decode(base64_decode($payload), true);

    $expected_sig = hash_hmac('sha256', $payload, APP_SECRET, true);
    if ($sig !== $expected_sig) {
        exit('Wrong sig');
    }

    return $data;
}