按照 Google 人员 API 文档中的示例进行操作时出现错误"(get) unknown parameter: 'personFields'"



我正在尝试使用 Google People API 来添加和更新我的 Google 联系人。我已经用谷歌文档(https://developers.google.com/people/v1/getting-started(中给出的示例代码几乎逐字设置了API。我收到以下代码行的错误,该错误再次逐字来自文档:

$profile = $people_service->people->get('people/me', array('personFields' => 'names,emailAddresses'));

错误如下:

Fatal error: Uncaught exception 'Google_Exception' with message '(get) unknown parameter: 'personFields'' in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Service/Resource.php:147 Stack trace: #0 /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/vendor/google/apiclient-services/src/Google/Service/People/Resource/People.php(52): Google_Service_Resource->call('get', Array, 'Google_Service_...') #1 /home/danbak15/bakerlegalservicesmo.com/office/BLScontacts.php(36): Google_Service_People_Resource_People->get('people/me', Array) #2 {main} thrown in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Service/Resource.php on line 147

我已经看到了类似问题的答案(访问谷歌人 API 时无法访问我的个人资料数据(建议使用 Google_Service_PeopleService 类而不是文档中要求的 Google_Service_People 类。但是,当我尝试执行此操作时,我收到另一个错误:

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "domain": "global", "reason": "unauthorized" } ], "status": "UNAUTHENTICATED" } } ' in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php:118 Stack trace: #0 /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttpPsr7Response), Object(GuzzleHttpPsr7Request), 'G in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php on line 118

在这一点上,我完全不知所措。我想使用Google联系人来跟踪我的联系人,并希望能够通过PHP使用Google联系人,以便我可以将它们添加到我的数据库中。谁能对此有所了解?提前感谢您的任何帮助!

更新: 我尝试将页面移动到计算机上的本地服务器(忘记了Google将页面重定向到我的网站(,以查看是否可以从其他服务器获得不同的结果。不知何故,神奇的是,当我尝试从我的网站访问脚本时,它起作用了——大约 15-30 分钟左右。然后,我得到了与以前相同的错误。如果我从本地主机服务器运行该页面,我将陷入无休止的授权重定向循环(鉴于Google将我重定向到在线页面,这是意料之中的(,但是在线页面将工作一段时间。

在这一点上,我无法开始猜测问题出在哪里。这对其他人有意义吗?

这对我来说很好用:

$scopes[] = 'https://www.googleapis.com/auth/contacts.readonly';
$client->setScopes($scopes);
$service = new Google_Service_People($client);
$optParams =   ['requestMask.includeField' => 'person.names'];
$connections = $service->people_connections->listPeopleConnections('people/me', $optParams)->getConnections();
foreach ($connections as $connection) {
if (!empty($connection->getNames()[0])) {
print $connection->getNames()[0]->getDisplayName() . "n" . '<br>';
}
}

我想我知道会发生什么。 我的英语不是很好,所以我希望你能理解我的意思。

就我而言,我正在使用Google_Service_People类(src\Google\Service\People.php(并得到与您相同的错误。所以我看了一下人.php并看到这个:

$this->people = new Google_Service_People_Resource_People(
$this,
$this->serviceName,
'people',
array(
'methods' => array(
'get' => array(
'path' => 'v1/{+resourceName}',
'httpMethod' => 'GET',
'parameters' => array(
'resourceName' => array(
'location' => 'path',
'type' => 'string',
'required' => true,
),
'requestMask.includeField' => array(  // <= This is the problem.
'location' => 'query',
'type' => 'string',
),
),
),

我检查了官方文档,上面写着"requestMask.includeField已被弃用",但它仍然以某种方式在api的代码中。

所以我把它改成这个:

$this->people = new Google_Service_People_Resource_People(
$this,
$this->serviceName,
'people',
array(
'methods' => array(
'get' => array(
'path' => 'v1/{+resourceName}',
'httpMethod' => 'GET',
'parameters' => array(
'resourceName' => array(
'location' => 'path',
'type' => 'string',
'required' => true,
),
'personFields' => array(  // <- Change to 'personFields'
'location' => 'query',
'type' => 'string',
),
),

在那之后,一切都很顺利。

如果您使用的是PHP 的 Google API 客户端库。此客户端库处于测试阶段。因此,他们的 api 中的某些内容看起来不像他们的 api 文档中的确切内容。

这就是我的情况。英语不是我的语言,所以我希望你能理解我想要描述的内容。

约翰·罗德里格斯解决了这个问题。谢谢!我的库有点不同,但问题是一样的。就我而言,我使用的是 Google_Service_PeopleService 类而不是 Google_Service_People 类。我更改的文件的路径是:google-api-php-client-2.2.0/vendor/google/apiclient-services/src/Google/Service/PeopleService.php。在这种情况下,$this->people 是一个包含一系列方法的Google_Service_PeopleService_Resource_People类。我注释掉了折旧的代码。以下是相关代码:

$this->people = new Google_Service_PeopleService_Resource_People(
$this,
$this->serviceName,
'people',
array(
'methods' => array(
'createContact' => array(
...
),
),
),'deleteContact' => array(
...
),
),
),'get' => array(
'path' => 'v1/{+resourceName}',
'httpMethod' => 'GET',
'parameters' => array(
'resourceName' => array(
'location' => 'path',
'type' => 'string',
'required' => true,
),
'personFields' => array(
'location' => 'query',
'type' => 'string',
),
/*         'requestMask.includeField' => array(
'location' => 'query',
'type' => 'string',
), */
),
),'getBatchGet' => array(
'path' => 'v1/people:batchGet',
'httpMethod' => 'GET',
'parameters' => array(
'personFields' => array(
'location' => 'query',
'type' => 'string',
),
/*          'requestMask.includeField' => array(
'location' => 'query',
'type' => 'string',
), */
'resourceNames' => array(
'location' => 'query',
'type' => 'string',
'repeated' => true,
),
),
),'updateContact' => array(
...
),
),
),

到目前为止,这已经正常工作,但我还没有彻底测试它。感谢您的帮助!

相关内容

最新更新