我正在尝试 facebooks 服务器端登录(使用 PHP),除了显示我的名字之外,一切似乎都正常。所以,我一直在关注这个指南:https ://developers.facebook.com/docs/howtos/login/server-side-login/一切都和那里写的一样。我已经检查并删除了所有内容两次以确保它是正确的。因此,当我登录我的网站时,有时会收到“状态不匹配。您可能是 CSRF 的受害者。”,但我总是收到 Hello。就在你好之后是我的名字应该在的地方,但事实并非如此。所以很明显登录和授权部分有效,但它不会显示我的名字。你们中的任何人都知道可能出了什么问题吗?
这是我的代码:
<?php
$app_id = "MY_APP_ID";
$app_secret = "MY_APP_SECRET";
$my_url = "MY_URL";
session_start();
$code = $_REQUEST["code"];
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'] . "&scope=user_birthday,read_stream";
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$_SESSION['access_token'] = $params['access_token'];
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Personal testing site</title>
</head>
<body>
<p>This is a personal testing site, and is not related to *mysite* or any of their upcoming functions/ products. </p>
</body>
</html>
编辑1:
我想我可能已经发现了错误在哪里,但我仍然不知道如何解决它。因此,当我在编写代码并尝试回显代码的特定部分时,我发现 access_token 是空的。因此, $token_url 有效(我认为),但是当我尝试回显 $response 或 $_SESSION['access_token'] 时,它们都是空白的。当我尝试回显 $graph_url 时,我得到“ https://graph.facebook.com/me?access_token= ”,token= 后面没有任何内容,access_token 应该被连接起来。我不知道是连接问题还是访问令牌为空,但我认为这是最后一个问题。我一次又一次地检查我的代码,而且'
觉得你们能找到什么吗?
编辑2:
当我回显 $token_url 并将其输入我的网络浏览器时,我收到以下错误消息:
{
"error": {
"message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request",
"type": "OAuthException",
"code": 100
}
}
你们是否认为这与facebook使用https运行但我的网站只使用http这一事实有关?
编辑 3:
这是我的应用设置的图片:*Deleted_Picture*
编辑4:
好的,所以我已经修好了。问题是应用程序设置中的 url 必须有最后一个 / ,并且我的代码中的 $my_url 必须完全等于那个。
但是,我又遇到了一个问题。看起来像 Æ Ø Å 这样的字母在某个地方被扭曲了,而 Ø(我的姓)变成了 (ø)(没有括号)。有谁知道如何解决这一问题?