Stripe支付网关Axios请求报错:.env密钥未加载问题求助
.env文件路径或命名错误
后端项目的.env文件必须放在项目根目录,且文件名严格为.env(如果是特定环境,比如开发环境需使用.env.development,同时要确保框架支持加载对应环境的配置文件)。如果文件位置不对(比如放在src子目录)或命名拼写错误(比如写成.env.或.env_local),都会导致无法加载。变量名不匹配或不符合规则
检查代码中读取的环境变量名和.env里的是否完全一致(环境变量名大小写敏感)。比如代码里写的是process.env.STRIPE_SECRET_KEY,但.env里是STRIPE_KEY,就会读取到undefined。另外,部分框架对后端环境变量有前缀要求,要确认是否符合框架规则。未正确加载dotenv依赖(Node.js后端)
若后端基于Node.js,需先安装dotenv包,然后在项目入口文件最顶部执行加载代码:require('dotenv').config();如果没安装dotenv,或者加载语句放在了Stripe初始化代码之后,会导致读取环境变量时还未加载,值为
undefined。环境变量加载时机错误
确保dotenv的加载代码在所有依赖环境变量的逻辑之前执行。比如不能先初始化Stripe,再加载.env:// 错误写法:先初始化Stripe,此时.env还没加载 const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); require('dotenv').config(); // 正确写法:先加载.env,再初始化Stripe require('dotenv').config(); const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);.env文件格式错误
- 变量值不要加引号:比如
STRIPE_SECRET_KEY="sk_test_xxx"会导致读取到的密钥带引号,Stripe识别为无效密钥,应直接写STRIPE_SECRET_KEY=sk_test_xxx(值含特殊字符除外)。 - 变量名和值之间不要加空格:比如
STRIPE_SECRET_KEY = sk_test_xxx这种写法会导致读取失败,需去掉空格。
- 变量值不要加引号:比如
服务未重启或缓存问题
修改.env文件后,必须重启后端服务才能加载新的环境变量。如果只是修改文件但没重启,旧的缓存值仍会生效。部分IDE或终端也可能缓存环境变量,必要时需重启IDE或终端窗口。部署环境配置问题
如果是在Docker、云平台(如Vercel、Heroku)等环境运行,不能依赖本地的.env文件:- Docker需通过
--env-file参数指定.env文件,或在Dockerfile中添加复制指令; - 云平台需在控制台的环境变量配置面板手动添加密钥,而不是上传本地.env文件。
- Docker需通过
内容的提问来源于stack exchange,提问作者Ali Raza

