You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js获取Stripe账户的总营收金额

在Node.js中获取Stripe账户总营收的实现方案

先解决你的balance is not defined报错问题

你的代码报错大概率是两个核心原因:

  1. 未正确初始化Stripe客户端实例
  2. 使用了过时的回调写法(新版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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:43:09