Firebase云函数无法替换Stripe测试密钥为正式密钥问题
解决Stripe正式支付时的密钥不匹配问题
嘿,这个问题我太熟了!咱们先把报错的根源说清楚:你现在客户端用正式公钥生成的是Stripe生产环境的支付token(就是那个tok_############开头的),但你的Firebase云函数还在调用测试环境的密钥(functions.config().stripe.testkey)——测试密钥只能处理测试模式的token(格式是tok_test_xxxx),自然就会抛出这个“找不到token”的错误啦。
下面是一步步的解决办法:
第一步:修正云函数的密钥调用路径
你之前用firebase functions:config:set stripe.token=“sk_live_#################”上传了正式密钥,所以云函数里的Stripe初始化代码要把原来的testkey改成token。举个例子:
原来的代码:const stripe = require('stripe')(functions.config().stripe.testkey);修改后:
const stripe = require('stripe')(functions.config().stripe.token);第二步:重新部署云函数
改完代码后,一定要重新部署才能让修改生效,执行下面的命令:firebase deploy --only functions(可选但推荐)优化密钥配置,避免后续混淆
为了以后切换环境更省心,建议给测试和正式密钥分别设置清晰的配置键:- 先重新设置正式密钥(用更明确的键名):
firebase functions:config:set stripe.livekey="sk_live_#################" - 云函数里根据运行环境自动选择密钥:
// 生产环境用正式密钥,开发环境用测试密钥 const stripeApiKey = functions.config().stripe[process.env.NODE_ENV === 'production' ? 'livekey' : 'testkey']; const stripe = require('stripe')(stripeApiKey);
这样以后不管是测试还是上线,都不用手动改代码切换密钥了。
- 先重新设置正式密钥(用更明确的键名):
最后再确认一遍:客户端的正式公钥和云函数的正式密钥必须是Stripe同一环境的配对密钥,别再把测试和正式的混在一起啦!
内容的提问来源于stack exchange,提问作者Will Goodhew
相关产品推荐
相关产品推荐

