You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel/PHP中调用Google Apps Script获取指定Google Form响应?

解决方案:通过Google Apps Script + Laravel 获取Google Form响应(含上传文件)

我之前在Laravel项目里也碰到过一模一样的问题,那个老包确实早就不兼容了,后来摸索出用Google Apps Script(GAS)做中间层的方案,完美解决了获取表单响应和上传文件的需求,给你一步步拆解:

第一步:编写Google Apps Script作为数据接口

首先得在GAS里写一个脚本,用来读取指定Google Form的响应,包括用户上传的文件信息。

  1. 打开你的Google Form,点击右上角的「扩展程序」→「Apps Script」,进入脚本编辑器。
  2. 替换默认代码为以下内容:
function getFormResponses() {
  // 替换成你的Google Form ID(从表单URL里获取,比如https://docs.google.com/forms/d/[FORM_ID]/edit)
  const formId = "你的表单ID";
  const form = FormApp.openById(formId);
  const responses = form.getResponses();
  const result = [];

  responses.forEach(response => {
    const responseItem = {
      timestamp: response.getTimestamp(),
      responses: []
    };

    response.getItemResponses().forEach(itemResponse => {
      const item = itemResponse.getItem();
      const responseData = {
        question: item.getTitle(),
        answer: itemResponse.getResponse()
      };

      // 处理文件上传类型的问题
      if (item.getType() === FormApp.ItemType.FILE_UPLOAD) {
        const fileIds = itemResponse.getResponse();
        const files = fileIds.map(fileId => {
          const file = DriveApp.getFileById(fileId);
          return {
            fileName: file.getName(),
            fileUrl: file.getDownloadUrl(), // 获取文件直接下载链接
            fileId: fileId
          };
        });
        responseData.answer = files;
      }

      responseItem.responses.push(responseData);
    });

    result.push(responseItem);
  });

  // 返回JSON格式的数据,方便Laravel解析
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}
  1. 保存脚本,命名比如「FormResponseAPI」。

第二步:部署GAS为Web App

这一步是让Laravel能通过HTTP请求访问这个脚本:

  1. 在脚本编辑器里点击「部署」→「新部署」。
  2. 点击齿轮图标,选择「Web应用」。
  3. 配置选项:
    • 执行:选择「我」(因为脚本需要访问你的表单和Drive文件)
    • 谁可以访问:根据你的需求选,比如「任何人,甚至匿名」(如果是公开表单的话),或者「仅限组织内用户」
    • 点击「部署」,然后复制生成的Web App URL,这个就是Laravel要调用的接口地址。

第三步:在Laravel里调用GAS接口

在Laravel项目里,你可以用Http facade来发送GET请求获取数据:

  1. 在控制器或者服务类里写调用代码:
use Illuminate\Support\Facades\Http;

public function getGoogleFormResponses()
{
    // 替换成你刚才生成的GAS Web App URL
    $gasUrl = "你的GAS Web App URL";
    
    try {
        $response = Http::get($gasUrl);
        $responses = $response->json();
        
        // 这里可以对获取到的响应数据进行处理,比如存入数据库或者返回给前端
        return response()->json($responses);
    } catch (\Exception $e) {
        return response()->json(['error' => '获取表单响应失败:' . $e->getMessage()], 500);
    }
}
  1. 可以给这个方法加个路由,方便测试或者调用。

注意事项

  • 权限问题:如果GAS提示没有访问Drive的权限,需要在脚本编辑器里先运行一次getFormResponses函数,会弹出授权提示,点击允许即可。
  • 文件访问限制:如果用户上传的文件是限制仅表单所有者能访问,那GAS获取的下载链接只有你能打开;如果需要让Laravel的用户也能访问,得调整文件的共享权限(比如设置为「知道链接的任何人可查看」)。
  • 响应时间:如果表单响应非常多,GAS的执行时间可能会超时(默认6分钟),可以考虑分页获取响应,比如用getResponses(startIndex, endIndex)来分批处理。

内容的提问来源于stack exchange,提问作者T-prod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:06:18