SAAS 应用可以使用哪些 Billing provider?
结论
不建议从零开发一套完整的 Billing 系统。对大多数 SaaS 应用来说,更稳妥的方案是使用成熟的订阅计费平台,再通过 API 和 Webhook 接入业务系统。
常见方案主要分为三类:
| 类型 | 常见服务商 | 适合场景 |
|---|---|---|
| 支付与订阅一体化 | Stripe Billing、Braintree | 希望直接管理客户、价格、订阅和支付流程 |
| 独立订阅管理平台 | Chargebee、Recurly、Zuora、Maxio | 计费规则复杂,需要接入多个支付渠道或财务系统 |
| Merchant of Record | Paddle、FastSpring、Lemon Squeezy | 希望由服务商处理收款、销售税、退款和部分合规事务 |
如果产品面向中小企业,套餐也比较简单,可以先评估 Stripe Billing 或 Paddle。如果业务涉及销售团队报价、年度合同、阶梯计价、多币种、用量计费或复杂的财务确认,则更适合评估 Chargebee、Recurly、Zuora 或 Maxio。
各平台支持的国家和地区、税务能力、支付方式及价格都可能调整。正式选型前,需要查看服务商的当前文档,并确认其是否覆盖目标客户所在地区。
Billing 服务需要覆盖哪些能力
Billing 不只是定期扣款。一套能够投入生产的方案,至少需要处理以下事项:
- 产品、套餐、价格和优惠规则
- 月付、年付、试用期和自动续订
- 套餐升级、降级及按比例计费
- 固定计费、席位计费和用量计费
- Invoice 的创建、发送、作废和贷项通知单
- 信用卡、银行转账及其他本地支付方式
- 支付失败重试与催收流程,即 dunning
- 到期提醒、续费提醒和付款失败通知
- 退款、争议付款和 chargeback
- 税率、税号、发票编号及账单地址
- 与财务系统、CRM 和数据仓库同步
- Webhook 重试、幂等处理和审计日志
还需要区分”商业 Invoice”和当地法律定义的税务发票。Billing 平台能够生成账单,不等于它自动符合所有国家或地区的税务开票要求。
如何选择 Provider
1. 先确定由谁承担交易责任
使用 Stripe Billing 这类服务时,通常由你的公司直接向客户销售,平台提供支付和订阅工具。税务登记、退款政策和大部分合规责任仍由你的公司承担。
在 Merchant of Record 模式下,服务商通常以名义销售方的身份处理交易,并承担更多销售税、付款和退款事务。这样可以减少运营工作,但手续费通常更高,你对结账流程和客户关系的控制也可能更少。
2. 明确计费模型
选型前,先列出业务实际需要支持的计费方式:
- 每个公司固定收费
- 按用户席位收费
- 按供应商数量分档收费
- 按 API 调用量或存储量收费
- 基础订阅费加超额用量费
- 由销售团队协商的年度合同
如果业务只有固定月费,没有必要一开始就采用企业级 Billing 平台。但如果涉及合同变更、补差价、多实体结算或复杂的收入确认,简单的支付 API 很快就会难以维护。
3. 检查地区和财务要求
需要重点确认:
- 是否支持公司的注册地和目标市场
- 结算币种及外汇费用
- 是否支持信用卡、ACH、SEPA 或本地支付方式
- 是否能够采集企业税号
- VAT、GST、sales tax 的计算和申报范围
- 是否支持符合当地要求的发票或开票系统
- 退款、拒付和资金冻结规则
- 数据导出与迁移能力
不要只看每笔交易的手续费。订阅管理费、税务服务费、拒付费、货币转换费和退款成本都会影响总成本。
推荐的集成方式
Billing 平台管理支付状态,应用管理授权和功能访问。两者不能直接依赖前端返回结果来绑定状态,应以通过签名验证的 Webhook 作为同步依据。
典型流程如下:
- 应用在本地建立 tenant 和 customer 的映射。
- 后端通过 Billing Provider 创建 Checkout Session 或 Subscription。
- 客户在托管页面完成付款。
- Provider 发送 Webhook。
- 后端验证签名,并根据事件 ID 进行幂等处理。
- 应用在本地更新订阅状态和功能权限。
- 定时任务执行对账,修复遗漏或长时间未处理的事件。
下面是一个简化的 Express Webhook 示例。具体事件名称和 SDK 调用方式应以 Provider 的当前文档为准:
import express from "express";
const app = express();
// 需要保留原始请求体,以便验证 Webhook 签名
app.post(
"/webhooks/billing",
express.raw({ type: "application/json" }),
async (req, res) => {
let event;
try {
event = verifyWebhookSignature({
rawBody: req.body,
signature: req.headers["billing-signature"],
secret: process.env.BILLING_WEBHOOK_SECRET
});
} catch {
return res.status(400).send("Invalid signature");
}
const alreadyProcessed = await webhookEventExists(event.id);
if (alreadyProcessed) {
return res.sendStatus(200);
}
await database.transaction(async (tx) => {
await saveWebhookEvent(tx, event.id, event.type);
switch (event.type) {
case "subscription.activated":
case "subscription.updated":
await updateSubscription(tx, {
providerSubscriptionId: event.data.subscriptionId,
status: event.data.status,
planId: event.data.planId,
currentPeriodEnd: event.data.currentPeriodEnd
});
break;
case "subscription.cancelled":
await markSubscriptionCancelled(
tx,
event.data.subscriptionId
);
break;
case "invoice.payment_failed":
await restrictAccountIfRequired(
tx,
event.data.customerId
);
break;
}
});
return res.sendStatus(200);
}
);
Webhook 处理逻辑必须允许事件重复投递和乱序到达。收到一次付款失败事件后,不要立即删除客户数据,也不能把浏览器跳转到”支付成功”页面视为最终的付款证明。
除 Billing 外还要关注的组件
多租户与权限模型
供应商管理 SaaS 通常需要严格隔离不同 tenant。所有业务记录都应关联 tenant_id,并由服务端强制执行隔离,不能只靠前端筛选。
权限至少应分为:
- Organization Owner
- Administrator
- Procurement Manager
- Reviewer
- Read-only User
- External Supplier
如果客户是中大型企业,还可能需要 SSO、SAML、SCIM、细粒度 RBAC 和审批流程。
身份认证和账户生命周期
系统需要完整处理注册、邮箱验证、密码重置、多因素认证、成员邀请、成员移除和账户关闭。企业客户通常还会关注域名验证、登录审计及会话管理。
数据安全与隐私
云平台提供安全能力,但不会自动保障应用安全。云服务通常采用 shared responsibility model。Provider 负责底层设施,应用方仍需负责代码、访问权限、密钥、网络配置和客户数据。
至少要落实以下措施:
- 全程使用 TLS
- 对敏感数据进行静态加密
- 将密钥存入 Secret Manager,而不是代码仓库
- 为数据库设置最小权限
- 记录管理操作审计日志
- 定期备份并进行恢复演练
- 执行漏洞扫描和依赖更新
- 对登录操作限速并检测异常行为
- 建立数据保留、导出和删除流程
- 明确隐私政策、服务条款和数据处理协议
Firewall 或 WAF 只能降低部分风险,无法替代安全设计、权限检查和代码审计。
基础设施与可靠性
使用云计算是合理的选择,但没有必要过早搭建复杂的 Kubernetes 集群。产品早期通常可以先使用托管数据库、对象存储、容器或 PaaS。
以下事项需要提前确定:
- 开发、测试和生产环境的隔离方式
- Infrastructure as Code
- 自动化部署和回滚
- 数据库迁移策略
- 日志、指标、Tracing 和告警
- 备份恢复目标,即 RPO 和 RTO
- 后台任务队列与失败重试
- 限流、超时和熔断
- 容量预算与云成本告警
Scalability 不只是增加服务器数量。数据库索引、租户数据分布、后台任务、缓存策略和第三方 API 限额,往往会更早成为瓶颈。
邮件和通知
邀请、付款提醒、续费通知及系统告警都需要可靠的邮件基础设施。系统还要处理模板、多语言、退信、投诉、退订,以及 SPF、DKIM、DMARC 等域名配置。
业务提醒应与 Billing Provider 的催收邮件协调,避免同一位客户收到重复或互相矛盾的信息。
供应商数据治理
产品用于管理供应商信息,因此还要重点考虑:
- 自定义字段和数据校验
- 重复供应商识别
- 批量导入、导出和字段映射
- 附件存储与访问控制
- 修改历史和审批记录
- 联系人信息的隐私保护
- 停用供应商,而不是直接删除
- 与 ERP、采购系统和会计软件集成
- 恶意文件扫描及上传大小限制
客户支持与运营
系统上线并不等于发布工作已经完成。还需要准备:
- Onboarding 流程和示例数据
- 帮助中心与 API 文档
- 客服渠道和问题升级机制
- 服务状态页面
- Incident Response 流程
- SLA 或服务可用性说明
- 套餐限制和超额处理规则
- 取消订阅、退款与数据导出流程
一个务实的上线组合
早期 B2B SaaS 可以从下面这套组合起步:
- 托管云运行环境
- 托管关系型数据库
- 对象存储
- 第三方身份认证或成熟的认证组件
- Stripe Billing、Paddle 或同类 Billing Provider
- 事务邮件服务
- 错误监控、日志和可用性告警
- 自动备份与恢复验证
- 基础 RBAC、审计日志和 tenant 隔离
初期应把套餐和计费规则控制在少数几种,避免产品尚未验证就引入复杂的价格引擎。Billing Provider 能省去大量重复开发,但应用仍需自行设计订阅状态、客户权限、数据隔离、安全责任和财务对账。
备注:内容仅供参考。
