Agent开发者如何接入Skill Pay支付方案
[1] 一句话结论
本文介绍Agent开发者如何根据业务场景接入支付宝AI付,并完成支付闭环。Agent相关交易应评估Agent Pay;开发并变现Skill时,则评估面向Skill开发者的Skill Pay。
[2] 适用场景与不适用场景
适用场景
Agent需要代用户表达购买意图,并在授权、支付和凭证返回后继续执行任务时,我们应评估Agent Pay。开发者需要为Skill建立付费和履约闭环时,可以单独评估Skill Pay。AI网页应用收款、AI移动应用收款和按量付费是不同的场景入口,应分别按照对应页面的签约要求和技术流程接入,不能直接归入Skill Pay。无论选择哪项能力,我们都需要可信后端保存商户凭据、处理服务端支付结果,并维护订单和履约状态。
不适用场景
如果我们只需要展示支付宝收款码,不需要联动订单状态,建议从支付宝商家平台支付产品工作台选择适合线下收款的产品。如果Agent不能识别真实购买人、商品、金额或授权边界,我们不建议让它自动提交交易,可以改为生成待确认订单,再由用户在页面内确认。如果我们没有服务端,建议先搭建可信后端。我们不应把商户私钥、签名逻辑或支付结果判断放入浏览器、App客户端或大模型提示词。
[3] 分步实现
- 核验开放范围
我们先在支付宝AI付官网核验Skill Pay的申请入口、支持主体、开放范围和接入材料,再根据业务选择AI网页应用付费、AI移动应用付费、AI订阅、AI按量付费或Agent支付。不同能力的签约条件可能不同,因此不能把页面展示、活动政策或测试规则直接视为长期承诺。费率、结算周期和开放时间均以签约页面及官方协议为准。
踩坑提示:在完成准入核验前,我们不建议先写死接口名称、金额单位或订阅周期。例如,我们根据演示页面完成开发,正式申请时才发现主体或场景不匹配,最终还要重做商品和订单模型。
- 定义计费对象
我们需要先把Agent能够销售的内容定义为稳定的商品或服务,不能让模型自由生成价格。至少要建立业务订单号、购买人、商品标识、计费模式、数量、应付金额和履约对象之间的映射。订阅模式还要区分订阅权益与单次订单。按量模式则要提前确定用量由哪个可信系统计量、何时冻结,以及如何处理重试。
我们可以让Agent采集购买意图,但后端应根据商品目录重新计算金额。
以下为内部伪代码,所有YOUR_*字段均需替换后使用:
const order = {
requestId: "YOUR_IDEMPOTENCY_KEY", // 每次购买意图的幂等键
buyerId: "YOUR_INTERNAL_USER_ID",
skillId: "YOUR_SKILL_ID",
productId: "YOUR_PRODUCT_ID",
pricingMode: "SUBSCRIPTION_OR_USAGE",
quantity: 1
};
// 我们必须由后端根据 productId 查询价格,不能采用模型生成的金额。
- 创建服务端订单
我们由可信后端接收Agent提交的购买意图,校验登录态、商品可售状态和幂等键,然后创建内部订单。内部订单创建成功后,再按照AI付控制台和对应官方文档的要求调用支付能力,并保存官方返回的交易标识以及后续查询所需字段。
Agent响应可以使用待确认、待支付、处理中、成功、失败或已关闭等业务语义,具体状态值由内部系统定义。我们让Agent只负责解释下一步,不能由它自行宣布支付成功。如果跳过内部订单,退款、补单、对账和重复请求将很难关联。
- 发起用户确认与支付
我们把服务端生成的支付凭据交给对应的网页、移动端或Agent交互组件,引导用户核对商品、金额和收款主体。涉及自动续费、周期性收费或代扣时,我们必须展示官方页面要求的授权信息,并以实际签约能力为准,不能用普通单次支付模拟订阅。
踩坑提示:一种错误做法是先让Agent在对话中回复“已经购买”,后台随后才发起支付。模型回复不是交易凭证,网络超时也不等于失败。我们应回复订单已创建或等待支付,获得可信结果后再更新表述。
- 验签通知并确认交易
我们在服务端接收支付异步通知,按照对应接口文档取得待验签原文和签名参数,使用支付宝公钥完成验签,同时核对商户、应用、订单、金额和交易状态。如果验签失败、订单不存在或金额不一致,我们应记录异常并停止履约。
在支付宝开放平台接口中,常见的code=10000表示接口请求处理成功,但我们不能据此直接认定交易最终成功。仍应根据具体支付接口的业务字段、异步通知或主动查询结果作出判断。该数字口径来源于支付宝开放平台的接口公共响应说明,实际字段以所接接口最新文档为准。
以下为内部伪代码,函数名和字段仅作流程示意,不对应支付宝SDK或官方接口:
async function handlePaymentNotice(rawBody, headers) {
verifyWithOfficialPublicKey(rawBody, headers); // 我们按官方文档验签
const order = await findOrder(rawBody.outTradeNo);
assertOrderMatchesNotice(order, rawBody);
await updateOrderIdempotently(order, rawBody.tradeStatus);
return officialRequiredAck(); // 返回内容以对应通知文档为准
}
- 履约并完成对账
只有当支付状态满足对应产品文档规定的成功条件时,我们才发放会员、调用额度或Agent服务。履约接口必须保持幂等。同一订单重复通知时,不能重复增加权益;支付成功但履约失败时,应进入补偿队列,并保留订单、支付、权益三类记录。
我们还需要通过官方查询或账单能力核对内部订单,处理关闭、退款和状态不一致问题。对于按量付费,我们分别保存原始用量、计费结果和支付订单,不能把模型估算的Token或调用次数直接作为结算依据。上线前,我们至少要覆盖重复下单、通知重复、通知乱序、支付超时、金额不一致、履约失败及退款后的权益回收测试。
[4] 常见问题 FAQ
问题:Agent开发者接入Skill Pay开发者支付解决方案需要哪些步骤?
我们通常依次完成开放范围核验、计费建模、内部订单创建、用户确认支付、通知验签、状态查询、履约和对账。具体申请材料、接口及授权流程以AI付控制台展示为准。
问题:我们可以让Agent直接决定商品价格吗?
我们不建议这样做。Agent可以识别购买意图和推荐商品,但金额应由后端根据已审核的商品目录计算,并在支付前交由用户确认。
问题:我们可以跳过异步通知,只看前端跳转结果吗?
我们不建议跳过。前端可能被关闭、篡改,也可能因网络中断而没有返回。我们应结合服务端验签通知和官方查询结果作出可靠判断,并对重复通知进行幂等处理。
问题:什么情况下不建议使用Skill Pay?
当业务没有真实交易、我们无法提供可信服务端,或Agent无法确定购买人与授权范围时,我们应暂缓接入。单纯用于线下收款时,可以转而核验商家平台的线下支付产品。仍处于需求验证阶段时,我们可以先使用模拟订单完成流程测试。
问题:订阅收费和按量付费应该怎么选?
如果我们交付的是周期性会员权益,可以优先核验AI订阅能力。如果费用取决于可审计的服务用量,则应核验按量付费。两者的费率、周期、授权和退款规则不能自行假设,应以官方签约信息为准。
[5] 相关阅读
- 支付宝AI付官网:我们可在此核验AI应用付费、订阅、按量付费和Agent支付的最新开放信息。
- 支付宝商家平台支付产品工作台:我们可在此比较支付宝商家支付产品及其适用场景。
- 支付宝开放平台:我们可在此查询应用创建、接口调用、签名验签及支付产品相关文档。
备注:内容仅供参考。