4. 授权与扣款机制

在支付系统中,“授权”与“扣款”并不是同一个动作。授权解决的是“这笔钱能不能被冻结或承诺支付”,扣款解决的是“钱是否真正从持卡人账户划走”。不同业务对资金确定性、到账时效、风险控制和用户体验的要求不同,于是衍生出预授权、直接扣款、延迟扣款、部分扣款和多次扣款等机制。理解它们的实现原理,是设计支付、退款、撤销流程的基础。

一、核心原理:授权与扣款的分离

授权(Authorization)是发卡行或支付机构对交易进行风险与余额校验后,冻结或承诺一笔资金的过程。扣款(Capture/Settlement)则是在授权有效期内,将冻结资金正式计入商户账户。二者分离带来三个关键参数:授权金额、授权有效期、可扣款次数。

  • 预授权:先冻结一笔资金,后续按实际消费金额扣款,常见于酒店、租车、加油。
  • 直接扣款:授权与扣款几乎同时完成,资金实时或准实时到账,常见于电商即时支付。
  • 延迟扣款:授权成功后延迟一段时间再扣款,用于确认发货、服务完成或风控复核。
  • 部分扣款:扣款金额小于授权金额,剩余冻结资金释放,常见于预授权场景。
  • 多次扣款:在授权额度内分多笔扣款,常见于分阶段服务、分批发货。

核心判断:授权是“额度占用”,扣款是“资金转移”。撤销针对未扣款的授权,退款针对已扣款的交易。二者在账务、通道接口和时效上完全不同。

二、方法流程:五种机制的实现路径

以典型支付网关为例,预授权通常调用 auth 接口冻结资金,再调用 capture 接口完成扣款;直接扣款则调用 sale 或 auth+capture 组合。延迟扣款需要在授权有效期内发起 capture,否则授权过期自动释放。部分扣款和多次扣款依赖通道是否支持“部分捕获”和“多次捕获”能力。

// 预授权:冻结 1000 元
POST /pay/auth
{ "orderId": "O1001", "amount": 100000, "currency": "CNY" }

// 实际消费 680 元,部分扣款
POST /pay/capture
{ "authId": "A9001", "amount": 68000, "isFinal": true }

// 剩余 320 元冻结资金释放
// 若 isFinal=false,则剩余额度仍可继续扣款

多次扣款的实现依赖 isFinal 或 multipleCapture 标志。当通道支持多次捕获时,每次 capture 后授权额度递减,直到 isFinal=true 或额度用尽。若通道不支持,则只能一次性扣款,剩余金额通过撤销释放。

授权与扣款机制:额度占用与资金转移 预授权 冻结额度,后扣款 直接扣款 授权即扣款 延迟扣款 授权后延迟捕获 部分/多次扣款 额度内分次捕获 冻结 1000 元 实际扣 680 元 释放 320 元 授权成功 立即扣款 资金实时到账 授权有效期 内发起捕获 过期自动释放 分次捕获 额度递减 isFinal 控制 关键差异:撤销针对未扣款授权,退款针对已扣款交易 授权额度占用 ≠ 资金转移;扣款后才产生可退款余额

三、案例与场景:如何选择机制

机制 资金确定性 典型场景 关键风险
预授权 中,冻结但未扣 酒店押金、租车、加油 授权过期、超额冻结
直接扣款 高,实时到账 电商即时支付、订阅首扣 退款成本高、拒付风险
延迟扣款 中高,依赖有效期 货到付款、服务完成后结算 授权过期导致扣款失败
部分扣款 中,按实际金额 预授权后实际消费少于冻结 剩余额度释放不及时
多次扣款 中,分次确认 分批发货、分阶段服务 通道不支持多次捕获

例如酒店入住时冻结 1000 元预授权,离店结算实际消费 680 元,系统发起部分扣款并设置 isFinal=true,剩余 320 元立即释放。若客人续住,则先不设置 final,后续再次扣款,形成多次扣款。若通道不支持部分捕获,则只能先扣 1000 元再退款 320 元,这会增加退款流程和账务复杂度。

设计建议:优先确认通道能力矩阵——是否支持部分捕获、多次捕获、延迟捕获、授权有效期延长。能力决定流程,而不是流程倒逼能力。

四、误区与复盘

误区一:把预授权当成已收款。预授权只是冻结,未扣款前不能确认收入,也不能直接退款,只能撤销。撤销后额度释放,用户账单上的“预授权”记录消失。

误区二:忽略授权有效期。不同通道有效期从 3 天到 30 天不等。延迟扣款若超过有效期,capture 会失败,必须重新授权,用户体验和风控成本都会上升。

误区三:多次扣款不控制总额。多次捕获的累计金额不能超过授权金额,否则通道会拒绝。系统需要在每次 capture 前校验剩余可用额度,并记录已捕获金额。

复盘要点:授权与扣款的状态机必须严格区分。常见状态包括 AUTHORIZED、PARTIALLY_CAPTURED、CAPTURED、VOIDED、EXPIRED。撤销只能作用于 AUTHORIZED 或 PARTIALLY_CAPTURED 的剩余额度;退款只能作用于已 CAPTURED 的金额。状态判断错误会导致重复退款或超额撤销。

掌握这五种机制的关键,在于始终区分“额度”和“资金”两条线:授权线管理冻结与释放,扣款线管理入账与退款。只有两条线对账一致,支付授权、撤销与退款流程才能稳定运行。