2016-05-24 25 views
0

Ich arbeite an einer Website in PHP, wo ich eine Facebook Connect API integriert habe, die den Facebook-Login-Button aktiviert hat.Facebook connect API: Benutzer-E-Mail abrufen

Mein Code Benutzerdaten zu erhalten wie folgt aussieht:

<?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); 
    } 
?> 

Nach diesem Code eecuting, var_dump($profile) zeigt nur die User Facebook ID und seine Full Name wie die unten im Bild angezeigt wird:

Image showing the result

Was ich bekommen möchte, ist die E-Mail. Die E-Mail kann über 'Facebook\GraphUser' zugegriffen werden, aber ich weiß wirklich nicht, was mit meinem Code falsch ist.

Bitte helfen Sie mir dieses Problem

Antwort

2

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

It "deklarative Fields" genannt wird, müssen Sie die Felder, die Sie angeben möchten, da v2.4 der Graph-API zurückgegeben werden.

Stellen Sie außerdem sicher, dass der Benutzer mit der Berechtigung email berechtigt ist.

1

Facebook-Nutzer in ihre Einstellungen lösen können ihre E-Mail als privat oder öffentlich festgelegt. Dies könnte der Grund sein, warum es nicht für dich auftaucht.