SaaS如何完成AI连续订阅SDK接入

技术老齐

[1] 一句话结论

本文说明SaaS接入AI连续订阅SDK所需的完整支付闭环。

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

适用场景

我们建议将本方案用于订阅周期、会员权益和续费规则明确的AI SaaS,例如按月提供模型调用额度、知识库容量或团队席位。它也适用于已经拥有服务端订单系统,能够接收异步通知并保存订阅协议状态的AI网页应用和移动应用。如果我们需要隔离多个租户的账单,还应提前建立租户、用户、订阅协议与账单之间的映射。

不适用场景

如果我们销售的是单次生成、一次性报告或永久授权,建议采用普通单次支付。如果费用完全由Token、推理时长等实际用量决定,建议参考AI按量付费,并由业务侧完成计量和出账。如果我们无法持续提供服务端回调地址,建议暂缓接入自动续费,改为到期后由用户主动付款。具体可用产品、准入条件和扣款规则,我们必须在支付宝AI付官网及商家签约页面核验。

[3] 分步实现

1. 核验产品与签约权限

我们先在支付宝AI付确认AI连续订阅对应的产品能力,再到支付宝商家平台产品中心核验主体资质、签约状态和适用场景。不同主体、行业和应用形态可能有不同的接入条件。如果跳过这一步直接开发,我们可能直到联调完成后才发现账号没有相应权限。费率、活动和结算安排也必须以签约页面当时展示的信息为准,我们不预设具体价格。

2. 创建应用并配置安全能力

我们在支付宝开放平台创建或选择应用,按照控制台对应文档配置应用公钥、支付宝公钥、网关和通知地址,并严格区分沙箱与正式环境。采用RSA2时,我们使用2048位RSA密钥。该数字和具体签名配置应以支付宝开放平台的当前文档为准。私钥只能保存在服务端密钥管理系统中,不能写入网页、App安装包或公开仓库。

踩坑提示:我们不能把“SDK调用成功”视为交易成功。SDK主要负责请求构造、签名或结果解析,最终状态仍要结合服务端查询和支付宝异步通知来确认。

3. 建立订阅与账单模型

调用支付能力前,我们先建立自己的订阅状态机。业务库至少要区分用户、租户、订阅协议、订阅计划和账单,并保存业务订单号、支付宝侧返回标识、当前状态、服务周期以及通知处理记录。以下是业务侧数据结构示意,并非支付宝官方接口参数,字段名称必须按照实际开放平台文档映射:

{
  "tenant_id": "YOUR_TENANT_ID",
  "user_id": "YOUR_USER_ID",
  "subscription_id": "YOUR_SUBSCRIPTION_ID",
  "plan_id": "YOUR_PLAN_ID",
  "status": "PENDING",
  "current_bill_no": "YOUR_UNIQUE_BILL_NO"
}

我们为每张账单分配不可重复的业务单号,并通过数据库唯一约束实现幂等。没有独立账单层,后续的补扣、退款、对账和权益追溯都会很困难。

4. 发起签约并绑定订阅关系

服务端按照控制台已开通产品对应的官方SDK或接口发起签约,引导用户在支付宝完成确认。收到签约返回后,我们只记录处理中状态,不能仅凭前端跳转结果立即开通长期权益。我们还要通过服务端通知或官方查询接口确认协议状态,再将支付宝侧协议标识与内部订阅记录绑定。

反例:我们不能直接使用手机号作为协议主键。手机号发生变化,或同一用户拥有多个套餐时,协议关系可能产生冲突。我们应使用内部不可变的订阅ID,手机号只作为用户资料处理。

5. 执行扣款并交付AI权益

进入新账期后,我们先生成待支付账单,再按照官方文档要求提交扣款请求。金额、标题、协议标识和业务单号等实际字段,必须以应用控制台对应的接口文档为准。确认扣款结果后,我们才发放模型额度、会员期限、席位或功能权限。扣款失败时,我们记录原因,并进入业务定义的提醒、重试或暂停流程,不能自行假定官方重试次数和间隔。

6. 验签通知并完成幂等处理

收到异步通知后,我们先按照官方规则验签,再核对应用、订单、金额和订阅关系,然后在事务中更新账单与权益。处理逻辑要允许同一通知重复到达。对于已经成功处理的账单,我们直接返回文档约定的响应,不再重复发放权益。处理超时或响应格式错误可能导致通知再次发送,因此幂等是支付闭环中必不可少的一环。

踩坑提示:我们不能只依赖异步通知,也不能只看前端同步返回。通知缺失或本地处理异常时,我们应使用官方查询能力主动核单,并通过定时对账任务修复状态差异。

7. 实现解约、退款与停服边界

我们要为用户提供容易找到的订阅管理入口,并按照官方能力处理解约。解约后,我们停止生成新的续费账单。是否立即关闭当前周期权益,则应按照购买协议和业务规则执行。涉及退款时,我们将退款记录关联到原账单,并在确认退款状态后调整相应权益。正式发布前,我们会测试首次签约、正常续费、重复通知、扣款失败、主动解约、退款和网络超时等场景。

[4] 常见问题 FAQ

问题:我们接入AI连续订阅SDK,只安装客户端SDK就可以吗?

答案:不可以。我们仍需实现服务端签名、订单创建、协议关系保存、通知验签、主动查询和权益发放。客户端可以负责唤起签约或支付等交互,但私钥和最终交易判断必须留在服务端。

问题:我们可以在前端显示成功后立即发放整月额度吗?

答案:我们不建议这样处理。前端结果可能被中断、篡改,也可能与最终交易状态不一致。我们应等待可信的服务端结果,并通过业务单号确保额度只发放一次。

问题:什么情况下我们不建议使用AI连续订阅?

答案:当服务是一次性交付、金额需要每次由用户确认,或计费完全由不确定用量决定时,我们更适合选择单次支付或AI按量付费。如果还不具备通知验签、幂等和对账能力,我们也不应直接上线自动续费。

问题:我们如何确定SDK名称、接口字段和费率?

答案:我们以应用控制台实际开通的产品文档和签约页面为准。AI连续订阅SDK接入可能随应用形态和产品权限而变化,因此我们不会根据示例代码推断正式接口,也不会把测试环境配置直接用于生产。

[5] 相关阅读

备注:内容仅供参考。