如何在 Zend Framework1 中使用 Google+ API 获取用户的电子邮件地址?



我在示例中集成了Google API,通过Google+登录我的网站,从他/她的个人资料中获取用户电子邮件、名字和姓氏的详细信息。当我使用以下功能时

    public function getProfile()
   {
    $endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo';
    return (array) json_decode($this->_getData('profile', $endpoint));
   }

我得到的输出是

    Array ( [firstname] => xxxx [appid] => 11XXXXXXXXXXXXXXXXX92 [email] => [lastname] => YYYY [location] => [username] => XXXX YYYY )

其中,由于email为空。

如何获取电子邮件id?必须在这里的$endpoint中写入什么uri才能获得电子邮件id和其他数据?

您没有显示您请求的范围,但似乎您没有请求https://www.googleapis.com/auth/userinfo.email范围。

但是,用户信息作用域和终结点已被弃用,并将于2014年9月删除

接下来,您应该将电子邮件作用域与其中一个配置文件作用域(如配置文件https://www.googleapis.com/auth/plus.mehttps://www.googleapis.com/auth/plus.login)访问用户的电子邮件,然后使用Google+neneneba API端点之一,如用户ID为"me"的people.get。

@囚犯在现场,如果您请求email作用域,您将能够在plus.people.get API调用中获取用户的电子邮件地址。我将向您展示如何在JavaScript中做到这一点:

在关闭body标记之前添加带有以下代码的GoogleAPI,这很难看,但却是异步加载外部库的标准:

<script type="text/javascript">
  (function() {
    var po = document.createElement('script');
    po.type = 'text/javascript'; po.async = true;
    po.src = 'https://plus.google.com/js/client:plusone.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(po, s);
  })();
</script>

添加签名按钮:

<button class="g-signin"
    data-scope="email"
    data-clientId="YOUR_CLIENT_ID"
    data-callback="onSignInCallback"
    data-theme="dark"
    data-cookiepolicy="single_host_origin">
</button>

处理签名响应:

function onSignInCallback(){

加载Google+API客户端并处理身份验证响应:

  gapi.client.load('plus','v1', function(){
    if (authResult['access_token']) {
      gapi.client.plus.people.get({'userId':'me'}).execute(
        function(resp){
          alert(resp.emails[0].value)
        });          
    } else if (authResult['error']) {
      // There was an error, which means the user is not signed in.
      // As an example, you can handle by writing to the console:
      console.log('There was an error: ' + authResult['error']);
    }
    console.log('authResult', authResult);
  });
}

此处提供演示。

相关内容

  • 没有找到相关文章

最新更新