Google 使用执行创建文档时 Apps 脚本错误 API PHP 客户端
Google Apps Script Error while creating document using execution API PHP Client
我尝试获取文件夹列表,php 客户端成功获取了它。
但是当我尝试使用应用程序脚本创建文档时,如果我在应用程序脚本编辑器中使用 运行 图标 运行 应用程序脚本代码,则会创建文档。
但是当我使用 PHP 客户端执行该方法时,它向我显示错误。
捕获到异常:调用 POST 时出错 https://script.googleapis.com/v1/scripts/..................:run: (401) ScriptError
我还发送了两个示波器:
https://www.googleapis.com/auth/documents
https://www.googleapis.com/auth/drive
$client = new Google_Client();
$client->setApplicationName("Apps Script Execution");
$client->setScopes(array('https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/documents','https://www.googleapis.com/auth/drive.file'));
//$client->setScopes(array('https://www.googleapis.com/auth/drive.file'));
$client->setAuthConfigFile('client_secrets_app_script.json');
我该如何解决?
这是我的 code.gs
/**
* The function in this script will be called by the Apps Script Execution API.
*/
/**
* Return the set of folder names contained in the user's root folder as an
* object (with folder IDs as keys).
* @return {Object} A set of folder names keyed by folder ID.
*/
function getFoldersUnderRoot() {
var root = DriveApp.getRootFolder();
var folders = root.getFolders();
var folderSet = {};
while (folders.hasNext()) {
var folder = folders.next();
folderSet[folder.getId()] = folder.getName();
}
var doc = DocumentApp.create('Naya Doc');
var body = doc.getBody();
var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']];
body.insertParagraph(0, doc.getName())
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
table = body.appendTable(rowsData);
table.getRow(0).editAsText().setBold(true);
return folderSet;
}
问题出在我的代码中。我正在使用重定向 URI,并且两个文件都需要权限范围。
但是我只在一个文件中添加了权限范围。
因此,在您请求客户端的所有文件中添加权限。
正如 James Nicholas 所说,此错误是由于缺少权限范围造成的。
我在扩展 PHP quickstart.php 教程时遇到了同样的错误。当 Google Apps 脚本函数被修改和发布时,它应该已经向您指出作用域已更改。您还需要调整 PHP 中定义的范围。
要找到您需要添加的范围,请转至文件 -> 项目属性并单击范围选项卡。
例如我添加了https://www.googleapis.com/auth/spreadsheets:
define('SCOPES', implode(' ', array(
"https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/spreadsheets")
));
执行此操作后,您将需要删除 .credentials/script-php-quickstart.json,如上面评论中所述,以便范围可以正确重新生成。
我尝试获取文件夹列表,php 客户端成功获取了它。 但是当我尝试使用应用程序脚本创建文档时,如果我在应用程序脚本编辑器中使用 运行 图标 运行 应用程序脚本代码,则会创建文档。 但是当我使用 PHP 客户端执行该方法时,它向我显示错误。
捕获到异常:调用 POST 时出错 https://script.googleapis.com/v1/scripts/..................:run: (401) ScriptError
我还发送了两个示波器:
https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/drive
$client = new Google_Client();
$client->setApplicationName("Apps Script Execution");
$client->setScopes(array('https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/documents','https://www.googleapis.com/auth/drive.file'));
//$client->setScopes(array('https://www.googleapis.com/auth/drive.file'));
$client->setAuthConfigFile('client_secrets_app_script.json');
我该如何解决?
这是我的 code.gs
/**
* The function in this script will be called by the Apps Script Execution API.
*/
/**
* Return the set of folder names contained in the user's root folder as an
* object (with folder IDs as keys).
* @return {Object} A set of folder names keyed by folder ID.
*/
function getFoldersUnderRoot() {
var root = DriveApp.getRootFolder();
var folders = root.getFolders();
var folderSet = {};
while (folders.hasNext()) {
var folder = folders.next();
folderSet[folder.getId()] = folder.getName();
}
var doc = DocumentApp.create('Naya Doc');
var body = doc.getBody();
var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']];
body.insertParagraph(0, doc.getName())
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
table = body.appendTable(rowsData);
table.getRow(0).editAsText().setBold(true);
return folderSet;
}
问题出在我的代码中。我正在使用重定向 URI,并且两个文件都需要权限范围。 但是我只在一个文件中添加了权限范围。 因此,在您请求客户端的所有文件中添加权限。
正如 James Nicholas 所说,此错误是由于缺少权限范围造成的。 我在扩展 PHP quickstart.php 教程时遇到了同样的错误。当 Google Apps 脚本函数被修改和发布时,它应该已经向您指出作用域已更改。您还需要调整 PHP 中定义的范围。
要找到您需要添加的范围,请转至文件 -> 项目属性并单击范围选项卡。
例如我添加了https://www.googleapis.com/auth/spreadsheets:
define('SCOPES', implode(' ', array(
"https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/spreadsheets")
));
执行此操作后,您将需要删除 .credentials/script-php-quickstart.json,如上面评论中所述,以便范围可以正确重新生成。