我对访问令牌有点困惑。我已经编写了一个PHP脚本,它插入了我从POST请求中获得的数据,我已经授权了App,它确实在工作表的末尾添加了行。
我的问题是,当令牌在服务器上实现时,如何刷新它,因为它将添加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;
}
?>
我尝试在服务器上托管应用程序,它没有在工作表中添加新行,我认为由于访问令牌,这是一个问题
请帮帮忙
发布于 2017-03-23 08:48:32
实际上有一个工作表API的PHP Quickstart,它包括如何刷新令牌。这里有一个片段:
// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}
还有一个关于刷新令牌的刷新访问令牌(脱机访问)指南
访问令牌定期过期。如果请求脱机访问与令牌关联的作用域,则可以刷新访问令牌,而无需提示用户获得权限(包括用户不在场时)。 如果使用Google客户端库,客户端对象将根据需要刷新访问令牌,只要将该对象配置为脱机访问即可。如果不使用客户端库,则在将用户重定向到谷歌的access_type 2.0服务器时,需要将OAuth HTTP查询参数设置为脱机。在这种情况下,当您将授权代码交换为访问令牌时,Google的授权服务器将返回一个刷新令牌。然后,如果访问令牌过期(或在任何其他时间),则可以使用刷新令牌来获得新的访问令牌。 如果应用程序需要对Google API的脱机访问,请将API客户端的访问类型设置为脱机: $client->setAccessType(“脱机”);
https://stackoverflow.com/questions/42973382
复制相似问题