我正在尝试实现一个简单的 Facebook 登录(连接)到我自己的网页。
我想看到的是:(1)FB对话框(2)如果用户接受,得到'yyyyy'(3)如果用户拒绝,得到'zzzzz'。
我看到的是:(1)带有 Go To App/Cancel 的 FB 对话框(2)如果用户接受,则获得“yyyyy”(3)如果用户拒绝,另一个带有 Go To App/Leave App 的 FB 对话框(4 ) 如果用户再次拒绝,进入FB。
这是代码(我在一开始隐藏了实际的 3 个值):
<?php
session_start();
$app_id = 'xxxxxxxxxxxxxxx';
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$my_url = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
require_once("facebook.php");
$config = array();
$config['appId'] = $app_id;
$config['secret'] = $app_secret;
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
$ok_to_continue = false;
$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'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
else { // $code not empty
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_curl($token_url);
$params = null;
parse_str($response, $params);
if (isset($params['access_token'])) {
$_SESSION['access_token'] = $params['access_token'];
$ok_to_continue = true;
} else {
oops('Error 2', '');
echo ('<p>==='.$response.'===</p>');
}
} else {
oops('Error 1', '');
}
}
// Get user data:
if ($ok_to_continue) {
$user_id = $facebook->getUser();
if ($user_id) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
oops('Error 3', $e);
}
}
}
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function oops($errmsg, $logmsg) {
global $ok_to_continue;
$ok_to_continue = false;
if ($errmsg !== '') { echo('<p><b>' . $errmsg . '</b></p>'); }
if ($logmsg !== '') { error_log($logmsg); }
}
?>
<?php if ($ok_to_continue): ?>
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
<?php else: ?>
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
<?php endif; ?>