按照LamaDev教程实现Stripe支付时401 API密钥认证失败求助
问题排查与修复方案
1. 优先排查后端Stripe密钥加载问题
- 先确认后端项目根目录安装了
dotenv依赖,并且在入口文件(一般是server.js/index.js)最顶部添加了require('dotenv').config(),没有这行代码process.env.STRIPE_KEY会读取失败,Stripe初始化时拿不到密钥就会报401认证错误。 - 打印验证密钥是否读取成功:在Stripe初始化的代码行上方加
console.log(process.env.STRIPE_KEY),启动后端服务后看控制台输出是否是你填写的Stripe密钥,注意必须是Secret Key不是前端用的Publishable Key,正确的密钥开头是sk_test_,不要填反前后端的密钥。 - 检查.env文件格式:
STRIPE_KEY=后面不要加引号,也不要有多余空格,正确格式为STRIPE_KEY=sk_test_xxxxxx。
2. 检查Stripe依赖版本兼容性
如果你安装的是Stripe v10以上的版本,旧的回调写法已经不被官方支持,需要改成async/await写法,替换后端payment接口代码:
const router = require("express").Router(); const stripe = require("stripe")(process.env.STRIPE_KEY); router.post("/payment", async (req, res) => { try { const charge = await stripe.charges.create({ source: req.body.tokenId, amount: req.body.amount, currency: "usd", }); res.status(200).json(charge); } catch (stripeErr) { res.status(500).json(stripeErr); } }); module.exports = router;
3. 修正Axios配置笔误
你当前的axios实例配置里属性名写错了,请求头的配置字段是headers不是header,少了后缀s,该问题虽然不直接影响Stripe认证,但会导致后续的用户身份校验失效:
// 修正后的userRequest配置 export const userRequest = axios.create({ baseURL: BASE_URL, headers: { token: `Bearer ${TOKEN}` }, });
4. 本地调试临时验证方案
如果排查.env加载问题耗时,可以先把Stripe密钥硬编码初始化测试,如果硬编码后请求正常,就可以100%确定是.env加载问题,测试完成后务必改回读取环境变量,避免密钥泄露:
// 仅本地测试使用 const stripe = require("stripe")("你的sk_test开头的Stripe密钥");
内容的提问来源于stack exchange,提问作者n_d22
相关产品推荐
相关产品推荐

