我正在尝试从facebook用户那里获取基本信息。我正在关注官方文档。我不知道如何摆脱这个错误。
session_start();
require_once 'Facebook/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'XXXXX', // Replace {app-id} with your app id
'app_secret' => 'xxxxxxxxxx',
'default_graph_version' => 'v2.2',
]);
$helper = $fb->getRedirectLoginHelper();
//Get the Access Token
try {
//access token for the account
$access_token=$helper->getAccessToken();
} catch (Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an erorr'. $e->getMessage();
exit;
}catch(Facebook\Exceptions\FacebookSDKException $e){
echo 'Graph returned an erorr'. $e->getMessage();
exit;
}
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());
$loginUrl = $helper->getLoginUrl('https://startup-sarathjasrin.c9users.io/login/');
echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';
我正在使用最新的facebook-php-sdk-v5。
答案 0 :(得分:4)
错误表示函数函数hash_equals()不存在。这是一个内置的散列系统的PHP,仅适用于:
(PHP 5> = 5.6.0)
因此,如果您的版本低于5.6.0,则不会内置此功能。阅读文档:here
在旁注上你能够创建自己的hash_equals函数:
if(!function_exists('hash_equals'))
{
function hash_equals($str1, $str2)
{
if(strlen($str1) != strlen($str2))
{
return false;
}
else
{
$res = $str1 ^ $str2;
$ret = 0;
for($i = strlen($res) - 1; $i >= 0; $i--)
{
$ret |= ord($res[$i]);
}
return !$ret;
}
}
}
或者从git here下载兼容包但是这个包用于较新的php哈希并且需要一些代码返工,因为它使用password_verify而不是hash_equals
答案 1 :(得分:1)
Facebook PHP SDK开发人员已经为此包含了一个polyfill: https://github.com/facebook/.../polyfills.php
所以你应该只在你的脚本中包含这个文件; 例如:
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Facebook'. DIRECTORY_SEPARATOR . 'polyfills.php');
创建自己的hash_equals函数可能会导致不可预测的行为,因为polyfills.php实现略有不同。
答案 2 :(得分:0)
我遇到了同样的问题。我做的是:
require_once __DIR__ . '/polyfills.php';
生成错误:/ SignRequest.php