PHP:如何从Facebook检索个人资料数据

PHP:如何从Facebook检索个人资料数据,php,facebook,Php,Facebook,我一直在看FB的文件,但我想我现在完全迷路了。我的任务很简单:我需要有一个“导入”链接,用户点击它并收到FB弹出窗口,他授权的网站,用户被重定向回我的网站,我访问用户的FB配置文件和检索一些数据。另外:我需要访问和检索PHP中的配置文件 第一部分进展顺利。我创建了mysite.com?page=import链接,该链接在弹出窗口中打开,然后重定向到?。。。 然后,用户允许访问,弹出窗口被重定向回mysite.com?…#访问_令牌=…&expires_in=4031 然后我将关闭弹出窗口,并通过

我一直在看FB的文件,但我想我现在完全迷路了。我的任务很简单:我需要有一个“导入”链接,用户点击它并收到FB弹出窗口,他授权的网站,用户被重定向回我的网站,我访问用户的FB配置文件和检索一些数据。另外:我需要访问和检索PHP中的配置文件

第一部分进展顺利。我创建了mysite.com?page=import链接,该链接在弹出窗口中打开,然后重定向到?。。。 然后,用户允许访问,弹出窗口被重定向回mysite.com?…#访问_令牌=…&expires_in=4031 然后我将关闭弹出窗口,并通过重定向到mysite.com?page=register&access\u token=…&expires\u in=4031来刷新打开此弹出窗口的父窗口
然后我打算使用他们的PHPSDK,希望它能够获取这个访问令牌,并允许我获取用户的数据。然而,到目前为止我没有运气。我尝试了很多方法,浏览了facebook.php,但没有找到解决方案。请让我知道如何做:在弹出窗口中授权用户,然后用php收集配置文件数据。

这是您的工作示例。 它有一个重定向,完全在php中工作,我没有使用javascript,因为这样更容易、更快地编写。 主要区别在于,授权页面之后返回的代码只是一个代码,它允许您结合客户机机密获取实际访问令牌。 否则,任何人都可以获得your应用程序的访问令牌,或者您必须在url中传递您的秘密令牌。 这就是第二步的原因。 在javascript中,我们不需要这样做,因为facebook只重定向回一个白名单域 由于访问令牌位于#标记后面的url片段中,服务器无法访问它,只有客户端才能访问它。这是确保您的服务器,因为您的域必须被列入白名单。 但它需要更多的客户互动。。。 不管怎样。您可以使用我为yuo编写的代码,也可以在弹出窗口中执行。您只需将变量传递给表单或您正在执行的任何操作,但这不应该是一个问题。我这样做是因为你说你需要php。facebook connect页面上有一个很好的javascript示例:

有问题吗?评论

ps:我将@符号放在file_get_contents函数之前,因为您可能会发现ssl错误,您应该实际使用curl并进行错误处理

将此文件另存为which.php到您的服务器,检查顶部的4个配置变量并点击它

<?
// your app id
$app_id = "123";

// your secret token
$mysecret = '***';

// your website correctly set up in facebook app config
$redirecturl = "http://www.yourdomain.com/whatever/thisfile.php?action=authorized";

// what you want to fetch
$scopes = array('email','user_interests'); // whatever you want


if($_GET['action'] == 'authorize') {
    $url = "https://graph.facebook.com/oauth/authorize?client_id=".$app_id."&redirect_uri=";
    $url .= urlencode($redirecturl);
    $url .= "&display=popup";
    $url .= "&scope=".implode(',',$scopes);
    header("Location: $url");
    exit();
} else if($_GET['action'] == 'authorized') {
    $code = $_GET['code'];
    $tokenurl = 'https://graph.facebook.com/oauth/access_token'.
    '?client_id='.$app_id .
    '&redirect_uri='.urlencode($redirecturl).
    '&client_secret='.$mysecret.
    '&code='.$code;
    $token = @file_get_contents($tokenurl);
    $token = preg_match('/access_token=(.*)&/',$token,$extracted_token);
    $token = $extracted_token[1];
    $dataurl = 'https://graph.facebook.com/me?access_token='.$token;
    $result = @file_get_contents($dataurl);
    $data = json_decode($result);
    echo "<pre>".print_r($data,true)."</pre>";
} else {
    ?><a href="?action=authorize">click here to immport your data</a><?
}
?>

