Mollie Subscriptions 订阅与重复扣费 - SaaS 周期性收费完全指南
什么是 Recurring
Mollie Recurring(重复扣费)让客户首次付款后一次性授权,后续的定期扣费由 Mollie 自动完成。这是 SaaS、会员制、盒子订购等周期性收费业务的核心功能。
支持的扣费方式
首次付款可以用几乎任何支付方式(卡、iDEAL、Bancontact、PayPal 等),但后续自动扣费只能用三种:
| 后续扣费方式 | 适用场景 | 说明 |
|---|---|---|
| SEPA Direct Debit | 欧洲本地银行账户 | 从客户银行账户直接扣款,需要首次授权 |
| 信用卡(Card) | 使用 Visa/Mastercard 的客户 | 首次卡支付时标记为"可重复使用" |
| PayPal | 有 PayPal 账户的客户 | PayPal 账户内的定期扣款 |
SEPA Direct Debit 在欧洲最主流——客户授权后 Mollie 可以直接从他们的银行账户扣费,费用也最低(£0.30/次)。
订阅模型
Mollie 的订阅功能由三层对象组成:
Customer(客户)
Customer 是 Mollie 用来存储可重复使用支付方式的容器。你在创建 Payment 或 Subscription 时传入 Customer ID,Mollie 就知道"这个客户是谁、他有哪些可用的支付方式"。
# 创建 Customer
customer = customers_api.create_customer({
"name": "John Doe",
"email": "john@example.com"
})
# customer['id'] → 'cst_xxxxx'
Mandate(授权)
Mandate 是客户对你的支付授权。首次付款成功后,如果支付方式支持 Recurring,Mollie 会自动为该 Customer 创建一个 Mandate。
Mandate 有三种状态:
valid:可以用来扣费invalid:已失效pending:等待验证(某些 SEPA 方式需要)
你可以查询某个 Customer 有哪些可用的 Mandates。
Subscription(订阅)
Subscription 定义了"扣多少、多久扣一次、扣几次":
subscription = subscriptions_api.create_subscription(
customer_id="cst_xxxxx",
body={
"amount": {"currency": "EUR", "value": "29.99"},
"interval": "1 month", # 也可以是 "1 year"、"2 weeks"
"description": "Pro Plan Monthly",
"method": "directdebit" # 指定用哪种方式扣
}
)
三层关系图
Customer(cst_xxxxx)
├── Mandate(mdt_xxxxx,SEPA 直接扣款授权)
│ └── Subscription(sub_xxxxx,每月扣 €29.99)
└── Mandate(mdt_yyyyy,信用卡授权)
└── Subscription(sub_yyyyy,每年扣 €299.99)
扣费失败处理
这是 Recurring 功能里最让人担心的问题——客户卡过期了、余额不足了、银行拒付了怎么办。Mollie 的处理策略:
自动重试(最多 5 次)
第 1 天:扣费失败 → 自动重试
第 2 天:扣费失败 → 自动重试
第 3 天:扣费失败 → 自动重试
第 4 天:扣费失败 → 自动重试
第 5 天:扣费失败 → 最后一次重试
第 6 天:全部失败 → 订阅取消,发送 customer.subscription.canceled Webhook
每次重试的间隔是一天。如果某次重试成功了,订阅继续正常扣费,下次扣费日期会重置为上次成功日期 + interval。
通知与主动干预
- 每次扣费失败 Mollie 都会发送
payment.failedWebhook - 你可以在 Dashboard 里看到哪些客户的扣费失败了
- 你可以选择:让 Mollie 继续重试、手动取消订阅、或者联系客户更新支付信息
3DS 与订阅
订阅的首次付款可能需要 3DS 验证(SEPA Direct Debit 通常不需要)。后续的自动扣费不再触发 3DS——这是 SCA 法规下的例外,只要客户首次授权时完成了验证,后续的定期扣款被认为不需要再次 SCA。
一次性订阅 vs 自动续费
Mollie 不强制"永久续费"。Subscription 对象可以设置 times 参数:
{
"interval": "1 month",
"times": 12, # 只扣 12 次(一年),然后自动结束
"amount": {"currency": "EUR", "value": "9.99"},
"description": "12-month Magazine Subscription"
}
不设置 times 就是永久续订,直到客户主动取消。
客户自助取消
在 Mollie Dashboard → Settings → Customer Portal,可以开启一个客户自助门户。客户有专属链接(如 https://mollie.com/payment-link/xxxxxx),可以自己:
- 查看当前订阅
- 取消订阅
- 更新支付方式
这对于 SaaS 来说特别有用——你不用自己构建"订阅管理"页面,也不用客服介入就能处理客户的取消请求。
费率
订阅的后续扣费沿用该支付方式的标准费率:
| 后续扣费方式 | 单次扣费费用 |
|---|---|
| SEPA Direct Debit | £0.30 |
| 信用卡 | 1.80% + £0.25 |
| PayPal | PayPal Fees + £0.10 |
首次付款的费率也按对应支付方式标准收取,没有额外的 "Recurring 服务费"。
典型集成流程
客户在你的 SaaS 页面选择 Pro 套餐(€29.99/月)
│
├── 你创建 Customer(如果还没有)
│ └── cst_xxxxx
│
├── 你创建首次 Payment,指定:
│ ├── customerId: cst_xxxxx
│ ├── sequenceType: "first"(标记为首次,后续可 Recurring)
│ └── 金额 €29.99
│
├── 客户在 Checkout 完成首次付款
│ └── Mollie 自动创建 Mandate
│
├── Mollie 发送 payment.paid Webhook
│
├── 你创建 Subscription(每月扣 €29.99)
│ └── sub_xxxxx
│
└── 下一个月开始,Mollie 自动发起扣费
├── 成功 → payment.paid Webhook → 你更新客户的"到期日期"
└── 失败 → 最多 5 次重试 → 全失败后订阅取消
继续阅读:防欺诈与拒付管理 →