Google Events API返回401错误unauthorized_client

问题描述 投票:-1回答:1

我已经在laravel中创建了一个应用程序来将我的数据库中的用户日历与incremental sync同步,当我在浏览器中运行时,每件事情都很完美。

但它在我的cron中返回401 unauthorized_client 100%在两个文件中实现相同的代码。

        $client = $this->getGoogleClient();
        $client->setAccessToken($accessToken);
        if ($client->isAccessTokenExpired()) {
            $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        }
        $gCalService = new Google_Service_Calendar($client);
        $optArr = array();
        $calendarId = 'primary';
        $pageToken = NULL;
        $responceEvents = array();
        $synced = $emailSync->getGoogleSynced();
        if($synced != null)
            $optArr['syncToken'] = $synced->sync_token;

        do {
            if ($pageToken) {
                $optArr['pageToken'] = $pageToken;
            }
            try {
                $results = $gCalService->events->listEvents($calendarId,$optArr);
            }
            catch (Google_Service_Exception $e) {
                $msg = $e->getMessage();
                return $msg;
            }
            if ($results->getItems()) {
                $responceEvents = array_merge($responceEvents, $results->getItems());
                $pageToken = $results->getNextPageToken();
            }
        } while ($pageToken);

$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());

返回错误以下

Array
(
    [error] => unauthorized_client
    [error_description] => Unauthorized
)

逐行调试的代码$client->getRefreshToken()也包含我在这里传递的值$client->setAccessToken($accessToken);完全相同的代码在我的浏览器文件中工作正常而不在我的cron中工作。

php laravel google-calendar-api
1个回答
0
投票

401 unauthorized_client

表示您的代码未经授权。如果您想访问私人用户数据,则需要登录。您的代码需要访问令牌才能访问Google API。

您应该做的是在浏览器中使用Oauth2授权您的代码,在某处保存刷新令牌,让cron作业读取刷新令牌并在运行之前请求新的访问令牌。

假设您拥有您尝试插入的帐户,您可能还需要考虑使用服务帐户。

刷新令牌

如果要将刷新令牌存储在数据库中,则必须先将其分配给客户端,然后再运行代码,我将使用存储在会话变量中的刷新令牌进行操作。

$client->refreshToken($_SESSION['refresh_token']);
© www.soinside.com 2019 - 2024. All rights reserved.