StablePay Stablecoin Subscription 稳定币订阅支付
1. 什么是订阅(Subscription)
订阅用于管理客户的整套周期性扣费生命周期:创建订阅、完成首次钱包授权、按账期自动扣款、处理续费失败与重试,以及取消订阅。接入 StablePay Stablecoin Subscription,您的用户完成第一次链上钱包授权,您即可享受 USDC/USDT 自动续费,实现业务增长。
- 灵活扣款周期(daily / weekly / monthly / yearly)
- 首次 on-session 完成钱包授权(可同时完成首期支付)
- 后续账期 off-session 自动续费扣款
- 生命周期以 Webhook 为准驱动业务状态更新
2. 订阅的扣费方式
自动扣款(钱包授权 → 保存支付方式 → 自动续费)
工作方式:
- 用户在 StablePay Hosted Checkout 完成链上钱包授权(并可能支付首期)
- StablePay 保存可复用的"授权/支付方式"(用于后续扣款)
- 后续每个账期自动生成账单,并在到期时 off-session 自动扣款
首次订阅流程:

续费自动扣款流程:

3. Dunning(续费失败恢复 / 自动重试)
续费失败后的自动恢复称为 Dunning;StablePay 内置默认重试策略。

发送提醒邮件给用户:

状态变化与重试策略
当续费扣款失败:
- 订阅状态进入
past_due - StablePay 默认自动重试 4 次
- 重试节奏:+5 分钟、+30 分钟、+2 小时、+20 小时
重试成功:
- 任意一次重试成功,订阅恢复为
active - 继续进入下一账期
重试耗尽:
- 当重试全部失败,订阅自动变为
canceled(不再继续生成新账期)
4. 账单(Invoice)生成:账期如何运转
每个账期都会生成一张 Invoice(账单),表示该周期应收金额与支付结果。
StablePay 支持 3 种订阅启动模式(创建订阅时选择其一):
| 模式 | 说明 |
|---|---|
| 立即开通 + 立即扣首期 | 首张账单当场应收,用户在 checkout 完成支付 |
| 立即开通 + 首期延后扣 | 用户当场只授权,首张应收账单在未来扣款日自动扣 |
| Trial(试用) | 用户当场只授权,试用结束时生成首张应收账单并自动扣款 |
5. 立即开始
Step 0 — 注册 StablePay 账号
Step 1 — 选择订阅启动模式
| 模式 | 说明 |
|---|---|
| 立即扣首期 | 用户在 checkout 完成授权并支付首期 |
| 首期延后扣 | 用户仅完成授权,首期在未来账期自动扣款 |
| 试用 Trial | 用户仅完成授权,试用结束后自动扣款 |
Step 2 — 创建订阅(API 服务端)
你为某个 customer + plan 创建订阅。StablePay 会返回 Hosted Checkout URL(用于首期授权/支付)。
Hosted Checkout URL 打开如下图,StablePay 处理钱包授权和链上支付逻辑:

Step 3 — 用户完成 Hosted Checkout(首期会话)
用户在 Hosted Checkout 内完成:
- 选择钱包
- 钱包授权签名
- 支付首期



Step 4 — 用 Webhook 跟踪生命周期
你的系统应当以 Webhook 回调为"真实结果",据此开通/关闭权益、更新订单、发送通知等。
Step N — 取消订阅(到期取消 vs 立即取消)
取消指定订阅,可选择立即取消或账期结束时取消:
cancel_at_period_end = true:到期取消cancel_at_period_end = false:立即取消

