2016-10-06 11 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) – Shubham

+0

あなたのアプリケーションに正しいリダイレクトURLが設定されていますか? –

+0

あなたは常にスコープ内で電子メールの許可を求めなければなりませんでした。宣言的なフィールドが変更されました。あなたは答えを更新する必要があります、それは少し誤解を招く。 – luschn

0

Facebookのポリシーによると、ユーザーがメールをプライベートとして保管している場合、そのメールを次の行を使って受け取る方法はありません。

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

+0

これによって生成されたURLは機能しません。 ベースURLが生成されるのは、** https://www.facebook.com/Array/dialog/oauth**です。これはFacebookのサーバーにはありません。 これを追加する前に、ベースURLは** https://www.facebook.com/v2.2/dialog/oauth**です。これは問題なく動作しています。 – Shubham

+0

あなたの電子メールがFacebookアカウントに公開されていることを確認してください。 参考までに、こちらをご覧ください。 http://prntscr.com/cqglbr –

関連する問題