Токен доступа к Google Sheet
Я немного запутался в токене доступа. Я написал PHP-скрипт, который вставляет данные, полученные из запроса POST, я уже авторизовал приложение, и оно добавляет строку в конце листа.
Мой вопрос заключается в том, как обновить токен, когда он будет реализован на сервере, так как он будет добавлять данные POST.
Вот код
<?php
// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';
session_start();
$client = new Google_Client();
$client->setAuthConfigFile(__DIR__ . '/client_secrets.json');
$client->addScope(Google_Service_Sheets::SPREADSHEETS);
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$lead = array (
"first_name" => $_POST['name'],
"email" => $_POST['email']
);
$sid = "sheet id on which the row is added";
addRowToSpreadsheet($lead, $client , $sid);
} else {
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/fb/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
function addRowToSpreadsheet($ary_values = array(), $client , $sid) {
$sheet_service = new Google_Service_Sheets($client);
$fileId = $sid;
$values = array();
foreach( $ary_values AS $d ) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
$value->setStringValue($d);
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
// Build the RowData
$rowData = new Google_Service_Sheets_RowData();
$rowData->setValues($values);
// Prepare the request
$append_request = new Google_Service_Sheets_AppendCellsRequest();
$append_request->setSheetId(0);
$append_request->setRows($rowData);
$append_request->setFields('userEnteredValue');
// Set the request
$request = new Google_Service_Sheets_Request();
$request->setAppendCells($append_request);
// Add the request to the requests array
$requests = array();
$requests[] = $request;
// Prepare the update
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
'requests' => $requests
));
try {
// Execute the request
$response = $sheet_service->spreadsheets->batchUpdate($fileId, $batchUpdateRequest);
if( $response->valid() ) {
// Success, the row has been added
return true;
}
} catch (Exception $e) {
// Something went wrong
error_log($e->getMessage());
}
return false;
}
?>
Я попытался разместить приложение на сервере, и оно не добавляет новую строку в таблицу. Я думаю, что это проблема из-за маркера доступа.
Пожалуйста помоги
1 ответ
На самом деле есть PHP Quickstart for Sheets API, который включает в себя, как обновить токены. Вот фрагмент:
// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}
Существует также руководство по обновлению токенов доступа (автономный доступ) в отношении обновления токенов.
Доступ к токенам периодически истекает. Вы можете обновить токен доступа, не запрашивая у пользователя разрешения (в том числе, когда пользователь отсутствует), если вы запрашивали автономный доступ к областям, связанным с токеном.
Если вы используете клиентскую библиотеку Google API, клиентский объект обновляет маркер доступа по мере необходимости, пока вы настраиваете этот объект для автономного доступа. Если вы не используете клиентскую библиотеку, вам нужно установить параметр HTTP-запроса access_type в автономный режим при перенаправлении пользователя на сервер Google OAuth 2.0. В этом случае сервер авторизации Google возвращает токен обновления при обмене кода авторизации на токен доступа. Затем, если токен доступа истекает (или в любое другое время), вы можете использовать токен обновления для получения нового токена доступа.
Если вашему приложению требуется автономный доступ к Google API, установите тип доступа клиента API в автономный режим:
$client->setAccessType("offline");