2012-01-11 186 views
0

我一直在试图解决这个问题三天了,对于那些知道开放图API的人来说,这非常简单。我是新来的Facebook集成,但有一些PHP的经验。存储访问令牌

基本上所有我试图做的是从用户检索以下信息并将其存储在数据库中。

的Facebook用户ID: 名称 性别 电子邮件

我以做用户ID,姓名,性别:

$contents = file_get_contents ('https://graph.facebook.com/'.$user); 
$json=json_decode($contents,true); 
$userid = $json['id']; 
$username = $json['name']; 
$usergender = $json['gender']; 
$useremail = $json['email']; 

这工作,我知道我需要问权限访问我使用此代码完成的电子邮件:

$app_id = "211665122244023"; 

    $canvas_page = "http://apps.facebook.com/midcitymafia/"; 

    $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions"; 

    $signed_request = $_REQUEST["signed_request"]; 

    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

但是,如何获取acces然后用它从图表中检索电子邮件?

## UPDATE,这是我当前的代码,仍然不能似乎得到它的工作...
require 'src/facebook.php'; 
$app_id = "211665122244023"; 

    $canvas_page = "http://apps.facebook.com/midcitymafia/"; 

    $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions"; 

    $signed_request = $_REQUEST["signed_request"]; 

    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 


    if (empty($data["user_id"])) { 
      echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    } else { 
     $graph = json_decode(file_get_contents("https://graph.facebook.com/".$user_id . "/?accesstoken=" .$data['access_token'])); 
    } 

$userid = $graph->id; 
$username = $graph->name; 
$usergender = $graph->gender; 
$useremail = $graph->email; 

?> 

<br> 

<?php echo 'ID: ' . $userid; ?> 
<br> 
<?php echo 'Name: ' . $username; ?> 
<br> 
<?php echo 'Gender: ' . $usergender; ?> 
<br> 
<?php echo 'Email: ' . $useremail; ?> 

回答

1

signed_request包含自身内部用户access_token

在你的情况access_token$data['access_token']

存储用户access_token是不是一个好主意,因为他们提供了很短的时间段和后到期。要获得永久access_token您需要请求offline_access来自用户的许可(我个人不会推荐它,因为您可以实现大多数事情而不需要offline_access,在很多情况下,应用程序access_token可能适合您的需要)。

+0

谢谢,现在我不能将它存储在我的数据库中吗?我的意思是,他们到期了吗?我将如何去更新它?我已阅读'撤销页面',但不真正了解... – 2012-01-11 13:34:21

+0

我现在得到了这个代码^^检查主帖,仍然没有工作..谢谢。 – 2012-01-11 13:46:25