2012-04-19 101 views
1

获取用户的电子邮件ID从Facebook PHP SDK从Facebook PHP SDK获取用户的电子邮件ID

我试着用下面的代码

首先

$user_profile = $facebook->api('/me'); // or $facebook->api('/me?fields=email') 
print_r($user_profile); 

$user = $facebook->getUser(); 
$url = "https://api.facebook.com/method/fql.query"; 
    $url .= "?access_token=" . $access_token; 
    $url .= "&query=SELECT email FROM user WHERE uid={$user}"; 
    $userData = simplexml_load_file($url); 
    $userEmail = $userData->user->email; 
    print_r($userEmail); 

第三个

$user = $facebook->getUser(); 
$fql = "select name, hometown_location, sex, pic_square, email from user where uid='$user'"; 
     $param = array(
      'method'  => 'fql.query', 
      'query'  => $fql, 
      'access_token' =>$access_token , 
      'callback' => '' 
     ); 

     $fqlResult2 = $facebook->api($param); 

    print_r($fqlResult2); 

这些都不会得到登录用户的电子邮件ID。如何检索它?

回答

2

FBML(这将成为history推出)

<fb:login-button autologoutlink="true" perms="email"></fb:login-button> 

PHP

$loginUrl = $facebook->getLoginUrl(
    array(
    'scope' => 'email' 
) 
); 

JS

FB.login(function(response) { 
    if (response.authResponse) { 
     // conosle.log('User logged in'); 
    } else { 
     // console.log('User cancelled login or did not fully authorize.'); 
    } 
}, { 
    scope: 'email' 
});​ 

获取email使用图形API

FB.api('/me', function(user) { 
    if (user) { 
     User.email = user.email; 
    } 
});​ 
+0

Afaik,req_perms现在被称为“范围”。或者我在这里混合了一些东西。 – TheSHEEEP 2012-04-19 10:56:52

+0

据我记得,它是PHP中的req_perms和范围在JS中,请纠正我,如果我错了 – Dhiraj 2012-04-19 10:58:15

+0

它绝对是PHP中的“范围”。我们正在使用它,并且它可以工作,所以;) – TheSHEEEP 2012-04-19 11:04:08

1

您需要访问用户的电子邮件地址。所以你的应用程序必须要求“电子邮件”permission

This site有一些指导如何从用户那里获得这些权限(或者更确切地说是要求他们)。

按照JS SDK documentation,你需要做到以下几点:

FB.login(function(response) { 
    // handle the response 
}, {scope: 'email,user_likes,...'}); 
+0

是的,我怎么会在这里给出的权限? – 2012-04-19 10:51:52

+0

添加了一些指南的链接。 – TheSHEEEP 2012-04-19 10:53:55

+0

我并行添加了Javascript SDK和PHP SDK。所以在我的代码'FB.Event.subscribe('auth.login',function(response){window.location.reload(); },{scope:'email'});'不起作用.. – 2012-04-19 10:55:13

1

更改如下代码:

$facebook->api('/me?locale=en_US&fields=name,email'); 

getLoginUrl(array(
    'scope' => 'email' 
)); 
相关问题