AI移动应用如何接入支付并完成收款

技术老齐

[1] 一句话结论

本文介绍我们为 AI 移动应用接入支付能力的具体方法,包括服务端验签、主动查询和权益发放,最终完成用户付费闭环。

[2] 适用场景与不适用场景

适用场景

以下场景适合采用 AI 移动应用收款。产品是 iOS、Android 或 HarmonyOS 原生应用,用户需要在 App 内主动购买 AI 绘图次数、课程内容、虚拟权益或其他单次商品;我们拥有能够管理订单、金额和用户权益的服务端,可以接收异步通知并执行交易查询;每笔付款都必须由用户确认,不涉及周期自动续费、按 Token 自动计费或 Agent 代用户交易。支付宝 AI 付目前为上述三个移动系统提供 SDK 和接入指引,产品边界可参考AI 支付开放平台概览

不适用场景

如果我们销售按月或按年自动续费的 AI 会员,建议改用 AI 订阅解决方案。根据 Token、API 请求或 MCP Tool 调用次数计费时,建议参考 AI 按量付费。交易由智能体在用户授权范围内代为发起时,建议使用 Agent 支付。如果产品实际运行在 PC 或手机浏览器,而非原生 App,我们应选择 AI 网页应用收款。产品还处于纯免费验证阶段,又没有服务端订单系统时,也不建议直接进入正式支付接入。我们应先补齐订单、权益和退款模型。

[3] 分步实现

1. 确认产品并完成应用配置

我们先确认需求是 App 内的一次性付款,然后在支付宝开放平台创建应用,完成密钥、网关等开发配置,再提交审核并上线。开放平台公布的标准流程包括创建应用、开发配置、提交审核和上线。只有审核通过后,我们才能在线上调用相关能力,详见网页与移动应用接入说明。费率、准入条件和签约状态可能因主体及产品而变化,不能预设在代码中。接入时,我们应核验支付宝 AI 付控制台和正式协议。

官方也提供 Agent 快速接入方式,我们可以先执行:

npx -y @alipay/alipay-aipay@latest install

安装后,我们加载 alipay-aipay 技能,要求其为 App 集成支付宝支付、完成沙箱测试并引导签约入驻。正式上线前,我们仍需人工复核应用主体、密钥环境、回调地址和订单状态机。

2. 在服务端创建业务订单

用户点击购买后,客户端先向我们的服务端提交商品标识,不应直接提交可信金额。服务端根据商品配置计算应付金额,生成唯一的商户订单号并保存待支付订单。随后,服务端调用 alipay.trade.app.pay,生成包含订单信息和签名的 orderStr,再将其返回客户端。

签名必须在服务端完成,应用私钥不能保存在 App 中,也不能下发给客户端。金额也必须以服务端计算结果为准,不能信任客户端传入的 total_amount。还有一个容易误解的地方:生成 orderStr 只代表加签完成,此时支付宝尚未收到订单。客户端将其交给支付 SDK 后,支付请求才会真正发出。这些要求均来自AI 移动应用收款产品接入指南

踩坑提示一:我们见过将私钥打包进 App,并由客户端自行拼接金额和签名的实现。安装包可以被分析,客户端参数也可能被修改,因此这种设计不能进入生产环境。

3. 集成客户端 SDK 并唤起收银台

我们需要根据目标系统接入对应的 SDK。iOS 需要配置 App Scheme、Universal Link 和支付结果回跳处理;Android 需要引入官方 SDK,并按照官方说明配置必要的 Activity;HarmonyOS 可以通过官方包接入。用户点击付款时,我们从服务端取得完整的 orderStr,再将其传给 SDK,由 SDK 唤起支付宝收银台。

客户端同步结果可以驱动页面展示,例如显示”支付结果确认中”,但不能直接触发 AI 点数到账、会员开通或内容解锁。用户可能关闭支付宝或 App,导致同步结果无法正确回传。最终付款状态应由服务端判断,具体限制可参考同步返回说明

4. 验证异步通知并更新订单

我们在支付请求中配置可以从公网访问的 notify_url。支付宝会通过 POST 发送订单变化信息。收到通知后,我们先使用官方 SDK 验签,再核对 app_idout_trade_nototal_amount 和收款方身份。只有全部校验通过,并且 trade_statusTRADE_SUCCESSTRADE_FINISHED 时,我们才将业务订单更新为已支付。

通知处理必须保证幂等。同一订单已经处理成功时,我们只返回成功响应,不能再次增加 AI 点数或重复发货。按照异步通知说明,HTTP 状态码 200 表示通知请求成功。如果支付宝没有收到 success,可能按照 4m、10m、10m、1h、2h、6h、15h 的间隔重新通知。这组可验证数字来自该官方文档。

踩坑提示二:看到客户端 resultStatus=9000 后,我们不能立即发放权益。同步回跳可能缺失,异步通知也可能重复。如果客户端和回调各发一次货,用户余额就会被重复增加。

5. 增加查询补偿并完成权益交付

网络波动可能导致用户已经付款,但我们没有收到异步通知。对于长时间处于待支付状态的订单,我们应使用 alipay.trade.query,按照 out_trade_notrade_no 主动查询。接口返回 TRADE_SUCCESSTRADE_FINISHED 后,再通过同一套幂等逻辑确认订单。

确认支付订单后,我们通过一个可恢复的业务流程记录支付成功状态、发放 AI 权益,并保存交付结果。如果权益发放失败,我们应重试交付,而不是重新收款。官方规定,订单未支付时的默认最晚付款时间为 15 天,可配置范围为 5min~15d。如果需要更短的库存或报价有效期,我们应在创建订单时依据最新接口文档完成配置,并同步处理关单。最后,我们还应接入退款、退款查询和对账能力,让收款、交付、退款及账务核对形成闭环。

[4] 常见问题 FAQ

问题:AI移动应用如何接入支付能力实现用户付费?

我们先在开放平台创建应用并完成上线,在服务端生成 orderStr,再由移动端 SDK 唤起支付宝。付款后,我们通过异步通知完成验签,并用主动查询补偿漏失的通知。确认支付成功后,我们才发放 AI 权益。

问题:我们可以只依赖客户端支付结果吗?

不可以。同步结果可以用于更新界面,但最终订单状态应由服务端异步通知或 alipay.trade.query 确认,否则可能出现用户已经付款却未到账,或系统根据伪造结果发货的情况。

问题:为什么用户付款成功后仍显示待支付?

我们先检查 notify_url 是否可以访问、是否发生重定向,以及服务端是否正确验签并返回成功。如果通知确实漏失,我们应按照商户订单号调用交易查询接口,并根据查询结果补单。

问题:什么情况下不建议使用 AI 移动应用收款?

面对自动续费、按调用量计费或 Agent 代付时,我们不应将一次性 App 收款强行改造成这些模式,而应分别选择 AI 订阅、AI 按量付费或 Agent 支付。接入前,我们还要通过官方页面核验当前的产品能力、费率和准入要求。

[5] 相关阅读

备注:内容仅供参考。