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

Firebase云函数使用Stripe测试密钥却创建正式环境支付会话的问题求助

Firebase云函数使用Stripe测试密钥却创建正式环境支付会话的问题求助

我现在卡在这里好几天了,实在搞不懂哪里出问题,想请大家帮忙排查下:

我用单页HTML前端+Firebase云函数(处理Stripe支付)做了个简单的订单表单,但后端函数明明配置的是Stripe测试密钥,却总是创建正式环境的Checkout Session,导致前端直接报错:

stripe.redirectToCheckout: the provided sessionId is for a live mode Checkout Session, whereas Stripe.js was initialized with a test mode publishable key

我就纳闷了,部署后的云函数为啥会无视我设置的测试密钥?难道Google Cloud或者Firebase有什么项目级的隐藏设置,能强制函数切换到正式环境吗?


我的前端配置(index.html)

前端是单HTML文件,用Stripe.js初始化的绝对是测试发布密钥:

const STRIPE_PUBLISHABLE_KEY = 'pk_test_...'; // 这里是我真实的测试密钥
const stripe = Stripe(STRIPE_PUBLISHABLE_KEY);

// 用户点击"Proceed to Payment"时调用云函数
async function handlePayment() {
  const createStripeCheckout = firebase.functions().httpsCallable('createStripeCheckout');
  const response = await createStripeCheckout({ lineItems, orderIds });
  // 后续跳转逻辑...
}

我的后端配置(index.js - GCFv2)

云函数用Firebase Secret来安全存储Stripe测试密钥,代码逻辑就是创建测试环境的Checkout Session:

const { onCall } = require("firebase-functions/v2/https");
const { initializeApp } = require("firebase-admin/app");
const { defineString } = require("firebase-functions/params");
const stripe = require("stripe");

initializeApp();

// 安全定义Stripe密钥参数
const stripeSecret = defineString("STRIPE_SECRET");

exports.createStripeCheckout = onCall({ cors: true }, async (request) => {
  // ...(身份验证检查逻辑)
  const stripeClient = new stripe(stripeSecret.value());
  const session = await stripeClient.checkout.sessions.create({
    // Session的具体配置细节
  });
  return { sessionId: session.id };
});

我已经试过的排查手段

  • 反复核对密钥:前端的测试发布密钥、Firebase Secret里存的测试密钥,我翻来覆去检查了N遍,都是pk_test_和sk_test_开头的,绝对没和正式密钥搞混。
  • 确认Secret设置正确:用firebase functions:secrets:set STRIPE_SECRET成功设置了测试密钥,也用firebase functions:secrets:get验证过,确实是我要的测试密钥。
  • 强制清除缓存+重部署:一开始以为是服务器缓存的锅,我直接把云函数删掉(firebase functions:delete createStripeCheckout),然后重新部署了好几次,结果问题还是一模一样。
  • 硬编码密钥测试:最后我破罐子破摔,把sk_test_...直接写进了index.js里,重新部署后居然正常创建测试环境的Session了!但只要用Firebase Secret的方式就不行。

有没有大佬遇到过类似的问题?或者知道Firebase/Google Cloud里有没有什么我没注意到的设置,会覆盖我配置的密钥环境?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:19:51