如何使用Stripe实现超过7天的银行卡押金预授权冻结
首先明确:Stripe默认7天的预授权冻结上限不是平台自身设置的规则,是Visa、Mastercard等卡组织对普通消费场景预授权的通用要求,酒店这类长周期场景不能靠单次普通预授权覆盖全周期,根据商户资质和场景可以选以下三种合规方案:
方案1:申请旅宿行业专属延期预授权权限
正规经营酒店、短租业务的商户,可以直接在Stripe商户后台提交经营资质申请开通旅宿类商户专项能力,开通后住宿场景下的预授权冻结最长可支持31天,足够覆盖绝大多数常规入住周期。
调用接口时需要额外传入merchant_category: "lodging"参数标记交易场景,同时准确填写用户入住、离店时间,卡组织会对这类符合行业惯例的长授权直接放行,不会触发风控。方案2:滚动续期预授权(无特殊资质的通用方案)
不符合旅宿专项资质申请要求的话,可以用到期续冻的方式实现长周期押金冻结:- 首次创建支付请求时设置
capture_method: manual,完成第一笔7天有效期的预授权冻结 - 在每笔预授权到期前24小时,先调用撤销接口作废当前有效授权,立刻用已经绑定好的用户支付方式发起一笔同金额的新预授权
- 重复续期操作直到用户离店结算,最终按实际需要扣除的金额捕获授权,剩余金额直接解冻退回即可
注意这个方案必须提前在用户支付环节明确告知会有多次冻结、解冻操作,避免用户收到重复动账提醒发起拒付;另外借记卡的预授权会实际占用账户余额,这类场景优先引导用户使用信用卡支付。
- 首次创建支付请求时设置
方案3:延迟结算托管模式
如果押金周期远超过31天(比如长租场景),可以放弃传统预授权模式,改用Stripe的延迟结算托管能力:用户办理入住时签署扣款授权协议,将押金金额划转至Stripe托管账户待结算,托管周期最长支持180天,等服务结束后根据实际消费、损坏赔付等情况,确认要扣除的金额,剩余资金直接退回用户支付账户。这个方案的缺点是资金会实际从用户账户划出,不是仅冻结额度,需要在服务条款里明确和用户说明规则,避免投诉。
避坑提醒:不要等第一笔7天预授权过期后再尝试扣款,过期的未捕获授权会被卡组织判定为无效交易,强行扣款会产生极高的拒付率,严重的会直接触发Stripe商户账号风控。
内容的提问来源于stack exchange,提问作者Jason M.

