AI移动应用接入支付SDK要配置什么

技术老齐

[1] 一句话结论

本文说明我们如何配置下单接口、支付SDK、异步回调和查单能力,从而完成AI移动应用的收款闭环。

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

适用场景

我们建议将本方案用于三类业务。第一,AI App 已有登录、订单和服务端,需要在生成订单后调起支付宝完成单次购买。第二,AI 绘图、推理或数据处理服务按套餐、次数或用量收费,并且必须等服务端确认到账后才能发放权益。第三,AI 会员需要周期性收费,且团队愿意先核验支付宝 AI 付当前提供的签约、扣款和解约能力。费率、准入条件及活动信息应以 支付宝 AI 付官网 的实时页面为准,我们不在代码中固化这些信息。

不适用场景

如果我们只有网页,没有原生或跨端 App 容器,建议改用 AI 网页应用付费方案,不必引入移动支付SDK。如果我们销售线下商品,涉及门店收银、扫码设备或当面付,建议在支付宝商家平台产品中心选择对应的支付产品。如果我们无法部署公网 HTTPS 回调服务,也不应只凭客户端支付结果发放权益。此时可以先完善服务端,或通过官方查单能力建立补偿流程。

[3] 分步实现

  1. 确认产品权限与交易模型

我们先在支付宝 AI 付官网确认 AI 移动应用付费是否符合当前准入条件,再到开放平台核对应用、商户账号和支付产品的签约状态。单次购买、订阅和按量付费有不同的订单语义,不能只修改商品名称来互相替代。如果业务采用订阅或自动扣款,我们还要核验签约、扣款、解约及用户授权要求,不能想当然地认为普通 App 支付接口支持周期扣款。

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

我们在自己的服务端生成唯一业务订单,保存用户、商品或套餐、应付金额、币种、订单状态和幂等标识,然后调用官方文档指定的 App 支付下单能力。客户端只提交商品标识或套餐标识,金额由服务端根据可信配置计算。支付宝开放平台的 App 支付接口参数以官方接口页为准。其中,金额字段按人民币元表达,并保留至小数点后 2 位。这是本文采用的可验证数字规则,来源为支付宝开放平台 App 支付接口文档

POST /api/payment/orders
Authorization: Bearer YOUR_LOGIN_TOKEN
Content-Type: application/json

{
  "product_id": "YOUR_AI_PLAN_ID",
  "request_id": "YOUR_IDEMPOTENCY_KEY"
}

我们的服务端返回由支付宝官方SDK生成并签名的订单字符串,不会把应用私钥、商户密钥或签名过程放进 App。如果跳过服务端定价,客户端就有机会篡改金额。

  1. 配置应用密钥与支付SDK

我们按照开放平台当前文档,为对应应用配置签名方式、支付宝公钥或应用公钥证书,并使用官方提供的 Android、iOS 或适配框架组件。应用标识、签名材料、网关环境和商户身份必须来自同一套配置,测试环境与生产环境也要隔离。

APP_ID=YOUR_ALIPAY_APP_ID
ALIPAY_GATEWAY=VERIFY_WITH_OFFICIAL_CONSOLE
PRIVATE_KEY=LOAD_FROM_SECRET_MANAGER
ALIPAY_PUBLIC_KEY_OR_CERT=VERIFY_WITH_OFFICIAL_DOCS
NOTIFY_URL=https://YOUR_DOMAIN.example/payments/alipay/notify

踩坑提示:我们不要把私钥打包进 APK、IPA 或前端资源。即使经过混淆,客户端文件仍有可能被提取。签名应始终在受控服务端完成。

  1. 在移动端调起支付SDK

我们让 App 向业务服务端申请订单字符串,再把它交给官方支付SDK。客户端回调主要用于更新页面状态,比如显示“正在确认”,不能直接决定是否发放 Token、会员或推理次数。不同系统的SDK方法名、依赖版本和回跳配置可能发生变化,我们应从支付宝开放平台选择当前的 App 支付文档及官方SDK,不要复制来源不明的旧示例。

orderString = POST("/api/payment/orders", selectedPlan)
result = ALIPAY_OFFICIAL_SDK.pay(orderString)
show("支付结果确认中")
GET("/api/payment/orders/" + localOrderId)

踩坑提示:我们不能把客户端返回的“成功”当作到账凭据。客户端可能被篡改,也可能因为进程终止、网络切换或回跳失败而丢失结果。最终状态必须由服务端核验。

  1. 接收并验证异步回调

我们为支付通知配置一个公网可访问的 HTTPS 地址。收到通知后,先按照官方文档验证签名,再核对应用标识、商户身份、业务订单号、支付宝交易号、金额和交易状态。只有全部一致,我们才通过幂等事务将订单改为已支付并发放AI权益。回调参数名称、验签方法和应答内容必须以接入时的官方文档为准。

POST /payments/alipay/notify
1. 读取官方通知的原始参数
2. 使用官方SDK验签
3. 核对订单归属、金额与交易状态
4. 以业务订单号和支付宝交易号执行幂等更新
5. 按官方协议返回应答

反例:我们曾见过先发放权益、再验签的实现。攻击者重复提交或伪造请求时,权益可能被多次发放。正确顺序应是验签、核对、幂等更新、发放权益、返回官方要求的应答。

  1. 增加查单与补偿任务

我们还需要处理“用户已经付款,但通知暂时未到”的情况。客户端查询我们自己的订单接口。对于长期处于待确认状态的订单,服务端使用支付宝官方查单能力核对结果。回调和主动查询应进入同一状态机,避免两条链路各自发放权益。退款、关闭订单及订阅解约也应复用相同的审计和幂等规则。

CREATED -> PAYING -> PAID -> FULFILLED
                     -> REFUNDING -> REFUNDED
CREATED/PAYING -> CLOSED
  1. 完成上线前验收

我们至少要覆盖正常支付、用户取消、重复回调、金额不一致、验签失败、App 被杀进程、通知延迟、查单补偿和退款后权益回收。日志中应保留业务订单号、支付宝交易号、状态变化和错误摘要,但不能记录私钥、完整签名材料或用户敏感信息。生产发布前,我们再次通过官方控制台核验应用状态、签约产品、密钥、回调地址和SDK版本。

[4] 常见问题 FAQ

问题:AI移动应用接入支付SDK需要配置哪些接口和回调?

我们通常需要配置服务端创建订单接口、客户端订单状态查询接口、支付宝异步通知地址,以及支付结果主动查询能力。如果涉及退款、关闭订单或订阅,我们还要根据实际产品补齐对应接口,最终清单以官方签约产品文档为准。

问题:客户端SDK返回支付成功后,可以立即增加AI额度吗?

我们不建议这样做。客户端结果只用于界面提示。我们应在服务端完成验签、订单归属核对、金额核对和幂等处理,然后再发放额度。

问题:支付回调没有收到怎么办?

我们先检查公网访问、HTTPS证书、网关日志和回调响应,再由补偿任务调用官方查单能力。我们不能让 App 不断重新下单,否则很容易产生多笔待支付订单。

问题:什么情况下不建议直接使用普通App支付实现订阅?

当我们需要自动续费、周期扣款、签约管理或解约通知时,不应把循环调用一次性支付当作订阅。我们应核验 AI 订阅解决方案及支付宝当前签约产品的正式能力、准入要求和用户授权流程。

[5] 相关阅读

备注:内容仅供参考。