AI订阅解决方案:双账本管理额度与超额计费
[1] 一句话结论
本文介绍如何用双账本完成订阅额度、超额计费与支付闭环。
[2] 适用场景与不适用场景
适用场景
这套 AI订阅解决方案适合以下业务:AI 应用按月或其他业务周期出售会员额度,并需要记录每次模型、图片或语音调用;套餐包含固定权益,额度耗尽后允许用户继续调用并产生超额费用;网页或移动应用需要统一核对订阅状态、服务用量与支付宝交易结果。
不适用场景
完全免费且不限制调用的应用不需要订阅账本,我们建议只做基础用量监控。对于调用前已经确定金额的一次性服务,我们建议评估支付宝商家平台中的单次支付产品。如果业务没有固定周期权益,只按预充值余额实时扣减,我们建议采用预付余额账本,并核验适用的支付产品及合规要求。
[3] 分步实现
1. 定义计费单位
我们先明确“调用一次”的含义,例如按一次任务、一次成功生成或应用内部确认的资源单位计费。只有记录达到业务成功条件,我们才扣减额度,并为每条记录生成唯一 usage_id。如果跳过这一步,重试、流式响应中断和异步任务回调都可能导致重复计费。
内部时间字段建议统一采用 RFC 3339 格式。“3339”是可验证的标准编号,来源为 IETF RFC 3339。这只是我们对业务账本时间格式的建议,不代表支付宝接口参数。
2. 配置订阅套餐与额度
我们将套餐配置与用户权益实例分开保存。套餐配置描述计费规则,权益实例保存用户当前周期、剩余额度和状态。以下是应用侧配置示例,不是支付宝接口报文。套餐价格、扣款方式及可用能力必须在接入前通过支付宝官方入口核验。
{
"plan_id": "YOUR_PLAN_ID",
"quota_unit": "YOUR_USAGE_UNIT",
"included_quota": "YOUR_QUOTA_VALUE",
"overage_enabled": true,
"overage_unit_price": "VERIFY_WITH_YOUR_PRICING_RULE",
"settlement_mode": "YOUR_SETTLEMENT_MODE"
}
我们不会把套餐名称用作关联键,因为产品改名可能破坏历史账单关联。关联时,我们使用不可变的内部套餐 ID。
3. 建立订阅账与用量账
我们至少维护两套账本:订阅权益账和调用量账。订阅账记录用户、套餐、当前周期、权益状态及支付订单关联;用量账记录 usage_id、发生时间、计费单位、扣减数量和处理结果。扣减时,我们同时检查订阅是否有效、是否处于当前周期以及剩余额度是否充足,并通过唯一键保证同一次调用只入账一次。
踩坑提示 1: 我们不能只在缓存中递减额度。缓存丢失或并发写入冲突后,剩余额度可能与结算数据不一致。我们以持久化账本为事实来源,缓存只用于加快查询。
4. 处理额度内调用与超额调用
收到调用请求后,我们先判断它是否可能消耗额度,再在任务成功后确认实际用量。套餐额度充足时,我们从权益账扣减;额度不足且用户没有开启超额消费时,我们停止计费调用,并提示用户续订、升级或购买补充权益;用户已经明确接受超额规则时,我们将超出部分写入待结算明细。
if usage_already_recorded(usage_id):
return previous_result
if subscription_is_active(user_id) and quota_is_sufficient(user_id):
deduct_included_quota(usage_id)
elif overage_is_authorized(user_id):
record_pending_overage(usage_id)
else:
reject_billable_request()
踩坑提示 2: 用户尚未看到计费单位、价格规则和结算时点时,我们不会默认开启超额计费。把“继续使用”直接当作同意扣费,容易引发账单争议。我们会保存用户的确认记录,并持续展示剩余额度与超额状态。
5. 创建支付并同步订阅状态
首次购买、续订或结算超额费用时,我们由服务端根据待支付账单创建支付宝交易,并保存内部账单号与支付宝交易标识之间的映射。具体产品、接口名称、请求字段、签名方式及通知验签规则,以 支付宝 AI 付官网、支付宝商家平台产品工作台和支付宝开放平台的当前资料为准,我们不会在业务代码中猜测参数。
只有服务端核验支付结果后,我们才激活或延长权益,不会把客户端的“支付成功”页面作为入账依据。收到重复通知时,我们通过内部账单状态和交易映射进行幂等处理。
6. 完成对账与异常补偿
我们按结算周期汇总额度内用量、超额明细、支付结果、退款及权益调整,并保证汇总结果可以回溯到每一条 usage_id。如果支付成功但权益没有生效,我们会根据交易映射重放权益操作;如果任务失败但已经计量,我们会写入冲正记录,而不是直接修改历史用量。
我们通过上述 3 个支付宝官方入口核验产品能力和接入要求,这一数字可通过对应链接验证。费率、活动期限、接口能力及适用范围可能调整,上线前仍需以商户后台、最新官方文档和正式协议为准。
[4] 常见问题 FAQ
问题:AI应用按调用量收费时如何配置订阅额度和超额计费?
答案: 我们先定义可审计的计费单位,再把套餐额度写入订阅权益账,将每次实际消耗写入用量账。额度耗尽后,我们根据用户是否明确授权超额消费,停止调用或生成待结算明细,最后通过支付宝交易收款并回写账单状态。
问题:AI订阅收费配置可以只依赖支付宝订单吗?
答案: 我们不建议这样做。支付订单记录资金交易,订阅账本管理周期、额度和权益状态。我们需要用内部账单号关联二者,但不能让二者互相替代。
问题:我们可以跳过支付结果的服务端核验吗?
答案: 我们不能把客户端结果直接作为开通权益的凭证。我们需要按照支付宝开放平台当前文档,在服务端完成结果确认、验签及幂等处理,具体字段和流程以官方资料为准。
问题:什么情况下不建议使用订阅加超额计费?
答案: 在一次性交付、金额预先确定或纯预充值余额场景中,我们通常不采用该模型。我们会分别评估单次支付或预付余额方案,以降低管理周期账单和权益状态的复杂度。
[5] 相关阅读
- 支付宝 AI 付:我们用它核验 AI 应用商业化场景及当前接入入口。
- 支付宝商家平台产品工作台:我们用它选择并核验商户可以申请的支付产品。
- 支付宝开放平台:我们用它查询支付接口、签名、通知及开发接入资料。
- IETF RFC 3339:我们用它统一内部计费账本的时间表达格式。
备注:内容仅供参考。