PHP:如何从Facebook检索配置文件数据

时间:2010-08-23 16:12:50

标签: php facebook

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

第一部分进展顺利。我创建了mysite.com?page=import链接,该链接在弹出窗口中打开,然后重定向到https://graph.facebook.com/oauth/authorize?... 然后用户允许访问,弹出窗口重定向回mysite.com?...。#access_token = ...。& expire = in = 4031 然后我将关闭弹出窗口,而是刷新打开此弹出窗口的父窗口,方法是将其重定向到类似mysite.com?page=register&access_token=...&expires_in=4031 然后我打算使用他们的PHP SDK,希望它可以使用这个访问令牌,并允许我获取用户的数据。但到目前为止我没有运气。我已经尝试了很多东西并通过了facebook.php,但看不到解决方案。请让我知道如何执行此操作:在弹出窗口中授权用户,然后在php中收集配置文件数据。

1 个答案:

答案 0 :(得分:0)

这是你的工作范例。 它有一个重定向,完全在PHP中工作,我没有做javascript因为这更容易和更快写。 主要区别在于授权页面后返回的代码只是一个代码,允许您获取与客户端密钥组合的实际访问令牌。 否则,任何人都可以为您的应用程序获取访问令牌,或者您必须在URL中传递您的秘密令牌。 这就是第二步的原因。 在javascript我们不需要,因为Facebook只重定向回白名单域 并且由于访问令牌位于#标签之后的url片段中,服务器无法访问它,只有客户端访问它。由于您的域名必须列入白名单,因此确保您的身份更加正确。 但它需要更多的客户互动...... 好吧无论如何。你可以使用我为yuo编写的代码,你也可以在弹出窗口中执行。你只需要将变量传递给表单或者你正在做什么,但这不应该是一个问题。我是这样做的,因为你说你需要它在PHP中。一个好的JavaScript示例可以在facebook连接页面上找到:http://developers.facebook.com/docs/guides/web#login

有什么问题吗?发表评论!

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

将此文件保存为whatever.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><?
}
?>