我一直在浏览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中收集配置文件数据。
答案 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><?
}
?>