繁体   English   中英

错误“(获取)未知参数:'personFields'”遵循Google People API文档中的示例

[英]Error “(get) unknown parameter: 'personFields'” when following examples in Google People API documentation

我正在尝试使用Google People API添加和更新我的Google通讯录。 我使用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

我看到了类似问题的答案( 访问google-people 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(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), '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_Service_People类(src \\ Google \\ Service \\ People.php)并得到与您相同的错误。 所以我看看People.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文档中的确切内容。

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

这对我很好:

$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_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(
           ...
            ),
          ),
        ),

到目前为止,这已经成功,但我还没有彻底测试过它。 谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM