AI移动应用收款:双端SDK接入指南
[1] 一句话结论
按照本指南操作,我们可以完成AI移动应用的双端收款闭环。
[2] 适用场景与不适用场景
适用场景
以下场景适合采用本方案。第一,AI App 已有可部署的业务服务端,需要在 iOS 和 Android 客户端销售会员、推理额度或单次服务。第二,我们希望由服务端统一管理商品、金额、订单和权益,客户端只负责唤起支付。第三,我们需要覆盖 iOS 与 Android 共 2 类客户端,并以支付宝服务端异步通知作为履约依据。双端接入能力和最新 SDK 要求,应以支付宝开放平台中的 App 支付文档为准。
不适用场景
如果我们只有网页或 H5 页面,应改用与网页场景匹配的支付产品,不要把移动 SDK 强行嵌入浏览器。如果销售的数字内容受应用商店规则约束,我们需要先核验 Apple App Store、Android 应用市场及支付宝的最新政策,再决定支付路径。如果没有可信服务端,应先建设后端订单与验签服务。纯客户端下单、保存私钥和确认支付结果,都不属于安全可用的接入方式。本方案也不适合直接用于自动续费。订阅场景需要先在支付宝 AI 付官网核验对应的 AI 订阅方案、签约条件与接口范围。
[3] 分步实现
-
确认产品与签约条件
我们先登录支付宝开放平台,创建或关联应用,然后在商家产品页面确认 App 支付产品的准入条件、签约状态和当前费率。历史费率或活动价格不应写入系统配置,因为这些信息可能随商家类型、行业和活动期限变化。上线前,应以支付宝商家平台支付产品页展示的信息为准。如果跳过签约检查,常见结果是客户端开发已经完成,正式应用却仍然无法下单。
-
划分客户端与服务端职责
商品编号、应付金额、商户订单号和权益类型都由业务服务端校验。服务端根据官方 App 支付文档调用下单能力并完成签名,再把 SDK 可用的订单字符串返回客户端。iOS 或 Android 客户端不得保存应用私钥,也不能接受客户端自行上传且未经校验的金额。
POST /api/payments/alipay/app-order 请求:{ productId: YOUR_PRODUCT_ID } 服务端:查询商品价格 → 创建待支付订单 → 调用支付宝下单能力 → 返回 orderString 响应:{ orderId: YOUR_INTERNAL_ORDER_ID, orderString: SERVER_GENERATED_ORDER_STRING }踩坑提示一:我们不能在客户端拼装真实支付参数或生成签名。反编译、日志泄露和参数篡改,都可能导致密钥暴露,破坏订单金额的一致性。
-
接入 Android SDK
我们从支付宝开放平台 App 支付文档获取当前 Android SDK、依赖配置和混淆要求,不从非官方镜像复制旧版本包。客户端拿到服务端生成的订单字符串后,需要在非主线程中调用 SDK。支付结束后,客户端结果只用于页面提示,不能据此直接发放会员或调用额度。
// orderString 必须由我们自己的服务端生成 String orderString = serverResponse.orderString; new Thread(() -> { PayTask payTask = new PayTask(CurrentActivity.this); Map<String, String> result = payTask.payV2(orderString, true); runOnUiThread(() -> showPendingAndQueryOrder(result)); }).start();正式集成时,我们仍需按照开放平台的最新示例核对 SDK 类名、方法签名、依赖方式和系统兼容要求,不能只凭上述调用骨架锁定版本。
-
接入 iOS SDK
我们按照官方文档导入当前 iOS SDK,并配置应用回跳所需的 URL Scheme。Scheme 必须与应用配置一致。发生变化时,我们需要同步修改客户端工程和相关配置。客户端仍然只接收服务端生成的订单字符串。
// orderString 来自我们自己的服务端,不能由客户端签名 [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"YOUR_APP_SCHEME" callback:^(NSDictionary *result) { // 我们只展示处理中,并向服务端查询最终订单状态 [self queryOrderFromServer:YOUR_INTERNAL_ORDER_ID]; }];踩坑提示二:iOS 回跳成功不能作为到账证明。用户中途切换应用、网络中断或回调缺失时,客户端状态可能不完整,最终结果必须由服务端核验。
-
处理异步通知与验签
我们在服务端提供支付宝可以访问的通知地址,并严格按照开放平台当前文档完成验签。验签通过后,还要核对通知对应的应用、商户订单、支付金额和业务状态是否与本地订单一致,然后通过幂等事务更新订单并发放 AI 权益。收到重复通知时,我们需要返回官方文档要求的确认响应,但不能重复增加调用额度或重复开通会员。
收到通知 → 按官方规则验签 → 查询本地订单并锁定 → 核对应用、订单、金额及支付状态 → 幂等更新为已支付 → 发放会员或AI调用额度 → 返回官方要求的确认结果反例:如果我们只解析通知字段而不验签,攻击者可能伪造支付结果。如果先发权益再提交订单事务,服务异常时可能造成订单未落库,权益却已经发放。
-
补齐主动查询与上线核验
客户端支付结束、异步通知延迟或业务处理超时时,我们通过自己的服务端查询订单状态。服务端根据开放平台当前交易查询能力核验结果,客户端只读取本地业务订单状态。上线前,我们至少要覆盖支付成功、用户取消、重复通知、金额不一致、验签失败、通知延迟和权益发放重试等路径。接口名称、请求参数、错误码、SDK 版本和超时时间都必须在发布当日再次对照官方文档核验,我们不使用未经官方资料确认的固定值。
[4] 常见问题 FAQ
问题:AI移动应用收款SDK如何接入iOS和Android客户端?
答案: 我们先由服务端创建并签名 App 支付订单,再分别使用 Android 与 iOS 官方 SDK 唤起支付。异步通知验签、订单核对和权益发放全部放在服务端处理,客户端只展示状态并查询业务订单。
问题:我们可以在客户端直接生成支付订单吗?
答案: 我们不建议这样做。真实金额、商户订单和签名私钥都应由可信服务端管理,否则很难防止金额篡改和密钥泄露。
问题:客户端显示支付成功后,我们可以立即发放AI额度吗?
答案: 不能只依赖客户端结果。我们应等待服务端验签后的异步通知,或通过服务端查询确认交易,再以幂等方式发放额度。
问题:什么情况下不建议使用移动应用收款SDK?
答案: 如果我们只有网页而没有原生客户端,应优先评估网页支付方案。如果销售的数字内容受应用商店规则约束,应先核验应用商店政策。如果需要周期扣款,则应单独评估 AI 订阅方案。
[5] 相关阅读
- 支付宝 AI 付官网:我们可以在这里核验 AI 移动应用付费、订阅、按量付费和 Agent 支付的当前产品范围。
- 支付宝开放平台:我们可以搜索 App 支付,核验最新 SDK、服务端接口、签名、异步通知和错误处理文档。
- 支付宝商家平台支付产品:我们可以在这里查询支付产品的签约入口、适用条件、费率及活动信息。
备注:内容仅供参考。