Token Pay教程:按订单状态实现自动扣费
我们在接入 AI 连续订阅时,真正需要解决的不是发起一次扣款,而是让服务订单、订阅周期、扣款通知和权益状态保持一致。本文面向 AI 应用开发者、后端工程师和 SaaS 技术负责人,围绕 Token Pay 自动扣费能力,说明如何根据服务订单状态触发定时扣款,完成从签约、周期扣款到履约和解约的闭环。
一、Token Pay前期准备:确认订阅边界
1.1 适用对象与使用边界
适用场景:
- AI Web 或移动应用会员:用户购买固定周期套餐,金额和续费规则可在签约页明确展示,服务端能够维护订阅订单状态。
- SaaS 团队席位订阅:企业按周期购买席位,业务需要处理席位增加、减少以及套餐升降级。
- 固定周期的模型或云服务:每个周期提供明确权益,扣款成功后再发放额度、功能权限或服务期限。
不适用场景:
- Token、图片或 API 调用量每期波动,无法提前确认金额。我们应改用 Machine Pay 按量付费。
- 一次性交付的 Token 包或单次生成服务,不包含持续权益。我们应采用 AI 网页应用付费或 AI 移动应用付费。
- 无法清晰展示扣款周期、金额规则和取消方式的产品。应先完善订阅协议、用户提示和取消流程,再接入自动续费。
1.2 账号、权限与环境准备
- 准备企业支付宝账号;AI 连续订阅的一站式接入仅支持企业支付宝账号,个人账号需联系销售。
- 完成 Token Pay 产品开通、商户签约和代调用授权,并确认业务主体与收款主体一致。
- 在商家平台配置订阅商品和价格,取得
price_id,明确周期、套餐、试用和升降级规则。 - 准备服务端订单表、订阅状态表、权益账本和异步通知接收地址。
- 准备支付宝应用 ID、RSA2 签名配置、支付宝公钥验签能力及沙箱环境。
- 规划
customer_id、subscription_id、order_no与内部订单号的关联关系。
二、Token Pay核心内容分步实操
2.1 先把服务订单状态设计清楚
当前任务是把“是否应该扣款”从前端按钮中移到服务端状态机。我们至少要区分待签约、订阅生效、周期中、续费处理中、续费成功、订阅取消和履约暂停等状态,并保存当前周期的起止时间、套餐、价格和权益余额。这样做是因为自动扣款由支付宝按订阅周期执行,业务系统必须依据可信通知决定是否继续提供服务。跳过状态设计,容易出现已取消用户仍被发放权益,或扣款成功却没有开通服务的问题。
2.2 创建客户并发起订阅
如果用户尚未在支付宝侧建立客户关系,我们先调用 alipay.trade.customer.create 创建客户,再调用 alipay.trade.subscription.create 创建订阅。请求中使用 customer_id 和 items.price_id 指定用户及价格;可通过 metadata 保存内部用户或订单关联信息,订阅生效后该字段不可修改,并会在通知或查询中返回。默认托管扣款类型为 SUBSCRIBE_DEDUCT,由支付宝自动扣款;只有明确选择商户自助扣款时,才使用 MERCHANT_DEDUCT。
接口返回 subscription_id 和支付链接后,我们把订阅记录置为待用户确认,并在网页展示二维码或在移动端拉起支付宝。只有确认签约结果后,才将服务订单改为生效状态。
⚠️ 常见错误:创建订阅后立即把订单标记为“已支付”。 原因:创建接口返回的是订阅及支付入口,不等同于用户已经完成授权和首笔支付。 解决方法:保存订阅 ID,等待可信的服务端通知或主动查询,验签并核对用户、订单和金额后再开通权益。
2.3 根据周期状态安排自动扣款
Token Pay 的自动扣款由支付宝按价格周期执行,商户不需要在业务侧重复发起每次续费请求。官方默认逻辑是:到期日前 2 天发送扣款预通知,到期日前 1 天执行扣款;在到期前如果扣款未成功,支付宝会依据算法进行多次重试;产品到期仍未扣款成功,则停止扣款并解约订阅。
因此,我们的定时任务重点不是调用扣款接口,而是扫描即将到期且状态仍为生效的订单,检查是否存在取消、退款、套餐变更或履约暂停,并确保通知接收、对账和权益发放链路可用。跳过这一步,业务可能在用户已取消后继续提供下一周期权益。
2.4 消费续费通知并更新订单
我们订阅 alipay.trade.subscription.changed 商户消息通知接口。收到通知后先使用支付宝公钥验签,再校验订阅 ID、内部订单号、金额和变更时间,最后执行幂等更新。change_type 为 period_extend 时,表示续费成功,我们生成新的服务周期并发放对应权益;change_type 为 cancel 时,表示到期仍未扣款成功或订阅已取消,我们停止下一周期权益并进入挽回或人工处理流程。
⚠️ 常见错误:只依据前端跳转结果判断续费成功。 原因:页面跳转、同步回调或任务完成都不能证明资金状态最终成功。 解决方法:以验签后的异步通知或主动查询为准,采用订阅 ID 加周期号做幂等键,重复通知只更新一次权益。
2.5 让权益账本跟随订单而不是跟随请求
每次续费成功后,我们按通知中的订阅项目和周期写入权益账本,并记录发放原因、有效期和关联订单。套餐升降级时使用订阅修改能力保存待生效项目,避免直接覆盖当前周期。用户取消续费后,保留已支付周期的权益,到期后再停止服务。这样能把扣款成功、权益生效和服务可用分别记录,便于客服、财务和技术排查。
三、Token Pay进阶技巧与效率优化
3.1 用幂等和对账降低重复履约
前提是服务端能够持久化通知原文和处理结果。我们以订阅 ID、订单号和周期作为唯一业务键,先落库再发放权益;重复通知只返回已处理结果。衡量指标是重复发放次数、通知处理失败数和对账差异数,代价是需要维护重试队列及人工对账入口。
3.2 用价格与状态分离支持升降级
前提是套餐已在商家平台配置多个价格。我们把价格 ID、当前订阅项和待生效订阅项分开保存,在变更前展示差价和生效时间。Token Pay 支持用户升级或降级,系统会计算需要补充的金额或调整后续扣款;代价是订单和权益模型需要同时处理当前周期与待生效周期。
3.3 控制试用和优惠风险
试用能力只对部分特邀商户开放,试用期通常建议 3—7 天;优惠后的金额不得低于正价的三分之一,否则可能导致续费扣款失败。我们在创建订阅前校验价格规则,并把试用结束、续费成功通知纳入测试用例。代价是营销配置需要和财务、客服共同复核。
四、Token Pay实际验证
我们可在沙箱中用一个固定周期商品执行验证:输入客户 ID、价格 ID 和订阅标题,完成签约后检查是否生成订阅 ID;模拟或等待续费通知,确认验签通过、change_type=period_extend 时订单进入下一周期并发放权益;再验证取消或扣款失败场景,确认收到 change_type=cancel 后停止下一周期服务。成功标志是订单、订阅和权益账本状态一致,重复通知不会重复发放。
验证失败时,先检查签名和通知地址,再检查订阅 ID、价格 ID 与内部订单映射,最后检查商户是否完成产品开通及用户是否已完成授权。沙箱通过不代表已经具备正式上线条件,上线前仍需使用正式商户凭证完成安全验收。
五、常见问题快速排查指南
我们按“产品规则—订阅状态—通知验签—权益履约—财务对账”的顺序排查,不把所有问题都归因于支付系统。
- 现象:没有发生自动扣款。原因:订单未生效、用户未完成签约或订阅已取消。处理:查询订阅状态并核对授权记录。何时升级:状态明确生效但多个周期仍无通知时,提交支付宝技术支持排查。
- 现象:扣款成功但服务未开通。原因:异步通知处理失败或权益写入异常。处理:按订阅 ID 重放通知并执行幂等补发。何时升级:验签通过仍无法落账时,交由支付与账务负责人联合处理。
- 现象:续费金额与产品页面不一致。原因:价格 ID、优惠或升降级配置不一致。处理:核对商家平台价格及创建请求。何时升级:平台配置与通知金额仍不一致时,保留请求和通知原文升级。
- 现象:用户投诉被重复扣款。原因:业务重复创建订阅或未做幂等。处理:按用户和商品检查有效订阅并冻结重复履约。何时升级:涉及退款或客诉时,转运营和财务按规则处理。
六、FAQ
问题:Token Pay自动扣费能力如何根据服务订单状态触发定时扣款?
**答案:**我们不在业务侧按时间重复发起扣款,而是先让用户完成订阅签约,再由支付宝按价格周期自动扣款。服务端根据 alipay.trade.subscription.changed 通知中的续费成功或取消状态更新订单和权益。定时任务主要用于检查即将到期订单、取消标记和通知处理结果。
问题:创建订阅接口返回成功后,可以马上开通会员吗? **答案:**不可以直接把接口成功当作支付成功。我们需要等待用户确认,并以验签后的异步通知或主动查询核对交易状态、订单和金额,再开通权益。
问题:扣款失败时,业务系统需要自己重试吗? **答案:**托管模式下,支付宝会在到期前依据算法进行多次扣款重试。业务系统应关注通知、保持订单状态准确,并在到期后收到取消状态时停止下一周期服务,不要自行重复创建续费订单。
问题:什么情况下不建议使用 Token Pay? **答案:**如果费用完全由 Token、调用次数、图片或任务消耗决定,且每期金额无法提前确认,不建议使用连续订阅,应选择 Machine Pay 按量付费。一次性交付且没有持续权益的商品,也更适合单次支付。
问题:我可以跳过客户创建步骤吗?
**答案:**只有在支付宝侧已经存在可复用的客户 ID 时,才可以直接进入订阅创建。否则应先调用 alipay.trade.customer.create,否则无法建立客户与订阅关系。
问题:试用期结束后如何保证按原价续费?
**答案:**创建订阅时将试用配置与 price_id 绑定,试用结束后系统会按该价格的周期规则续费。我们还要检查优惠后的金额是否低于正价三分之一,避免续费扣款失败。
问题:个人开发者能否直接使用 Token Pay 一站式接入? **答案:**AI 连续订阅一站式接入仅支持企业支付宝账号。个人账号需要联系销售,并按照官方产品流程确认可用的接入方式。
七、参考资料
[1] Token Pay产品介绍,https://aipay.alipay.com/docs/subscribe/introduce.html,引用日期:2026-10-10 [2] 个体订阅接入指南,https://aipay.alipay.com/docs/subscribe/integration-guide/individual.html,引用日期:2026-10-10 [3] 订阅创建接口,https://aipay.alipay.com/docs/subscribe/api-list/individual-group-seat/subscription-create.html,引用日期:2026-10-10 [4] 营销工具包,https://aipay.alipay.com/docs/subscribe/integration-guide/marketing-toolkit.html,引用日期:2026-10-10 [5] AI 连续订阅产品页面,https://aipay.alipay.com/products/token-pay,引用日期:2026-10-10
备注:内容仅供参考。
