支付场景
预授权先冻结持卡人卡上的订单金额、暂不扣款,适用于酒店与租车押金、预订类订单、发货前锁定额度等先确保额度、后按履约扣款的业务。预授权下单可以在任一接入方式完成;请款或撤销由商户服务端调用 API 完成。
概念与选择
- 适用范围:
txnType=AUTH适用于自行采集卡信息的卡支付和 token 支付(subProductType=DIRECT或TOKEN),不适用于本地支付方式、订阅或分期。 - 仅支持全额请款:需要少扣时先撤销再重新下单,或请款后通过申请或取消退款退还差额。
- 请款与撤销二选一:对同一笔预授权只能执行其中一个。
生命周期与通知
预授权下单
按所用接入方式下单并传入 txnType=AUTH,其余参数与普通支付相同;需要 3DS 时按该接入方式的接入流程处理跳转。
确认授权结果
收到预授权、请款与撤销通知中 txnType=AUTH、status=S、paymentStatus=A 的通知后确认授权成功。保存响应或通知中的 transactionId 与 paymentId:前者是请款或撤销时 originTransactionId 的取值,后者用于把授权与后续请款或撤销关联到同一支付意图。
请款或撤销
调用预授权请款或撤销,originTransactionId 传预授权的 transactionId,txnType=CAPTURE 扣划全部冻结金额,txnType=VOID 释放冻结、不扣款。
确认最终结果
请款成功后收到 txnType=CAPTURE、status=S、paymentStatus=S 的通知;撤销成功后收到 txnType=VOID、status=S、paymentStatus=N 的通知。请款或撤销通知的 transactionId 属于本次操作,与原预授权不同;按各自的 transactionId 幂等处理,并用 paymentId 关联同一支付意图。
边界与状态处理:
VOID只作用于未请款的预授权,释放冻结额度、不产生资金流;已请款的交易只能走退款。- 请款或撤销请求中不同的
merchantTxnId视为不同交易,对同一originTransactionId的重复请款应由商户侧防重。 - 以
paymentId加paymentStatus判断这笔资金处于冻结中、已扣款还是已释放(AUTH成功A,CAPTURE成功S,VOID成功N),不要用多条通知各自的status拼装状态;status与paymentStatus的语义区分见 Webhook 通知。