使用Google Apps Script验证Zoom Webhook端点失败
解决Google Apps Script中Zoom Webhook端点验证失败的问题
问题分析
你的代码核心逻辑没问题,但在Google Apps Script(GAS)中直接返回JSON字符串不符合Web响应规范,Zoom无法正确识别响应格式;另外代码中sT变量未明确声明,这也可能导致签名计算错误。
修正后的代码
function doPost(e) { // 解析Zoom发送的验证请求 const requestJSON = JSON.parse(e.postData.contents); const plainToken = requestJSON.payload.plainToken; // 替换为你在Zoom控制台获取的Webhook密钥 const webhookSecret = "YOUR_ZOOM_WEBHOOK_SECRET"; // 计算HMAC SHA256签名并转为十六进制字符串 const signatureBytes = Utilities.computeHmacSha256Signature(plainToken, webhookSecret, Utilities.Charset.US_ASCII); const encryptedToken = signatureBytes .map(byte => { const value = byte < 0 ? 256 + byte : byte; return ("0" + value.toString(16)).slice(-2); }) .join(""); // 构造符合要求的响应内容 const responseBody = { plainToken: plainToken, encryptedToken: encryptedToken }; // 使用GAS标准方式返回JSON响应,确保状态码200和正确MIME类型 return ContentService.createTextOutput(JSON.stringify(responseBody)) .setMimeType(ContentService.MimeType.JSON); }
关键修复点
- 规范响应格式:GAS的
doPost函数必须通过ContentService返回响应,设置正确的MIME类型为JSON,这样Zoom才能正确解析返回内容,同时默认返回状态码200。 - 明确密钥变量:补充
sT(改名为webhookSecret)的声明,替换为你实际的Zoom Webhook密钥,避免未定义错误。 - 代码可读性优化:调整变量命名,让逻辑更清晰。
验证步骤
- 部署GAS脚本为Web应用:选择任何人,甚至匿名访问权限(Zoom Webhook请求为匿名),执行权限选择我(当前用户),部署类型选Web应用。
- 复制部署后的Web应用URL,配置到Zoom Webhook端点中。
- 在Zoom控制台触发验证,检查状态是否变为验证成功。
内容的提问来源于stack exchange,提问作者matskohe
相关产品推荐
相关产品推荐

