Google People API"请求掩码不能为空"

Dan*_*lis 6 google-oauth google-people

我正在尝试请求通过Google OAuth登录的用户的个人资料信息.我的请求形成正确,我成功登录,但当我尝试在PHP中发出以下请求时,我得到错误请求掩码不能为空.有效路径是:...

但是,从Google People API people.get文档中可以清楚地看出,请求掩码值是可选的,如果没有传递,将返回除people.connections.list之外的所有值.这是我的代码:

// The entire OAuth process works up until this point...
// create the service
$service = new Google_Service_People($this->client);

try {
  $results = $service->people->get('people/me');
} catch(\Exception $exception) {
  echo $exception->getMessage();
  exit;
}
Run Code Online (Sandbox Code Playgroud)

以下是我从此错误中获得的异常消息:

{ "error": { "code": 400, "message": "Request mask can not be empty. Valid paths are: [person.addresses, person.age_ranges, person.biographies, person.birthdays, person.bragging_rights, person.cover_photos, person.email_addresses, person.events, person.genders, person.im_clients, person.interests, person.locales, person.memberships, person.metadata, person.names, person.nicknames, person.occupations, person.organizations, person.phone_numbers, person.photos, person.relations, person.relationship_interests, person.relationship_statuses, person.residences, person.skills, person.taglines, person.urls].", "errors": [ { "message": "Request mask can not be empty. Valid paths are: [person.addresses, person.age_ranges, person.biographies, person.birthdays, person.bragging_rights, person.cover_photos, person.email_addresses, person.events, person.genders, person.im_clients, person.interests, person.locales, person.memberships, person.metadata, person.names, person.nicknames, person.occupations, person.organizations, person.phone_numbers, person.photos, person.relations, person.relationship_interests, person.relationship_statuses, person.residences, person.skills, person.taglines, person.urls].", "domain": "global", "reason": "badRequest" } ], "status": "INVALID_ARGUMENT" } }

谁能帮我吗?


更新1:

当我尝试为请求掩码传递一些值时,$service->people->get('people/me', array("person.names"));我收到异常消息:Illegal string offset 'type'

Pan*_*ari 6

它太晚了,但也许这对任何人都有用.

使用下面的数组作为第二个参数来添加带有api调用的requestMask

$optParams = array('requestMask.includeField'=>'person.names' );
Run Code Online (Sandbox Code Playgroud)


Dan*_*lis 3

我找到了解决方法。我能够从 Plus 服务而不是 People 请求部分用户个人资料信息。我的直觉是,为什么这种情况似乎发生了变化,谷歌修改了他们的 API 的内部逻辑,并且没有更新他们的文档。(在撰写本文时,Google 的 PHP OAuth 库正处于测试阶段)。

就我而言,我真正想要的是获取用户的用户名和电子邮件地址。我没有使用该People服务来发出个人资料请求,Plus而是使用该服务,并要求一些额外的范围来获取电子邮件地址。这是我的 PHP 实现的全部内容。请注意我在构造函数中请求的三个范围:

Google_Service_Plus::USERINFO_PROFILE, Google_Service_People::USERINFO_PROFILE, Google_Service_People::USERINFO_EMAIL

成功进行身份验证后,people/me我不再向 People 服务请求,而是me向 Plus 服务请求,并通过几个附加请求来获取剩余信息:

$plus = new Google_Service_Plus($this->client);

try {
  $plus_results = $plus->people->get('me');
} catch(\Exception $exception) {
  echo $exception->getMessage();
  exit;
}
Run Code Online (Sandbox Code Playgroud)

$plus = new Google_Service_Plus($this->client);

try {
  $plus_results = $plus->people->get('me');
} catch(\Exception $exception) {
  echo $exception->getMessage();
  exit;
}
Run Code Online (Sandbox Code Playgroud)