如何通过Stripe实现自动扣费订阅场景下的发票推送?
嘿,我正好处理过不少Stripe订阅发票的场景,你的需求其实是SaaS里非常常见的——让自动扣费的客户也能收到发票通知,哪怕钱已经自动扣了。我给你拆解几个可行的方案:
其实Stripe订阅生成的自动扣费发票,默认就会给客户发送邮件通知,前提是你在Stripe后台的设置里没关掉这个选项。你可以去:
- Stripe仪表盘 → 设置 → 账单设置 → 邮件设置
- 确认「发票」部分的「发送给客户」是开启状态,并且模板是你需要的样式。
如果你的订阅是正常创建的(用subscription.create API),每次周期生成的自动发票(invoice.paid事件触发时),Stripe都会自动发邮件给客户,同时仪表盘里也会有记录。可能你之前没注意到这个默认行为?
如果默认邮件满足不了你的需求(比如要加自定义内容、和自己的CRM联动、用自己的邮件系统发送),那用Stripe的Webhook是最佳实践:
- 首先在Stripe后台注册
invoice.paid事件的Webhook端点(因为自动扣费成功后会触发这个事件)。 - 当你的Webhook收到
invoice.paid的事件 payload 时,你可以:- 从payload里提取发票的PDF URL(
invoice.invoice_pdf字段)、客户邮箱、订阅信息等。 - 调用你自己的邮件服务(比如SendGrid、Mailgun),把发票PDF作为附件或者链接,加上自定义的话术发给客户。
- 同时可以把发票信息存到你自己的数据库里,方便后续客户查询。
- 从payload里提取发票的PDF URL(
这里给个简单的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); });
如果你需要在特定时机手动给客户补发发票,或者创建订阅时就强制发送,也可以用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

