信用卡预授权
什么是预授权?
-
信用卡预授权是指发卡机构或其代理机构在特约商户扣款前,确认许可冻结额度的交易。
-
预授权会占用卡片的信用额度,当客户对预授权进行结算时,该预授权将会被取消。
-
预授权发生30天内(一般为30天,但在Stripe里有注明是7天),若客户没有进行结算,则该预授权将会被取消。
简单来说,就是通过冻结用户信用卡部分额度的方式,把冻结金额当做押金开始进行交易,交易完成后从押金里扣除消费的费用,信用卡取消冻结,剩余的押金额度返回信用卡。
什么情况下使用预授权? 预授权一般常在酒店、宾馆、机票与租赁等行业中运用,可以简单理解为“押金”的概念。即如果需要交付押金的一些服务,使用预授权的方式是比较合适的,保证了资金安全。
接入步骤
1. 创建 PaymentIntent
创建PaymentIntent的时候,新增一个capture_method,并且值为manual方式,即手动方式(之前创建的PaymentIntent 是自动确认方式,这部分详细内容可以看我之前的文章,Stripe支付升级支持欧洲SCA)
\Stripe\Stripe::setApiKey('sk_test_fZudhZv0Ivzs2mGVXlGkLR6V00EoKAdPYK');
\Stripe\PaymentIntent::create([
'amount' => 1099,
'currency' => 'hkd',
'payment_method_types' => ['card'],
'capture_method' => 'manual',
]);
2.确认收款
代码很简单,直接对上面创建的PaymentIntent进行收款即可
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey('sk_test_fZudhZv0Ivzs2mGVXlGkLR6V00EoKAdPYK');
$intent = \Stripe\PaymentIntent::retrieve('pi_rBiEvgRtfN5JH0X8NVVE');
$intent->capture(['amount_to_capture' => 750]);
上面的代码是PHP的,如果需要其他语言的代码可移步Stripe
需要注意的细节
-
可以通过
intent = Stripe::PaymentIntent.cancel('pi_qMkkHfSQrcyqlf5rURoe')来取消预授权 -
这笔交易的手续费还是按照预授权的总金额来计算,而不是按照消费的金额来计算
-
只能扣除不多于预授权的金额,类似退款,不能超过之前设置的总金额。
-
Stripe里的预授权时限是7天,如果七天内不进行上面第二步的扣款操作,预授权会失效,以后不能再扣款。