同步令牌异常google-api-client-service php people服务

时间:2017-11-22 11:44:54

标签: php google-api google-api-php-client google-people

我的Google API存在问题。我需要在我的应用程序中获取用户的所有联系人,但是我不想每次都加载所有数据,因为我将数据存储在我的数据库中。

这就是为什么我想使用同步令牌功能,让我们只获取自上次查询以来已被更改的数据。

为此我使用Google APIs PHP client library

我编写了我的代码并抛出异常(Google_Service_Exception),这解释了我的Sync Token无效,所以我决定使用try / catch系统重置syncToken,如果它无效。

我的问题是,每次我发出请求时,即使我的令牌有效,我也会引发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;

感谢您的帮助,对不起我的英语,我不是本地人,也不是很擅长。

1 个答案:

答案 0 :(得分: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 '';
    }


}