6. 商户接入场景
场景 A:商户第一次上线订阅(没有存量用户)
推荐上线节奏:
- 先上"立即扣首期"验证转化、客服压力、对账链路
- Webhook 驱动激活稳定后再加 Trial
- 只有在需要"对齐账单日"时才上"首期延后扣"
场景 B:商户已接卡订阅,希望新增稳定币订阅
推荐做法:并行提供支付方式
- 保持原卡订阅不动
- 新增"使用稳定币订阅(StablePay)"作为第二种选项
- 让用户主动选择/切换
"切换支付方式"体验(避免重复扣款):
- 新建一个 StablePay 订阅
- 原卡订阅设置为"到期取消"(period end cancel),确保同一权益不会重复扣款
7. Webhooks
Subscription
| 事件 | 说明 |
|---|---|
| subscription.created | 触发时机:商户成功创建订阅后触发(订阅对象已生成)。 你应该做什么:
|
| subscription.trialing | 触发时机:用户完成首次授权,且该订阅配置了试用期,订阅进入试用中。 你应该做什么:
|
| subscription.active | 触发时机:订阅进入正常可续费状态,通常发生在:
|
| subscription.past_due | 触发时机:最近一期应收款扣款失败,订阅进入"逾期 + 正在重试"。 你应该做什么:
|
| subscription.canceled | 触发时机:订阅终止,不会再生成新的账期。常见原因:
|
| subscription.updated | 触发时机:当订阅对象的任意可变字段发生变化时触发。在 StablePay v1 中,最常见的触发场景是:商户调用 Cancel Subscription 并更新订阅的取消相关属性,例如:
|
| subscription.incomplete_expired | 触发时机:订阅创建后,用户未在规定时间内完成首次授权(例如 30 分钟),订阅失效。 你应该做什么:
|
Invoice
| 事件 | 说明 |
|---|---|
| invoice.created | 触发时机:生成一张新的账单(可能是首期,也可能是续费周期)。 你应该做什么:
|
| invoice.paid | 触发时机:账单支付成功(首期或续费)。 你应该做什么:
|
| invoice.payment_failed | 触发时机:账单支付失败(首期/续费扣款失败,或重试失败)。 你应该做什么:
|
Refund
| 事件 | 说明 |
|---|---|
| refund.created | 触发时机:创建了一笔新的退款请求/退款记录(已进入处理流程)。 你应该做什么:
|
| refund.succeeded | 触发时机:退款成功完成(资金已退回/链上退款完成/出账完成)。 你应该做什么:
|
| refund.failed | 触发时机:退款处理失败(例如链上失败、风控/合规原因、通道失败等)。 你应该做什么:
|
8. 订阅状态机

关键规则:
- Incomplete → Incomplete_expired:首期授权超过 30 分钟未完成
- Active → Past_due:续费扣款失败
- Past_due → Active:重试成功
- Past_due → Canceled:重试耗尽自动取消
- Active / Trialing / Past_due → Canceled:商户或用户取消(立即/到期)
| 状态 | 说明 |
|---|---|
| incomplete | 含义:是订阅的一种临时状态,表示订阅已创建但首次付款尚未成功。在这个状态下,订阅实际上还未开始提供服务。 处理:商家需将 checkout url 打开,用户在 StablePay checkout 完成首次钱包授权或支付。 |
| incomplete_expired | 含义:创建订阅后 30 分钟内未完成授权即进入该状态(终态) 特点:不会再自动尝试付款 处理:需要创建新的订阅 注意:此状态的订阅无法重新激活 |
| trialing | 含义:处于免费试用期 特点:不收费,trial_end 指示试用结束时间 转换:试用结束时自动尝试首次付款,成功则变为 active |
| active | 含义:订阅正常运行中 触发:成功支付、免费订阅创建、异步支付成功 特点:客户可以正常使用服务 注意:大多数健康订阅都在此状态 |
| past_due | 含义:续费付款失败 特点:订阅依然有效,处于尝试重试扣款阶段 处理:按重试规则自动尝试再次付款 转换:可能转为 canceled 或保持 past_due |
| canceled | 含义:订阅已被终止 触发:主动取消、付款失败多次 特点:不再生成新的账单 注意:被取消的订阅无法重新激活,需创建新订阅 |
9. 支付方式、钱包、币种和网络
支付方式
| 产品 | MetaMask | Binance Wallet | OKX Wallet | WalletConnect (510+ 钱包) |
|---|---|---|---|---|
| Subscription | ✅ | ✅ | ✅ | ✅ |
币种
仅支持创建 USD 订阅。
区块链网络
| 产品 | Ethereum | Binance Smart Chain | Solana |
|---|---|---|---|
| Subscription | ✅ | ✅ | ✅ |