【问题标题】:Facebook PHP SDK how to get user email from Facebook JavaScript SDK 2014Facebook PHP SDK 如何从 Facebook JavaScript SDK 2014 获取用户电子邮件
【发布时间】:2014-08-30 23:53:06
【问题描述】:

我同时使用 Facebook PHP(4.0) 和 JS(2.0) SDK。 我可以使用 PHP 获取用户配置文件数据,但不能获取用户的电子邮件。 用户的电子邮件可通过 Javascript SDK 获得,但我需要它在 PHP 中。

我正在使用:

$user_profile = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className()); 

这可行,但类 GraphUser 在 4.0 中没有获取用户电子邮件的功能。

任何想法如何使用 Facebook PHP SDK 4.0 版获取用户的电子邮件?

【问题讨论】:

    标签: javascript php facebook facebook-graph-api sdk


    【解决方案1】:
    // Facebook SDK v5 for PHP
    // https://developers.facebook.com/docs/php/howto/example_access_token_from_javascript/5.0.0
    
    session_start();
    
    $fb = new Facebook\Facebook([
      'app_id' => '{app-id}',
      'app_secret' => '{app-secret}',
      'default_graph_version' => 'v2.4',
    ]);
    
    $helper = $fb->getJavaScriptHelper();
    $accessToken = $helper->getAccessToken();
    
    $fb->setDefaultAccessToken((string) $accessToken);
    
    $response = $fb->get('/me?locale=en_US&fields=name,email');
    $userNode = $response->getGraphUser();
    
    var_dump(
        $userNode->getField('email'), $userNode['email']
    );
    

    【讨论】:

      【解决方案2】:

      GraphUser 继承自 GraphObject,因此您应该能够使用泛型方法来获取字段:

      $user_profile->getProperty("email");
      

      【讨论】:

      • 这仅在获取 LoginURL 时调用 $helper = new \Facebook\FacebookRedirectLoginHelper('your Url'); $helper->getLoginUrl(array('scope' => 'email')); 时有效。
      【解决方案3】:

      将登录网址更改为

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

      您还可以添加其他权限,例如

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

      在获取登录网址之前请求权限。

      使用 facebook 登录 here 检查权限

      这样你就可以得到用户的电子邮件

       $user_profile['email'];
      

      和用户名

      $user_profile['username'];
      

      【讨论】:

        【解决方案4】:

        如下更改 FacebookRequest() 参数。 更改 getLoginUrl() 参数如下

           $request = new FacebookRequest( $session, 'GET', '/me?locale=en_US&fields=name,email' );
         $loginUrl = $helper->getLoginUrl( array(
            'scope' => 'email'
          ));
        

        【讨论】:

        • 您能否通过提供更多信息来扩展您的答案?为什么 OP 应该使用这个代码?
        • 这是唯一对我有用的答案。但我没有在 getLoginUrl 之前调用 FacebookRequest,而是结合 getGraphUser()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多