2016-10-06 3 views
1

사용자의 전자 메일 ID에 액세스하려고합니다. 코드 아래에서 시도 했으므로 많은 사이트를 확인했습니다. 사용자의 이메일 ID에 액세스하는 방법을 찾았습니다. 그러나 그들 중 누구도 일하는 것 같지 않습니다. 이 문제를 해결하도록 도와주세요.FB 라이브러리에서 전자 메일 ID를 얻는 방법

미리 감사드립니다.

<?php 

session_start(); 
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\Entities\AccessToken; 
use Facebook\HttpClients\FacebookCurlHttpClient; 
use Facebook\HttpClients\FacebookHttpable; 

// init app with app id and secret 
FacebookSession::setDefaultApplication('MY_app_id', 'my_app_secret'); 
$helper = new FacebookRedirectLoginHelper('http://prov.resolv.com/provision_sid/Facebook_2/fbconfig.php'); 
try { 
    $session = $helper->getSessionFromRedirect(); 
} catch (FacebookRequestException $ex) { 
} catch (Exception $ex) { 
} 

if (isset($session)) { 
    // graph api request for user data 
    $request = new FacebookRequest($session, 'GET', '/me'); 
    $response = $request->execute(); 
    // get response 
    $graphObject = $response->getGraphObject(); 
    $fbid = $graphObject->getProperty('id');    // To Get Facebook ID 
    $fbfullname = $graphObject->getProperty('name');  // To Get Facebook full name 
    echo $femail = $graphObject->getProperty('email'); 

    die(); 

    $_SESSION['FBID'] = $fbid; 
    $_SESSION['FULLNAME'] = $fbfullname; 
    $_SESSION['EMAIL'] = $femail; 
    /* ---- header location after session ---- */ 


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

내가 너무 위의 요청에 의해 이메일 ID를

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

2>$request = new FacebookRequest($session, 'GET', '/me',['fields' => 'id,name,email,address,first_name,last_name']);

를 요청하는 여러 옵션을 시도, 나는 사용자의 이메일 ID를 얻을 수 아니에요 .

사용자의 전자 메일 ID를 요청하는 다른 방법이 있습니까?

답변

2

로그인 URL에 scope을 사용하여 email 권한을 요청해야합니다.

SDK 버전 5 :

$loginUrl = $helper->getLoginUrl($redirectUrl, array('scope' => 'email')); 

SDK 버전 4 :

잊지 마세요 또한 이메일 필드 요청

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

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

참고 : 사용자가 않는 경우 앱과 이메일을 공유하는 것에 동의하지 않으면받을 수 없습니다.

+0

방금이 옵션을 시도했습니다. ** 죄송합니다.이 페이지를 사용할 수 없습니다 **. [URL] (https://www.facebook.com/Array/dialog/oauth?client_id=992386390895878&redirect_uri=http%3A%2F%2Fprov.resolv.com%2Fprovision_sid%2FFacebook_2%2Ffbconfig.php&state=4410974b8fc3d405243a76d3bbd62f29&sdk=php- sdk-4.0.15) generated – Shubham

+0

앱에 올바른 리디렉션 URL이 설정되어 있습니까? –

+0

당신은 항상 범위에서 전자 메일 권한을 요청해야합니다. 변경된 내용이 아닙니다. 선언 필드가 변경되었습니다. 당신은 대답을 업데이트해야합니다, 그것은 약간 오도하는 것입니다. – luschn

0

Facebook 정책에 따라 사용자가 개인 정보로 전자 메일을 보관 한 경우 다음 줄을 사용하여 전자 메일을 가질 수있는 방법이 없습니다.

$helper->getLoginUrl($redirectUrl, array('scope' => 'email'));

+0

이 URL은 생성되지 않습니다. 기본 URL은 ** https : //www.facebook.com/Array/dialog/oauth**입니다.이 URL은 Facebook 서버에는 없습니다. 추가하기 전에 기본 URL은 ** https : //www.facebook.com/v2.2/dialog/oauth**입니다. 정상적으로 작동합니다. – Shubham

+0

안전한 측면을 위해 이메일이 Facebook 계정에 공개되어 있는지 확인하십시오. 참고로이 부분을 참조하십시오. http://prntscr.com/cqglbr –

관련 문제