如何处理Stripe API密钥,解决授权失败并获取产品列表?
解决Stripe API未授权问题:正确处理API密钥并获取产品列表
你的代码存在几个核心问题导致授权失败,下面直接给出问题点和优化方案:
问题分析
- 未携带授权信息:你引入了Stripe官方SDK却未使用,反而用axios直接请求API时没有添加授权头,Stripe API会拒绝未授权的请求
- 密钥处理错误:代码里硬编码了密钥占位符,没有正确读取
.env文件中的变量 - axios用法错误:axios会自动解析JSON响应,不需要调用
response.json(),直接用response.data即可
优化方案一:使用Stripe官方SDK(推荐)
官方SDK会自动处理授权、签名验证等细节,比手动用axios更安全可靠:
- 先在你的
.env文件中配置Stripe秘密密钥(从Stripe仪表盘获取,格式为sk_xxxxxxx):
STRIPE_SECRET_KEY=sk_你的秘密密钥
- 修改代码如下:
const dotenv = require('dotenv'); dotenv.config({ path: './.env' }); // 从环境变量读取密钥,初始化Stripe客户端 const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); // 调用Stripe API获取产品列表,可通过limit参数控制返回数量 stripe.products.list({ limit: 10 }) .then(products => { console.log('产品列表:', products.data); }) .catch(error => { console.error('请求失败:', error.message); });
优化方案二:修正axios请求写法(仅特殊场景使用)
如果必须用axios请求,需要手动添加授权头:
const axios = require('axios'); const dotenv = require('dotenv'); dotenv.config({ path: './.env' }); const URL = 'https://api.stripe.com/v1/products'; axios.get(URL, { headers: { // Stripe API支持Bearer认证,直接传入秘密密钥即可 'Authorization': `Bearer ${process.env.STRIPE_SECRET_KEY}` } }) .then(response => { console.log('产品列表:', response.data); }) .catch(error => { console.error('请求失败:', error.response?.data || error.message); });
注意事项
- 确保
.env文件已添加到.gitignore,避免密钥泄露到版本控制系统 - 必须使用秘密密钥(
sk_开头),发布密钥(pk_开头)仅用于前端,后端调用API必须用秘密密钥 - 如果仍提示未授权,检查密钥是否正确,以及Stripe账号是否正常启用产品API权限
内容的提问来源于stack exchange,提问作者Tyro
相关产品推荐
相关产品推荐

