Google API客户端和访问生日和年龄

时间:2018-04-08 18:05:28

标签: php google-api google-signin google-login

我正在尝试通过Google API登录并访问某些用户数据,包括生日。

这是我正在使用的代码和范围:

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ .'/vendor/google/apiclient/src');

require_once __DIR__.'/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

const CLIENT_ID = '[MY CLIENT ID]';

const CLIENT_SECRET = '[MY APP SECRET]';

const APPLICATION_NAME = "Google+ PHP Quickstart";

$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setAccessType("offline");        // offline access
$client->setIncludeGrantedScopes(true);   // incremental auth
$client->addScope('https://www.googleapis.com/auth/plus.login');
$client->addScope('https://www.googleapis.com/auth/user.birthday.read');
$client->addScope('https://www.googleapis.com/auth/userinfo.email');
$client->addScope('https://www.googleapis.com/auth/userinfo.profile');
$client->addScope('https://www.googleapis.com/auth/plus.me');
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');

$auth_url = $client->createAuthUrl();

header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));

当我看到登录界面时,我被要求允许该应用程序访问我的生日,如下所示(它是葡萄牙文,但它提到了出生日期!)。

enter image description here

尽管如此,我无法访问生日或日期。

这是我用来在回调页面上获取用户信息的内容:

$objOAuthService = new Google_Service_Oauth2($client);

if ($client->getAccessToken()) {
    $userData = $objOAuthService->userinfo->get();
    print_r($userData);
}

我错过了什么?

我看到了关于生日的公共或私人可见性的答案,但这似乎是一个奇怪的要求。为什么它询问用户是否允许显示生日,用户说是,并且它不会返回到网站,因为它不公开?我想要一些正式的谷歌源文件说明这一点,而不是没有任何官方参考的答案,所以我希望有人能够提供一些有用的信息来支持这一点。

1 个答案:

答案 0 :(得分:1)

我目前知道返回当前用户生日的唯一方法是People.get确实返回生日。但是我怀疑它与谷歌+相关联,所以如果用户没有填写它,你可能不会得到信息。

  

获取https://people.googleapis.com/v1/ {resourceName = people / *}

发送资源名称 <div class="row"> <div class="block" width="320" height="200"> <img src="a.jpg"></img> <span>a.jpg</span> </div> <div class="block" width="320" height="200"> <img src="b.jpg"></img> <span>b.jpg</span> </div> <div class="block" width="320" height="200"> <img src="c.jpg"></img> <span>c.jpg</span> </div> <div class="block" width="320" height="200"> <img src="d.jpg"></img> <span>d.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> <div class="block" width="320" height="200"> <img src="e.jpg"></img> <span>e.jpg</span> </div> </div>和生日people/me

personFields

更新

{
  "resourceName": "people/117200475532672775346",
  "etag": "%EgQBBzcuGgwBAgMEBQYHCAkKCwwiDDQwaGhWYzc3cXJBPQ==",
  "birthdays": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "PROFILE",
          "id": "117200475532672775346"
        }
      },
      "date": {
        "month": 1,
        "day": 6
      }
    },
    {
      "metadata": {
        "source": {
          "type": "ACCOUNT",
          "id": "117200475532672775346"
        }
      },
      "date": {
        "year": 1971,
        "month": 1,
        "day": 6
      }
    }
  ]

我现在无法访问测试php这是一个有根据的猜测。