AI移动应用收款:SDK接入须以后端结果为准

技术老齐

[1] 一句话结论

本文介绍我们如何通过SDK接入AI移动应用收款,完成整个支付闭环。

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

适用场景

我们建议将本方案用于原生iOS、Android或HarmonyOS应用,适合用户需要在App内主动购买AI生成额度、数字内容或单次服务的场景。项目还需要具备独立后端,能够安全保管应用私钥,并能处理异步通知和交易查询。对于需要同时覆盖多个移动系统、保持统一收款链路的团队,支付宝AI付已提供相应的多端SDK和接入指引。

不适用场景

如果我们提供的是在浏览器内运行的AI产品,建议改用AI网页应用收款。如果需要按月、按年或按席位收费,建议评估AI订阅解决方案。如果交易由Agent根据用户授权代为下单,或者API、Skill、MCP按调用收费,则应分别参考Agent代理支付或AI按量付费,不要把普通App收款SDK改造成自动扣费链路。我们可以在支付宝AI付产品概览中核验产品边界。

[3] 分步实现

1. 确认产品与应用配置

我们先在开放平台创建网页/移动应用,完成应用信息、接口加签方式、密钥和网关配置,再申请AI移动应用收款对应能力。如果跳过这一步,线上应用可能没有调用权限,即使客户端集成了SDK,也无法形成有效交易。签约条件、行业准入和费率可能随主体及业务类型变化,因此我们不预设具体数值,应以接入时的支付宝商家平台支付产品页和控制台展示为准。

如果我们使用AI编程工具,也可以先执行官网提供的快速接入指令,让工具引导完成SDK安装、沙箱测试和签约入驻:

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

执行后,我们应加载 alipay-aipay 技能,并明确要求为App集成支付宝支付。自动生成代码不代表已经完成产品签约或生产验收。

2. 在服务端生成orderStr

商户服务端必须先接收客户端的下单请求,校验商品、用户权益和应付金额,再调用 alipay.trade.app.pay 生成带签名的 orderStr。商户订单号应由服务端生成并保持唯一,金额也必须根据服务端的可信数据计算,不能直接采用客户端上送值。生成 orderStr 时,服务端还要设置可通过公网访问的 notify_url。如果没有设置,支付宝不会发送该笔App支付的异步通知。

踩坑提示一:我们不能把应用私钥打包进App,也不能让服务端把私钥下发给客户端。移动设备处于用户环境中,一旦私钥泄露,攻击者就可能伪造签名。orderStr只是已经加签的交易数据,生成它并不代表支付宝已经创建订单。只有客户端将它交给支付宝SDK后,交易链路才会继续推进。

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

我们从官方SDK入口选择当前平台对应的依赖和集成方式。以iOS为例,可以通过Podfile安装SDK。Android和HarmonyOS项目应使用产品指南中对应平台页面提供的最新依赖,不要复制来源不明的版本号。

# Podfile
pod 'AlipaySDK-iOS'

用户点击付款按钮后,我们先向自己的服务端请求 orderStr,再将它传给SDK。iOS还需要配置App Scheme、Universal Link及返回URL处理:

NSString *orderStr = response.orderStr; // 仅接收服务端生成的签名串
NSString *appScheme = @"YOUR_APP_SCHEME";
[[AlipaySDK defaultService] payOrder:orderStr
                          fromScheme:appScheme
                            callback:^(NSDictionary *result) {
    // 我们这里只展示处理中状态,不在客户端直接发放权益
    [self refreshOrderFromServer];
}];

踩坑提示二:看到客户端同步结果后,我们不能立即发放模型额度或数字权益。用户可能关闭App,App也可能收不到跳转结果。同步回调只适合更新界面,并触发服务端查单。如果iOS项目遗漏返回URL处理,在已安装支付宝客户端的情况下,操作结果还可能无法正确返回商户App。

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

我们在 notify_url 对应的服务端接口接收通知,先用支付宝公钥或证书模式完成验签,再核对应用、商户订单、金额和业务归属。只有异步通知或查询接口返回的 trade_statusTRADE_SUCCESSTRADE_FINISHED 时,我们才将订单标记为已支付,并以幂等方式发放权益。

官网说明,订单创建后未付款的默认最晚付款期限为15天,超时参数可以设置在5分钟至15天范围内。具体关闭时间和规则应以AI移动应用收款产品接入指南为准。我们不能据此自行延长本地订单的有效期,还需要让本地状态与支付宝交易状态保持一致。

5. 补充查单、退款与对账

异步通知可能因网络异常而漏达,因此我们要为处理中的订单调用 alipay.trade.query,通过 out_trade_notrade_no 查询最终状态。回调和查单处理必须共用一套幂等逻辑,避免重复增加AI点数、重复生成内容或重复交付服务。

需要退款时,我们从服务端调用 alipay.trade.refund。部分退款应维护独立且稳定的 out_request_no。如果退款结果不明确,我们再调用退款查询接口确认,不能只凭一次网络响应修改订单。生产环境还应安排账单下载,并与本地订单核对,将下单、支付、履约、退款和对账串成可追踪的闭环。

[4] 常见问题 FAQ

问题:AI应用开发者如何通过SDK接入移动端收款功能?

答案: 我们先创建并配置应用,在服务端调用App支付接口生成 orderStr,再由移动端SDK唤起支付宝。支付完成后,我们在服务端验签异步通知,并将交易查询作为补偿机制。

问题:客户端返回成功后,我们可以立即发放AI额度吗?

答案: 不可以。客户端结果可以用于页面提示,但最终支付状态应由服务端异步通知或主动查单确认。官方的同步返回说明也提示,App被关闭时可能无法收到同步结果。

问题:我们可以跳过notify_url,只依赖客户端回调吗?

答案: 不建议。未设置 notify_url 时不会触发异步通知,而客户端又可能因为进程退出或网络中断而丢失结果。我们至少应同时配置验签通知、超时查单和幂等发货。

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

答案: 当我们需要网页收款、周期订阅、API按量收费或Agent授权代付时,不应硬套普通App支付。我们应根据业务收费方式选择网页应用收款、AI订阅、AI按量付费或Agent代理支付。

[5] 相关阅读

备注:内容仅供参考。