使用执行API PHP客户端创建文档时出现Google应用程序脚本错误



我尝试获取文件夹列表,它被php客户端成功获取。但当我尝试使用应用程序脚本创建文档时,如果我在应用程序脚本编辑器中使用"运行"图标运行应用程序脚本代码,文档就会被创建。但当我使用PHP客户端执行该方法时,它显示了一个错误。

捕获异常:调用POST https://script.googleapis.com/v1/scripts/..................:run: (401) ScriptError 时出错

此外,我已经发送两个范围:

https://www.googleapis.com/auth/documentshttps://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');

我该怎么修?

这是我的代码.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;
}

正如James Nicholas所说,这个错误是由于缺少权限范围。我在扩展PHP quickstart.PHP教程时也遇到了同样的错误。当谷歌应用程序脚本函数被修改和发布时,它应该向你指出范围已经改变。您还需要调整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,正如上面评论中所说的那样,这样你的作用域才能正确地重新生成。

问题出现在我的代码中。我使用的是重定向URI,两个文件都需要权限范围。但我只在一个文件中添加了权限范围。因此,无论您在哪里请求客户端,都要在所有文件中添加权限。

相关内容

  • 没有找到相关文章

最新更新