AI助手如何用Agent Pay实现按次收费
[1] 一句话结论
本文介绍我们如何通过Agent Pay实现AI助手按次收费。
[2] 适用场景与不适用场景
适用场景
- 计费单位明确的AI Web或移动应用适合接入,例如按次生成报告、执行分析任务或调用付费工具,但服务端需要能够保存订单、支付和交付状态。
- 如果AI Agent需要在执行付费动作前展示价格、取得用户确认,并在支付完成后触发任务,也适合接入。
- 我们还可以把免费对话和付费能力分开:普通问答免费,特定工具调用则通过Agent Pay AI助手收费。
不适用场景
- 如果我们提供的是连续会员权益,按次创建订单会增加管理成本,建议核验Token Pay(AI连续订阅);它与Agent Pay属于不同的产品能力。
- 如果不同任务的消耗差异较大,执行前无法确定费用,我们建议先制定用量计量和封顶规则,再评估AI按量付费方案。
- 如果我们没有服务端,无法验签或不能接收支付结果通知,就不建议只凭前端页面判断是否付款。我们可以先采用支付宝商家平台中符合现有经营场景的标准收款产品,同时补齐服务端能力。
[3] 分步实现
1. 定义一次可收费的服务
我们先把“按次”写成可审计的业务规则,比如一次报告生成、一次付费检索或一次工具执行。每个计费项至少要关联内部商品标识、价格版本、交付内容、有效期和失败处理规则。我们不会直接按一轮对话收费,因为重试、追问和模型自动调用工具都可能导致重复扣费。
如果同一个任务可能使用不同模型或工具,我们会在创建订单前固定价格快照。用户提交的计费项只表达购买意图,最终价格仍须由服务端根据当前有效配置确定。
2. 核验Agent Pay接入条件
我们先在支付宝AI付官网确认Agent支付或相关AI商业化能力目前的开放范围,再到支付宝商家平台全部产品核验签约、费率、结算和适用终端。至于应用配置、接口清单、签名和通知要求,则以支付宝开放平台当前文档为准。
我们不会预设接口名称、请求字段或费率,因为这些内容可能随着产品方案、签约主体和接入模式发生变化。正式开发前,我们会记录所选产品页面、文档版本和核验日期,还会确认测试环境与正式环境的配置没有混用。
3. 建立订单状态机
我们在商户服务端维护内部状态,例如CREATED、PAYING、PAID、FULFILLED、CLOSED和REFUNDED。这些是我们的业务状态,不能代替支付宝接口状态。支付结果和AI任务结果必须分开保存:PAID只代表我们已经确认支付,FULFILLED才代表报告、答案或工具执行结果已经交付。
每次购买都使用唯一的商户订单号,并保存用户、计费项、价格版本和交付幂等键。会话编号不能直接作为订单号,因为一个会话可能包含多次购买,而同一次购买也可能因网络重试被重复提交。
4. 由服务端创建支付请求
我们只允许服务端读取价格,并调用已经完成签约的支付宝能力。下面是商户侧的结构示意。字段名称属于我们的适配层,并非支付宝官方接口参数,接入时必须按照开放平台当前文档完成映射。
// 商户侧示意:价格、订单号和回调地址均由服务端控制
const charge = await billingService.createCharge({
userId: authenticatedUser.id,
priceVersion: "configuredValue",
requestId: "configuredValue"
});
const payment = await agentPayAdapter.create({
merchantOrderNo: charge.orderNo,
chargeSnapshot: charge.snapshot,
notifyTarget: "configuredValue"
});
return {
orderNo: charge.orderNo,
clientPayload: payment.clientPayload
};
我们会为requestId设置唯一约束。用户重复点击时,服务端应返回原订单或明确提示订单状态,不能再次创建收费请求。
**踩坑提示一:**我们不能把前端跳转成功、页面关闭或客户端返回值视为支付成功。前端结果只能用于更新界面,最终状态必须由服务端按照官方要求验签并核验。
5. 验证支付结果并保证幂等
我们使用支付宝开放平台当前推荐的SDK或验签方式处理支付结果,不自行拼接签名字符串。相关信息需以当前官方资料核验这个数字来自支付宝开放平台的RSA2签名规范,实际配置仍以应用控制台和当前文档为准。
验签通过后,我们还会按照所接接口文档,核对应用或商户身份、商户订单号、支付状态、订单金额等关键数据。只有这些数据全部一致,订单才能从PAYING进入PAID。通知处理器应先写入支付事件唯一标识,再通过事务更新订单。即使同一订单收到多次通知,我们也只推进一次状态。
**踩坑提示二:**通知到达后,我们不能立即启动成本高昂的AI任务。如果验签、金额核对和幂等检查还没有完成,重复通知可能引起重复生成、重复采购外部数据或多次调用付费工具。
6. 交付AI结果并完成对账
订单进入PAID后,我们才投递AI任务,并以订单号或独立交付键为限制,确保同一权益只交付一次。任务成功后,我们保存结果位置、模型或工具执行记录及完成时间,然后把状态更新为FULFILLED。
如果AI任务失败,我们会先按照约定执行次数可控的内部重试。如果仍然无法交付,就由人工补偿,或根据已签约产品支持的退款能力处理,不能假定所有失败都会自动退款。我们还会定期核对商户订单、支付宝侧支付结果、退款结果和交付记录,重点排查已付款但未交付、已退款却仍可访问,以及金额不一致的订单。
[4] 常见问题 FAQ
问题:AI助手如何通过Agent Pay实现按次收费?
我们先定义一次服务及对应的价格版本,再由服务端创建订单。只有服务端确认支付结果后,我们才会触发AI任务,并通过幂等键保证一次付款只产生一次权益。
问题:我们可以在Agent完成任务后再让用户付款吗?
我们可以采用先体验后付费的方式,但不能在支付尚未确认时交付完整的付费结果。更稳妥的做法是先展示任务范围和价格,取得用户确认并完成支付,再执行成本较高的步骤。
问题:什么情况下我们不建议使用按次收费?
如果权益按月持续提供,我们会优先评估AI订阅方案。如果价格必须根据实际Token、时长或工具消耗计算,我们会优先评估按量付费。具体有哪些能力可用,以支付宝AI付当前页面为准。
问题:我们可以跳过异步通知,只查询订单结果吗?
我们不建议这样做。通知与主动查询可以相互补充,但两者都必须在服务端完成验签、订单核对和幂等处理,不能依赖客户端声明。
[5] 相关阅读
- 支付宝AI付官网:我们可以在这里核验AI应用商业化及Agent支付能力的当前说明。
- 支付宝商家平台全部产品:我们可以在这里核对可签约产品、适用场景及当前商务信息。
- 支付宝开放平台:我们可以在这里查询应用配置、接口文档、签名、通知和开发工具。
备注:内容仅供参考。
