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

如何通过Stripe实现自动扣费订阅场景下的发票推送?

嘿,我正好处理过不少Stripe订阅发票的场景,你的需求其实是SaaS里非常常见的——让自动扣费的客户也能收到发票通知,哪怕钱已经自动扣了。我给你拆解几个可行的方案:

方案1:利用Stripe默认的发票通知机制

其实Stripe订阅生成的自动扣费发票,默认就会给客户发送邮件通知,前提是你在Stripe后台的设置里没关掉这个选项。你可以去:

  • Stripe仪表盘 → 设置 → 账单设置 → 邮件设置
  • 确认「发票」部分的「发送给客户」是开启状态,并且模板是你需要的样式。

如果你的订阅是正常创建的(用subscription.create API),每次周期生成的自动发票(invoice.paid事件触发时),Stripe都会自动发邮件给客户,同时仪表盘里也会有记录。可能你之前没注意到这个默认行为?

方案2:用Webhook自定义发票推送逻辑

如果默认邮件满足不了你的需求(比如要加自定义内容、和自己的CRM联动、用自己的邮件系统发送),那用Stripe的Webhook是最佳实践:

  1. 首先在Stripe后台注册invoice.paid事件的Webhook端点(因为自动扣费成功后会触发这个事件)。
  2. 当你的Webhook收到invoice.paid的事件 payload 时,你可以:
    • 从payload里提取发票的PDF URL(invoice.invoice_pdf字段)、客户邮箱、订阅信息等。
    • 调用你自己的邮件服务(比如SendGrid、Mailgun),把发票PDF作为附件或者链接,加上自定义的话术发给客户。
    • 同时可以把发票信息存到你自己的数据库里,方便后续客户查询。

这里给个简单的Node.js代码示例:

// 处理Stripe Webhook的invoice.paid事件
app.post('/stripe-webhook', async (req, res) => {
  const event = req.body;
  if (event.type === 'invoice.paid') {
    const invoice = event.data.object;
    const customerEmail = invoice.customer_email;
    const invoicePdfUrl = invoice.invoice_pdf;
    
    // 调用你的邮件服务发送发票
    await sendInvoiceEmail(customerEmail, invoicePdfUrl, invoice.number);
  }
  res.sendStatus(200);
});
方案3:手动触发发票发送API

如果你需要在特定时机手动给客户补发发票,或者创建订阅时就强制发送,也可以用Stripe的invoice.send API:

比如,当你创建订阅后,Stripe会生成第一个发票,你可以调用:

const stripe = require('stripe')('你的API密钥');

// 假设你已经有了invoice_id
await stripe.invoices.send('invoice_123456789');

这个API会强制给客户发送发票邮件,不管自动扣费是否完成。不过注意,这个操作会标记发票为「已发送」,所以不要重复调用。

额外提示:自定义发票模板

不管用哪种方案,你都可以在Stripe后台自定义发票的样式(比如加你的logo、公司信息、自定义备注),这样客户收到的发票更符合你的品牌形象。路径是:Stripe仪表盘 → 设置 → 账单设置 → 发票模板。

另外,如果你想让客户在你的平台上查看发票,也可以通过invoice.retrieve API获取发票数据,自己在前端渲染,或者直接把Stripe的发票链接(invoice.hosted_invoice_url)提供给客户,让他们在Stripe的页面上查看和下载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:23:56