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

Firebase云函数调用Lemonsqueezy API时的参数与内部错误问题

Firebase Cloud Functions调用Lemonsqueezy API遇双重问题排查

我通过curl传递参数调用Firebase Cloud Functions的testActivateLicense函数时,反复触发内部服务器错误。排查过程中:

  • 先修复了logAndSendError函数未传入response参数导致的TypeError;
  • 再将request.query改为request.body,解决了参数无法正确获取的问题。

但当前仍存在两个问题:调用Lemonsqueezy的License验证接口时,明明已正确获取参数,API却提示license_key和instance_name为必填项;同时logAndSendError函数依然存在未传入response的问题。以下是相关代码及日志:


原curl命令及报错

curl -X POST "https://testactivatelicense-a123bcdefg-uc.a.run.app/" -d license_key=3F9D04E3-F661-4F33-BB22-53FE83F111DC -d instance_name=test_1234 
Internal Server Error%

初始函数代码

exports.testActivateLicense = onRequest(async (request, response) => {
  try {
    const licenseKey = request.query.license_key;
    const instanceName = request.query.instance_name;
    logger.log("Received request with licenseKey:", licenseKey, "and instanceName:", instanceName);

    const params = new URLSearchParams({license_key: licenseKey, instance_name: instanceName}).toString();
    logger.log("Constructed query parameters:", params);

    response.status(response.status).send(response.data);
  } catch (error) {
    logAndSendError(error);
  }
});

function logAndSendError(error, res) {
  logger.error("Error occurred:", error.message);

  if (error.response) {
    logger.error("Error response status:", error.response.status);
    logger.error("Error response data:", JSON.stringify(error.response.data, null, 2));
    res.status(error.response.status).send(error.response.data);
  } else {
    res.status(500).send(error.message);
  }
}

function logAndSendError(error, res) {
  logger.error("Error occurred:", error.message);

  if (error.response) {
    logger.error("Error response status:", error.response.status);
    logger.error("Error response data:", JSON.stringify(error.response.data, null, 2));
    res.status(error.response.status).send(error.response.data);
  } else {
    res.status(500).send(error.message);
  }
}

GCP初始错误日志

TypeError: Cannot read properties of undefined (reading 'status')
    at logAndSendError (/workspace/index.js:76:9)
    ...

参数获取问题修复记录

日志显示参数为undefined,将request.query改为request.body后,参数可正常获取。

当前函数代码

exports.testActivateLicense = onRequest(async (request, response) => {
  try {
    const licenseKey = request.body.license_key;
    const instanceName = request.body.instance_name;
    logger.log("Received request with licenseKey:", licenseKey, "and instanceName:", instanceName);

    const params = new URLSearchParams({license_key: licenseKey, instance_name: instanceName}).toString();
    logger.log("Constructed query parameters:", params);

    logger.log("Making request to Lemonsqueezy API with URL:", validateUrl);
    const res = await axios.post(activateUrl, params, {
      headers: {
        "Authorization": `Bearer ${testApiKey}`,
        "Accept": "application/json",
        "Content-Type": "application/vnd.api+json",
      },
    });

    logger.log("Received response from Lemonsqueezy API with status:", res.status);
    logger.log("Response data:", JSON.stringify(res.data, null, 2));
    response.status(res.status).send(res.data);
  } catch (error) {
    logAndSendError(error);
  }
});

当前错误日志

Received request with licenseKey: ABCDEF-GHIJ-KLMN-OPQR-STUVWXYZ and instanceName: test_1234

Constructed query parameters: license_key=ABCDEF-GHIJ-KLMN-OPQR-STUVWXYZ&instance_name=test_1234

Making request to Lemonsqueezy API with URL: https://api.lemonsqueezy.com/v1/licenses/validate

Error: Error response data: {
  "message": "The license key field is required. (and 1 more error)",
  "errors": {
    "license_key": [
      "The license key field is required."
    ],
    "instance_name": [
      "The instance name field is required."
    ]
  }
}
...
TypeError: Cannot read properties of undefined (reading 'status')
...

内容的提问来源于stack exchange,提问作者N.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:27:36