Facebook连接API:获取用户电子邮件

时间:2016-05-24 12:22:03

标签: php facebook facebook-graph-api

我在php的网站上工作,我已经集成了一个Facebook Connect API,启用了Facebook登录按钮。

获取用户详细信息的代码如下所示:

<?php
    session_start();

    // added in v4.0.0
    require_once 'autoload.php';
    use Facebook\FacebookSession;
    use Facebook\FacebookRedirectLoginHelper;
    use Facebook\FacebookRequest;
    use Facebook\FacebookResponse;
    use Facebook\FacebookSDKException;
    use Facebook\FacebookRequestException;
    use Facebook\FacebookAuthorizationException;
    use Facebook\GraphObject;
    use Facebook\GraphUser;
    use Facebook\Entities\AccessToken;
    use Facebook\HttpClients\FacebookCurlHttpClient;
    use Facebook\HttpClients\FacebookHttpable;

    // init app with app id and secret
    $appID = 'app id';
    $appSecret = 'app secret code';
    FacebookSession::setDefaultApplication( $appID, $appSecret);

    // login helper with redirect_uri
    $helper = new FacebookRedirectLoginHelper('http://localhost/test/facebook_new/fbconfig.php' );

    try {
        $session = $helper->getSessionFromRedirect();
    } catch( FacebookRequestException $ex ) {
        // When Facebook returns an error
    } catch( Exception $ex ) {
        // When validation fails or other local issues
    }

    // see if we have a session
    if ( isset( $session ) ) {

        // graph api request for user data
        $request = new FacebookRequest( $session, 'GET', '/me' );
        $response = $request->execute();

        // get response
        $profile = $response->getGraphObject('Facebook\GraphUser');

        var_dump($profile);

    } else {
        $loginUrl = $helper->getLoginUrl();
        header("Location: ".$loginUrl);
    }
?>

执行此代码后,var_dump($profile)仅显示User Facebook ID及其Full Name,如下图所示:

Image showing the result

我想要的是电子邮件。电子邮件可以通过'Facebook\GraphUser'访问,但我真的不知道我的代码有什么问题。

请帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

$request = new FacebookRequest($session, 'GET', '/me?fields=name,email');

它被称为&#34;声明字段&#34;,您必须指定自Graph API v2.4以来要返回的字段。

另外,请确保用户已获得email权限。

答案 1 :(得分:1)

Facebook用户在其设置中可以将其电子邮件设置为私人或公共。这可能是它没有出现的原因。