2017-08-25 1 views
2

Ich versuche, die Google People-API zum Hinzufügen und Aktualisieren meiner Google-Kontakte zu verwenden. Ich habe die API fast wörtlich mit dem Beispielcode in der Google-Dokumentation (https://developers.google.com/people/v1/getting-started) eingerichtet. Ich erhalte eine Fehlermeldung für die folgende Codezeile, die wiederum aus der Dokumentation wörtlich kommt:Fehler "(get) unbekannter Parameter: 'personFields'" bei folgenden Beispielen in der Google People API-Dokumentation

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

Der Fehler wird wie folgt dar:

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 

Ich habe eine Antwort auf eine ähnliche Frage gesehen (Can't access my profile data when accessing google-people API) schlagen Sie vor, die Google_Service_PeopleService-Klasse anstelle der Google_Service_People-Klasse zu verwenden, wie in der Dokumentation gefordert. Allerdings, wenn ich versuche, dies zu tun, ich eine andere Fehlermeldung erhalten:

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 

An diesem Punkt bin ich bei einem Totalverlust. Ich möchte Google Kontakte verwenden, um meine Kontakte zu verfolgen und mit Google Kontakte über PHP arbeiten zu können, damit ich sie zu meiner Datenbank hinzufügen kann. Kann irgendjemand etwas dazu sagen? Vielen Dank im Voraus für jede Hilfe!

UPDATE: Ich habe versucht, die Seite auf einen lokalen Server auf meinem Computer zu verschieben (vergessend, dass Google die Seite auf meine Website umleitet), um zu sehen, ob ich ein anderes Ergebnis von einem anderen Server erhalten könnte. Irgendwie funktionierte es auf magische Weise, als ich von meiner Website aus auf das Skript zugreifen wollte - etwa 15-30 Minuten oder so. Dann habe ich den gleichen Fehler wie zuvor. Wenn ich die Seite von meinem Localhost-Server aus starte, stehe ich in einer endlosen Autorisierungs-Weiterleitungsschleife (zu erwarten, da Google mich zur Online-Seite weiterleitet), aber dann funktioniert die Online-Seite eine Zeit lang.

An diesem Punkt kann ich nicht anfangen zu raten, wo das Problem ist. Macht das für irgendjemanden Sinn?

+0

Sind Sie sicher, dass Sie die neueste Version der Client Library haben? – paolo

+0

Ich habe das gleiche Problem, aber mit dem Google_Service_PeopleService wurde es für mich behoben; Ich schlage vor, dass Sie sich auf die Lösung des zweiten Fehlers konzentrieren. – Isaiah

+0

Ich verwende die Version 2.2.0 der Google API PHP Client-Bibliothek, von der ich glaube, dass sie die korrekte Version ist (obwohl ich immer falsch liegen könnte). Ich bin etwas verwirrt über den Authentifizierungsanmeldungsfehler bei der Verwendung von Google_Service_PeopleService. Ich habe OAuth 2-Anmeldeinformationen, die bei Verwendung der Google_Service_People-Klasse einwandfrei funktionieren. Nur wenn ich die Google_Service_PeopleService-Klasse verwende, wird ein Fehler ausgegeben. Gibt es etwas in meinen Referenzen, das ich mir ansehen oder ändern sollte? –

Antwort

0

Ich denke, ich weiß, was passiert. Mein Englisch nicht sehr gut, also ich hoffe, Sie können verstehen, was ich meine ..

In meinem Fall benutze ich Google_Service_People Klasse (src \ Google \ Service \ People.php) und erhalten den gleichen Fehler wie Sie. Also habe ich einen Blick über People.php und sehen: „requestMask.includeField ist bereits veraltet“

$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', 
      ), 
     ), 
     ), 

ich die offizielle Dokument prüfen und sagen aber irgendwie immer noch in api code.

Also habe ich es so weit ändern:

$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', 
      ), 
     ), 

dass Nachdem alles gut gehen.

Wenn Sie Google API-Clientbibliotheken von PHP verwenden. Diese Client-Bibliothek befindet sich in Beta. Da sieht etwas in ihrer API nicht so aus, wie es genau in ihrem api Dokument ist.

Das ist also mein Fall. Englisch ist nicht meine Sprache, also hoffe ich, dass du verstehen kannst, was ich versuche zu beschreiben.

0

Dies funktionierte gut für mich:

$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>'; 
    } 
} 
0

John Rodriguez das Problem gelöst. Vielen Dank! Meine Bibliothek ist ein bisschen anders, aber das Problem war das gleiche.In meinem Fall verwende ich die Google_Service_PeopleService-Klasse anstelle der Google_Service_People-Klasse. Der Pfad zu der Datei, die ich geändert habe, lautet: google-api-php-client-2.2.0/vendor/google/apiclient-services/src/Google/Service/PeopleService.php. In diesem Fall ist $ this-> people eine Google_Service_PeopleService_Resource_People-Klasse, die ein Array von Methoden enthält. Ich habe den abgeschriebenen Code auskommentiert. Hier ist der entsprechende Code:

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

Bisher hat das funktioniert wie es soll, aber ich habe es noch nicht gründlich getestet. Danke für Ihre Hilfe!

Verwandte Themen