2017-11-22 18 views
0

Google API에 문제가 있습니다. 내 응용 프로그램에서 사용자의 모든 연락처를 가져올 필요가 있지만 데이터베이스에 데이터를 저장하기 때문에 매번 모든 데이터를로드하고 싶지는 않습니다.동기화 토큰 예외 google-api-client-service php people 서비스

우리가 마지막 쿼리 이후 변경된 데이터 만 가져 오는 동기화 토큰 기능을 사용하고자하는 이유입니다.

여기서는 Google APIs PHP client library을 사용합니다.

코드를 작성했는데 내 동기화 토큰이 유효하지 않다는 것을 설명하는 예외 (Google_Service_Exception)가 발생하므로 유효하지 않은 경우 try/catch 시스템을 사용하여 syncToken을 재설정하기로 결정했습니다.

내 문제는 내 토큰이 유효하더라도 catch (google_service_exception)에 요청할 때마다 발생합니다.

내 데이터베이스에 토큰을 저장하므로 여기 API 탐색기에서 테스트했습니다 : https://developers.google.com/people/api/rest/v1/people.connections/list 그리고 제대로 작동하므로 응용 프로그램이 제대로 작동하지 않는 이유를 모르겠습니다.

$personFields = 'metadata,names,addresses,biographies,birthdays,emailAddresses,genders,memberships,organizations,phoneNumbers'; 
    $user = $this->get('security.token_storage')->getToken()->getUser(); 
    $syncToken = $user->getContactSyncToken(); 
    $nextPagetoken = ''; 
    $contactData = array(); 

    $people_service = new \Google_Service_PeopleService($client); 

do { 

     try { 
      $data = $people_service->people_connections->listPeopleConnections(
       'people/me', 
       array(
        'personFields' => $personFields, 
        'requestSyncToken' => true, 
        'syncToken' => $syncToken, 
        'pageToken' => $nextPagetoken, 

       ) 
      ); 
     }catch (\Google_Service_Exception $e){ 
      $data = $people_service->people_connections->listPeopleConnections(
       'people/me', 
       array(
        'personFields' => $personFields, 
        'requestSyncToken' => true, 
        'syncToken' => '', 
        'pageToken' => $nextPagetoken, 

       ) 
      ); 
     }finally{ 
      $syncToken = $data->getNextSyncToken(); 
      $nextPagetoken = $data->getNextPageToken(); 
      if (count($data->getConnections()) != 0) { 
       $contactData[] = $data->getConnections(); 
      } 
     } 




    }while ($nextPagetoken !== null); 

$user->setContactSyncToken($syncToken); 
$this->getDoctrine()->getManager()->flush(); 
return $contactData; 

여러분의 도움에 감사드립니다 내 영어 죄송합니다 내가 네이티브가 아니라 그것에 아주 좋은 아니에요 :

여기 내 코드입니다. 내가 문제를 발견

답변

0

죄송합니다, 내 사용자 클래스에 내가 있었다 :

public function getContactSyncToken() 
{ 

    if($token = $this->contactSyncToken !== null){ 
     return $token; 
    }else{ 
     return ''; 
    } 
    } 

그리고 항상 지금은 작동 ','반환 :

public function getContactSyncToken() 
{ 
    $token = $this->contactSyncToken; 
    if($token !== null){ 
     return $token; 
    }else{ 
     return ''; 
    } 


}