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

Stripe订阅发票API获取手续费始终为0问题求助

问题分析与解决方案

你当前的问题核心是找错了手续费的关联对象:你通过Payment Intent查询的是支付交易的手续费(比如信用卡处理费),但后台看到的「Billing - Usage Fee」是Stripe针对Billing服务收取的平台服务费,这类费用和支付交易的Charge无关,所以从Payment Intent里查不到。

为什么当前代码返回0?

你调用paymentIntents.retrieve获取的是用户支付订单对应的支付意图,其中latest_charge.balance_transaction.fee对应的是支付环节产生的手续费(比如信用卡刷卡费)。而「Billing - Usage Fee」是Stripe单独向你(商家)收取的Billing服务费用,不会包含在支付交易的手续费里,所以这个字段返回0是正常的。

正确获取单条订阅发票的Stripe手续费的方法

要获取对应订阅发票的「Billing - Usage Fee」,需要从**发票(Invoice)或余额交易(Balance Transaction)**入手:

方法1:通过发票关联余额交易

每个订阅发票生成后,对应的Stripe手续费会关联到发票的balance_transaction字段,你可以直接检索发票并展开该字段:

// 1. 先获取目标订阅的所有发票(或直接用已知的发票ID)
const invoices = await stripe.invoices.list({
  subscription: 'sub_你的订阅ID',
  expand: ['data.balance_transaction']
});

// 2. 遍历发票,提取手续费
invoices.data.forEach(invoice => {
  if (invoice.balance_transaction) {
    const stripeFee = invoice.balance_transaction.fee;
    const feeDescription = invoice.balance_transaction.description;
    console.log(`发票${invoice.id}的Stripe手续费:${stripeFee},描述:${feeDescription}`);
  }
});

方法2:直接筛选余额交易

如果你知道手续费的时间或描述,可以直接查询余额交易列表,通过source字段关联到对应的发票:

const balanceTransactions = await stripe.balanceTransactions.list({
  type: 'fee', // 筛选手续费类型的交易
  description: 'Billing - Usage Fee', // 匹配你后台看到的描述
  created: {
    gte: 1725763200, // 2024-09-08的起始时间戳
    lte: 1725849599  // 2024-09-08的结束时间戳
  }
});

// 遍历交易,关联到发票
balanceTransactions.data.forEach(transaction => {
  // transaction.source 对应的是发票ID
  console.log(`手续费${transaction.fee},关联发票:${transaction.source}`);
});

补充说明

  • Stripe的手续费分为两类:支付交易手续费(和用户支付的Charge绑定)、平台服务手续费(比如Billing、Connect的服务费,单独生成余额交易),两者是分开核算的。
  • 如果你需要同时获取支付手续费和Billing服务费,需要分别从Charge的余额交易和发票/单独的余额交易中提取。

内容的提问来源于stack exchange,提问作者Alt_J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:12:50