以下是您的工作示例。 它有一个重定向,完全在php中工作,我没有使用javascript,因为这样更容易、更快地编写。 主要区别在于,授权页面之后返回的代码只是一个代码,它允许您结合客户机机密获取实际访问令牌。 否则,任何人都可以获得your应用程序的访问令牌,或者您必须在url中传递您的秘密令牌。 这就是第二步的原因。 在javascript中,我们不需要这样做,因为facebook只重定向回一个白名单域 由于访问令牌位于#标记后面的url片段中,服务器无法访问它,只有客户端才能访问它。这是确保您的服务器,因为您的域必须被列入白名单。 但它需要更多的客户互动。。。 不管怎样。您可以使用我为yuo编写的代码,也可以在弹出窗口中执行。您只需将变量传递给表单或您正在执行的任何操作,但这不应该是一个问题。我这样做是因为你说你需要php。facebook connect页面上有一个很好的javascript示例:

有问题吗?评论

ps:我将@符号放在file_get_contents函数之前,因为您可能会发现ssl错误,您应该实际使用curl并进行错误处理

将此文件另存为which.php到您的服务器,检查顶部的4个配置变量并点击它

<?
// your app id
$app_id = "123";

// your secret token
$mysecret = '***';

// your website correctly set up in facebook app config
$redirecturl = "http://www.yourdomain.com/whatever/thisfile.php?action=authorized";

// what you want to fetch
$scopes = array('email','user_interests'); // whatever you want


if($_GET['action'] == 'authorize') {
    $url = "https://graph.facebook.com/oauth/authorize?client_id=".$app_id."&redirect_uri=";
    $url .= urlencode($redirecturl);
    $url .= "&display=popup";
    $url .= "&scope=".implode(',',$scopes);
    header("Location: $url");
    exit();
} else if($_GET['action'] == 'authorized') {
    $code = $_GET['code'];
    $tokenurl = 'https://graph.facebook.com/oauth/access_token'.
    '?client_id='.$app_id .
    '&redirect_uri='.urlencode($redirecturl).
    '&client_secret='.$mysecret.
    '&code='.$code;
    $token = @file_get_contents($tokenurl);
    $token = preg_match('/access_token=(.*)&/',$token,$extracted_token);
    $token = $extracted_token[1];
    $dataurl = 'https://graph.facebook.com/me?access_token='.$token;
    $result = @file_get_contents($dataurl);
    $data = json_decode($result);
    echo "<pre>".print_r($data,true)."</pre>";
} else {
    ?><a href="?action=authorize">click here to immport your data</a><?
}
?>


你能提供检索用户数据的php代码吗?好的,我今天心情很好,你马上就能得到完整的代码;)你能提供检索用户数据的php代码吗?好的,我今天心情很好,你马上就能得到完整的代码;)呃…谢谢,不知什么原因我没有注意到。。。我现在觉得很奇怪,因为我在同一篇文章中阅读了oauth的所有内容。由于某种原因,在获得令牌之后,我就开始玩facebook.php,它可能使用了其他实现(oauth2?),但没有继续玩下去,因为facebook.php需要更多信息,比如uid、expires等。。无论如何,谢谢你的帮助,并为这个不太聪明的问题感到抱歉:)嗯……谢谢,不知什么原因,我没有注意到。。。我现在觉得很奇怪,因为我在同一篇文章中阅读了oauth的所有内容。由于某种原因,在获得令牌之后,我就开始玩facebook.php,它可能使用了其他实现(oauth2?),但没有继续玩下去,因为facebook.php需要更多信息,比如uid、expires等。。无论如何,谢谢你的帮助,并为这个不太聪明的问题感到抱歉:)