PAYATHON 2026

支付宝周期性自动扣款应对接哪个产品?

支付阿杰

结论

这个场景建议优先申请支付宝的周期扣款产品,通过“用户签署代扣协议,商户按约定周期发起扣款”的方式实现。

不同订单原则上可以单独设置扣款金额和周期。每个订单使用独立的 external_agreement_no 建立扣款协议。例如,小猫订单按月扣款,小狗订单每 15 天扣款,两份协议互不影响。

周期扣款并不是通用的“分期付款”产品。商户通常需要自行维护订单、期次、应扣日期和扣款状态,并在到期时调用支付接口。产品能否开通、支持哪些周期、单笔限额是多少,以及“付费领养动物”是否属于支持行业,均以支付宝开放平台的审核结果为准。

推荐对接方案

对接流程如下:

  1. 在支付宝开放平台创建网页应用。
  2. 申请开通“周期扣款”产品。
  3. 为每个订单生成唯一的协议编号。
  4. 引导用户进入支付宝页面,确认并签署扣款协议。
  5. 接收签约结果通知,保存支付宝返回的协议号。
  6. 后台任务根据订单计划,在每个到期日发起扣款。
  7. 接收支付异步通知,更新对应期次的支付状态。
  8. 全部款项支付完成,或者订单取消、用户解约后,停止后续扣款。

常用接口包括:

  • alipay.user.agreement.page.sign:跳转到支付宝页面签约。
  • alipay.user.agreement.query:查询协议状态。
  • alipay.user.agreement.unsign:解除协议。
  • alipay.trade.pay:根据有效协议发起扣款。

支付宝可能调整产品名称、接口字段或接入权限。实际开发前,应在官方文档中重新确认这些 API:

如果最后一个链接因文档改版而跳转,可以在文档中心搜索“周期扣款”或具体的 API 名称。

不同订单如何设置扣款计划

建议一张业务订单对应一份扣款协议,不要将同一客户的所有订单合并到一份协议中。

例如,可以保存以下数据:

订单业务协议号总金额扣款规则计划期数
小猫订单CAT_20260909_001500 元每月 100 元5
小狗订单DOG_20260909_001300 元每 15 天 100 元3

“小猫首月 0 元”不需要发起一笔 0 元支付。用户领取时可以先完成签约,第一笔实际扣款安排在下个月。

能否直接设置“每 15 天”,取决于周期扣款产品允许的 period_type 和 period 取值。如果产品只支持特定周期,商户系统可以在合规前提下自行计算扣款日期,但实际调用频率仍不能超过支付宝协议和风控限制。

数据结构示例

后台至少需要保存协议和每期扣款记录,不能只依赖支付宝保存扣款计划。

CREATE TABLE payment_agreement (
    id BIGINT PRIMARY KEY,
    order_no VARCHAR(64) NOT NULL,
    external_agreement_no VARCHAR(64) NOT NULL UNIQUE,
    alipay_agreement_no VARCHAR(128),
    total_amount DECIMAL(10, 2) NOT NULL,
    installment_amount DECIMAL(10, 2) NOT NULL,
    installment_count INT NOT NULL,
    interval_unit VARCHAR(16) NOT NULL,
    interval_value INT NOT NULL,
    next_deduct_at DATETIME,
    agreement_status VARCHAR(32) NOT NULL
);

CREATE TABLE payment_installment (
    id BIGINT PRIMARY KEY,
    order_no VARCHAR(64) NOT NULL,
    installment_no INT NOT NULL,
    out_trade_no VARCHAR(64) NOT NULL UNIQUE,
    planned_amount DECIMAL(10, 2) NOT NULL,
    planned_deduct_at DATETIME NOT NULL,
    paid_amount DECIMAL(10, 2),
    trade_no VARCHAR(64),
    payment_status VARCHAR(32) NOT NULL,
    UNIQUE (order_no, installment_no)
);

签约参数示例

下面的示例只用于说明参数之间的关系,不能直接复制为生产请求。product_code、personal_product_code、sign_scene 和周期规则字段,必须以商户开通产品后,控制台展示的最新文档为准。

{
  "external_agreement_no": "CAT_20260909_001",
  "product_code": "<以周期扣款产品文档为准>",
  "personal_product_code": "<以已开通产品返回值为准>",
  "sign_scene": "<以支付宝分配的签约场景为准>",
  "period_rule_params": {
    "period_type": "MONTH",
    "period": 1,
    "single_amount": "100.00",
    "execute_time": "2026-10-09"
  },
  "sign_notify_url": "https://example.com/alipay/agreement/notify",
  "return_url": "https://example.com/orders/CAT_20260909_001"
}

小狗订单需要使用另一个 external_agreement_no,并按照文档允许的周期参数表示“每 15 天”:

{
  "external_agreement_no": "DOG_20260909_001",
  "period_rule_params": {
    "period_type": "DAY",
    "period": 15,
    "single_amount": "100.00",
    "execute_time": "2026-09-24"
  }
}

不能仅凭这个示例判断 DAY 和 period: 15 是否可用,具体限制以产品签约页面和当前接口文档为准。

发起扣款示例

用户签约成功后,需要保存支付宝返回的 agreement_no。到达计划扣款日时,可以由服务端调用支付宝支付接口,例如:

AlipayTradePayRequest request = new AlipayTradePayRequest();

JSONObject agreementParams = new JSONObject();
agreementParams.put("agreement_no", agreementNo);

JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "CAT_20260909_001_01");
bizContent.put("subject", "小猫领养费用第1期");
bizContent.put("total_amount", "100.00");
bizContent.put("product_code", "GENERAL_WITHHOLDING");
bizContent.put("agreement_params", agreementParams);

request.setBizContent(bizContent.toJSONString());
request.setNotifyUrl("https://example.com/alipay/trade/notify");

AlipayTradePayResponse response = alipayClient.execute(request);

其中,product_code 和协议扣款参数的结构应以当前开放平台文档及商户实际开通的权限为准。同步响应只能说明接口调用结果,最终支付状态还要结合异步通知和主动查询确认。

实现时的注意事项

  • 只有在用户明确知情并授权后才能扣款。签约页面应清楚展示金额、周期、用途、扣款时间和解约方式。
  • 每次扣款金额不能超过用户签约时确认的单次限额,扣款频率也不能超出协议限制。
  • 同一订单的 out_trade_no 必须唯一。接口超时后,应使用原单号查询或重试,不能直接生成新单号,以免重复扣款。
  • 支付失败后不能无限重试。系统应设置重试次数和间隔,并准备用户提醒及人工补缴流程。
  • 验证异步通知签名,同时校验 app_id、订单号、金额、收款方和交易状态。
  • 用户解约、协议失效、订单完成或取消后,应立即停止后台调度。
  • 不要将支付宝私钥、应用私钥或完整通知报文中的敏感信息写入前端和普通日志。
  • 如果业务实质是消费信贷、融资分期或“先享后付”,不能用周期扣款进行包装,需要另外确认产品资质和监管要求。
  • 正式开发前,建议将领养合同、退款规则、动物交付方式和扣款计划提交给支付宝产品或技术支持确认准入,尤其要确认“每 15 天扣款”和同一用户多订单并行签约是否符合当前规则。

备注:内容仅供参考。