Я хочу вызвать скрипт Google APP из PHP, чтобы создать электронную таблицу в учетной записи Google, включенной в консоли разработчика Google. В аккаунте включен API диска.
Это мой PHP-скрипт:
require_once '/google_api/autoload.php';
$client_email = '[email protected]';
$private_key = file_get_contents('key_file.p12');
$scopes = array('https://www.googleapis.com/auth/bigquery' ,
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/drive',
);
$credentials = new Google_Auth_AssertionCredentials($client_email,
$scopes,
$private_key);
try
{
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$token = $client->getAccessToken();
}
catch(Exception $e)
{
$token = false;
print_r($e);
}
try {
$token = json_decode($token);
} catch (Exception $ex) {
die ('No token');
}
$url = "https://script.google.com/a/macros/myscript-url-details/exec";
$ch = curl_init();
if ($ch)
{
$header = array();
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: Bearer '.$token->access_token;
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
$curl_output = curl_exec($ch);
if (curl_errno($ch))
{
$curl_error = curl_errno($ch) .": ". curl_error($ch);
}
curl_close($ch);
}
else
{
$curl_output = "Error on Curl";
}
print $curl_output;
Теперь скрипт APP выглядит следующим образом:
function createSheetAndDisplayLink()
{
var spreadsheet = SpreadsheetApp.create('report_1');
var sheet = spreadsheet.getSheets()[0];//insertSheet();
var data = [
['Col1', 'Col2', 'Col3'],
['Field1', 'XXXXX' ,3],
['Field 2', 'XXXXX' ,7]
];
var range = sheet.getRange(1, 1, 3, 3);
range.setValues(data);
url = spreadsheet.getUrl();
return url;
}
function doGet(e)
{
url = createSheetAndDisplayLink();
var content = "Please click on follow link <a href='" + url +"'>Sheet</a>";
var output = ContentService.createTextOutput(content);
return output;
}
У меня есть ошибки при попытке доступа к сценарию приложения.
С последующей настройкой для развертывания в качестве веб-приложения:
Execute the app as: Me
Who has access to the app: Only Myself
Я получил вывод от CURL о том, что запрошенный файл не существует.
Если я изменю настройки для развертывания приложения как:
Execute the app as: Me
Who has access to the app: "Anyone"
Я получил вывод о том, что требуется авторизация.
Таким образом, похоже, что авторизация не делается.
Любая помощь по этому вопросу будет очень полезна.
Спасибо!
Задача ещё не решена.
Других решений пока нет …