如何用Node.js获取Stripe账户的总营收金额
在Node.js中获取Stripe账户总营收的实现方案
先解决你的balance is not defined报错问题
你的代码报错大概率是两个核心原因:
- 未正确初始化Stripe客户端实例
- 使用了过时的回调写法(新版Stripe SDK更推荐async/await)
修正后的余额查询代码(注:此方法查询的是账户余额,并非总营收)
// 1. 先安装Stripe SDK:npm install stripe const stripe = require('stripe')('你的Stripe API密钥'); // 2. 推荐使用async/await写法 async function getStripeBalance() { try { const balance = await stripe.balance.retrieve(); console.log('账户余额详情:', balance); // 示例:提取美元可用余额(需根据你的账户货币调整) const availableUsd = balance.available.find(item => item.currency === 'usd').amount / 100; console.log('可用余额(USD):', availableUsd); } catch (err) { console.error('查询余额失败:', err); } } getStripeBalance();
如果坚持使用回调写法,必须先处理错误分支,避免因报错导致balance未定义:
const stripe = require('stripe')('你的Stripe API密钥'); stripe.balance.retrieve((err, balance) => { if (err) { console.error('请求错误:', err); return; } console.log('账户余额详情:', balance); });
获取Stripe账户总营收的正确方法
注意:balance.retrieve返回的是当前账户的可用/待结算余额,并非总营收(总营收指所有成功交易的总额,含手续费前的收入)。以下是两种可靠的实现方式:
方法1:通过Charges API汇总成功交易(适合交易数量较少的场景)
const stripe = require('stripe')('你的Stripe API密钥'); async function calculateTotalRevenue() { let totalRevenue = 0; let hasMoreTransactions = true; let lastChargeId = null; try { // 分页遍历所有成功的收费记录 while (hasMoreTransactions) { const charges = await stripe.charges.list({ limit: 100, // 单次请求最大返回100条 starting_after: lastChargeId, status: 'succeeded' // 仅统计成功完成的交易 }); // 累加交易金额(Stripe金额以"分"为单位) charges.data.forEach(charge => { totalRevenue += charge.amount; }); hasMoreTransactions = charges.has_more; lastChargeId = charges.data.length > 0 ? charges.data.at(-1).id : null; } // 转换为实际货币单位(例如美元) console.log('总营收(USD):', totalRevenue / 100); } catch (err) { console.error('计算总营收失败:', err); } } calculateTotalRevenue();
方法2:使用Stripe Reports API(推荐,适合交易量大的场景)
Stripe的Reports API可生成官方汇总报告,效率更高,且支持按时间区间筛选:
const stripe = require('stripe')('你的Stripe API密钥'); async function getOfficialRevenueReport() { try { // 创建营收汇总报告任务 const reportRun = await stripe.reports.reportRuns.create({ report_type: 'balance.summary.1', parameters: { interval_start: Math.floor(Date.now() / 1000) - 365 * 24 * 60 * 60, // 统计过去一年 interval_end: Math.floor(Date.now() / 1000), currency: 'usd' // 指定统计货币 } }); // 等待报告生成完成 let completedReport = await stripe.reports.reportRuns.retrieve(reportRun.id); while (completedReport.status !== 'succeeded') { await new Promise(resolve => setTimeout(resolve, 5000)); completedReport = await stripe.reports.reportRuns.retrieve(reportRun.id); } // 提取总营收数据 const totalRevenue = completedReport.result.summary.gross_volume.amount / 100; console.log('官方统计总营收(USD):', totalRevenue); } catch (err) { console.error('生成报告失败:', err); } } getOfficialRevenueReport();
关键注意事项
- Stripe所有金额字段均以货币最小单位存储(如美元为分),最终需除以100转换为常规金额
- 若账户支持多货币,需按货币类型分别汇总统计
- 生产环境建议缓存统计结果,避免频繁调用API触发Rate Limit限制
内容的提问来源于stack exchange,提问作者Dwij Joshi
相关产品推荐
相关产品推荐

