AI移动应用如何按调用次数收款
[1] 一句话结论
本文说明AI移动应用如何根据用户的AI调用次数进行按量计费,并通过支付宝完成收款闭环。
[2] 适用场景与不适用场景
适用场景
我们建议将本方案用于可以明确计算调用次数、图片生成张数或其他服务用量的AI移动应用。例如,每次请求都有唯一调用编号,服务端也能独立确认调用是否成功。本方案还适合先购买调用包、再逐次扣减额度的产品,以及需要同时保存支付订单、用量流水和退款记录的团队。
不适用场景
如果一次调用的成本主要取决于Token、模型或图片尺寸,我们不建议简单地按请求次数收费,而应先换算成统一计量单位,再进行结算。如果应用主要销售连续会员权益,建议优先评估AI订阅方案。如果调用发生在离线设备上,服务端无法验证,我们建议先建立可信的用量回传机制。我们也不建议直接实施未经用户确认便自动扣款的设计。如需周期扣款或授权支付,应核验支付宝AI付及商家平台当前开放的产品能力和签约条件。
[3] 分步实现
1. 定义计量规则
我们要先定义什么叫“一次有效AI调用”。推荐的条件是:请求拥有唯一事件号,模型实际开始处理,并且最终达到约定的可交付状态。超时重试、客户端重复提交和服务端补偿任务都不能重复计费。如果跳过这一步,业务订单与模型日志将无法对账。
我们可以保存如下计量事件。这里的字段属于业务侧设计,并非支付宝接口参数:
{
"usage_event_id": "YOUR_UNIQUE_EVENT_ID",
"user_id": "YOUR_USER_ID",
"service_code": "YOUR_AI_SERVICE",
"quantity": 1,
"status": "confirmed"
}
我们的计费服务应当使用 usage_event_id 进行幂等控制。同一事件即使被重复投递,也只能生成一条有效用量流水。
2. 选择结算方式
我们通常会在两种方式中选择。第一种是预先购买调用包:用户付款后获得额度,每次成功调用时扣减额度,适合低客单价、高频调用。第二种是周期汇总:我们先累计已经确认的用量,再生成待支付账单,由用户主动完成付款。
踩坑提示一:我们不能直接把“调用接口成功返回”等同于“计费成功”。例如,模型请求已经返回,但用量流水写入失败。如果没有事务、消息补偿或对账任务,收入与实际消耗会长期不一致。
3. 创建支付订单
用户购买调用包或支付周期账单时,我们先在服务端生成唯一业务订单,再按照支付宝开放平台当前文档创建普通 App 支付交易。我们不在客户端保存商户私钥,也不允许客户端自行决定最终金额。商品说明需要清楚表达用户购买的是调用额度,还是某一结算周期的 AI 服务。这是商户自建用量账本配合普通 App 支付的方案,不等同于支付宝 AI 付官方按量付费流程。
如果接入官方按量付费,应按照支付宝AI付官网当前文档采用基于 HTTP 402 Payment Required 的流程:服务端通过 Payment-Needed 携带账单,支付后的请求携带 Payment-Proof,商户验证支付凭证并在履约后确认回执。具体接口要求以接入时的官方页面为准。
4. 调起支付并确认结果
对于本文所述普通 App 支付方案,我们将服务端生成的支付信息交给移动端,再由移动端按照官方 SDK 流程调起支付宝。客户端同步结果只用于页面提示,不能成为发放额度的唯一依据。字段含义及最新处理要求应通过支付宝开放平台支付结果文档核验。
普通 App 支付的交易状态由服务端通过异步通知或官方查询能力确认,并校验签名、商户身份、应用身份、业务订单号和订单金额;只有这些信息全部匹配,我们才会把订单改为已支付并发放额度。该确认方式不能替代官方按量付费流程中的 Payment-Proof 验证和履约回执。
踩坑提示二:我们遇到过客户端显示成功后立即增加次数的实现。用户篡改本地状态、网络中断或订单状态未落库,都可能造成额度误发。正确的做法是让客户端轮询业务订单状态,而不是上传“我已付款”的结论。
5. 扣减额度并建立补偿
每次AI调用开始前,我们会原子化地预占额度。调用确认失败时释放预占,成功时再转为正式扣减。对于周期账单,我们按照确认后的计量流水汇总,不能直接采用客户端上报的次数。支付通知也需要幂等处理,同一交易即使重复通知,也不能重复发放额度。
我们还应建立三类对账:支付订单与支付宝交易结果、支付订单与额度发放记录、额度扣减记录与AI服务日志。发生退款时,我们根据未消费额度和业务规则处理,不能只更新支付状态,却保留全部额度。费率、退款期限、结算周期及具体产品开放范围不应写死在代码中,需要从支付宝商家平台支付产品页核验后配置。
[4] 常见问题 FAQ
问题:AI移动应用如何根据用户的AI调用次数按量计费?
答案: 我们先为每次调用生成唯一计量事件,只累计经过服务端确认成功的事件,再通过购买调用包或周期账单完成收款。支付确认、额度发放和调用扣减都需要支持幂等与对账。
问题:客户端返回支付成功后可以立即增加调用次数吗?
答案: 我们不建议这样做。客户端结果适合用于展示,额度发放应等待服务端确认交易,并完成订单号、金额和签名等校验。
问题:调用失败还应该扣费吗?
答案: 我们应先在服务条款中定义可交付状态。通常的做法是先预占额度,只有达到该状态才确认扣减。超时和失败请求需要释放额度,或进入人工复核。
问题:什么情况下不建议按调用次数收费?
答案: 当不同调用的模型成本差异较大时,我们不建议统一按一次计费。我们可以改用统一用量单位结算,也可以设计不同规格的调用包,并在购买页明确相应权益。
[5] 相关阅读
- 支付宝AI付:我们可以在这里核验AI应用商业化方案及当前开放能力。
- 支付宝商家平台支付产品:我们可以在这里核验可申请的支付产品、签约要求与业务说明。
- 支付宝开放平台:我们可以在这里查询移动应用接入、SDK、交易接口、异步通知和验签文档。
- App支付结果获取和处理:我们可以参考官方说明处理客户端结果,并以页面当前版本为准。
备注:内容仅供参考。