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

Stripe一次性支付:如何生成带自定义明细的收据/发票?

问题1:给PaymentIntent生成的邮件收据添加商品明细

直接调用PaymentIntent接口完成扣款时,默认的系统收据不会包含商品行项目——因为PaymentIntent仅负责资金流转,不关联商品明细信息。要实现带明细的收据,推荐通过Invoice + PaymentIntent的组合方案,步骤如下:

  1. 创建草稿Invoice并添加商品行项目
    基于你在Stripe后台创建的商品(T恤、牛仔裤),先生成草稿Invoice,再添加对应行项目:

    // 1. 创建草稿Invoice
    const invoice = await stripe.invoices.create({
      customer: customerId,
      collection_method: 'charge_automatically',
      currency: 'usd',
    });
    
    // 2. 添加2件T恤的行项目(替换为你实际的T恤Price ID)
    await stripe.invoiceItems.create({
      customer: customerId,
      invoice: invoice.id,
      price: 'price_xxxxxx',
      quantity: 2,
    });
    
    // 3. 添加1条牛仔裤的行项目(替换为你实际的牛仔裤Price ID)
    await stripe.invoiceItems.create({
      customer: customerId,
      invoice: invoice.id,
      price: 'price_yyyyyy',
      quantity: 1,
    });
    
  2. 确认Invoice并关联支付完成扣款
    确认Invoice后,Stripe会自动生成对应的PaymentIntent,你可以用现有支付方式完成确认:

    // 确认Invoice,生成关联的PaymentIntent
    const confirmedInvoice = await stripe.invoices.finalizeInvoice(invoice.id);
    
    // 用指定支付方式确认PaymentIntent完成扣款
    const paymentIntent = await stripe.paymentIntents.confirm(confirmedInvoice.payment_intent, {
      payment_method: defaultPaymentMethod,
      return_url: process.env["WEBURL"],
    });
    

    这种方式下,Stripe发送的邮件收据会自动包含所有商品行项目。


问题2:使用Invoice时自行指定最终金额,而非Stripe计算

要跳过Stripe基于行项目的自动计算,直接控制最终金额(比如首单优惠后从30美元改为20美元),可以通过以下两种方式实现:

方式1:添加调整项(推荐)

在Invoice中添加负数调整项,直接抵扣金额,调整项会显示在收据上:

// 在创建Invoice后、确认前,添加首单优惠调整项(抵扣10美元,单位为分)
await stripe.invoiceItems.create({
  customer: customerId,
  invoice: invoice.id,
  amount: -1000,
  currency: 'usd',
  description: '首单立减10美元',
});

// 确认Invoice后,最终金额为3000 - 1000 = 2000分(20美元)
const confirmedInvoice = await stripe.invoices.finalizeInvoice(invoice.id);

方式2:设置自定义金额(适用于完全跳过行项目计算的场景)

如果不需要依赖商品行项目的金额计算,直接指定Invoice的最终应收金额,同时仍可添加行项目用于收据展示:

// 创建指定自定义金额的Invoice
const invoice = await stripe.invoices.create({
  customer: customerId,
  collection_method: 'charge_automatically',
  currency: 'usd',
  custom_amounts: {
    amount_due: 2000, // 最终应收20美元(单位为分)
    amount_paid: 2000,
    amount_remaining: 0,
  },
  auto_advance: true,
});

// 添加商品行项目(仅用于收据展示,不影响金额计算)
await stripe.invoiceItems.create({
  customer: customerId,
  invoice: invoice.id,
  price: 'price_xxxxxx',
  quantity: 2,
});

await stripe.invoiceItems.create({
  customer: customerId,
  invoice: invoice.id,
  price: 'price_yyyyyy',
  quantity: 1,
});

// 确认Invoice并完成支付
const confirmedInvoice = await stripe.invoices.finalizeInvoice(invoice.id);
const paymentIntent = await stripe.paymentIntents.confirm(confirmedInvoice.payment_intent, {
  payment_method: defaultPaymentMethod,
  return_url: process.env["WEBURL"],
});

补充说明

  • 无论采用哪种方案,通过Invoice完成支付后,Stripe的系统邮件收据都会自动包含所有行项目和调整项明细。
  • 如果坚持直接使用PaymentIntent而不通过Invoice,只能通过自定义收据实现:关闭Stripe自动收据功能,自行开发包含明细的邮件模板并发送,这种方式需要额外的邮件开发成本,不如Invoice方案高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:28:27