Stripe 接入信用卡预授权(预付款)方式最新API

3,600 阅读2分钟

信用卡预授权

什么是预授权?

  • 信用卡预授权是指发卡机构或其代理机构在特约商户扣款前,确认许可冻结额度的交易。

  • 预授权会占用卡片的信用额度,当客户对预授权进行结算时,该预授权将会被取消。

  • 预授权发生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

需要注意的细节

  1. 可以通过intent = Stripe::PaymentIntent.cancel('pi_qMkkHfSQrcyqlf5rURoe')来取消预授权

  2. 这笔交易的手续费还是按照预授权的总金额来计算,而不是按照消费的金额来计算

  3. 只能扣除不多于预授权的金额,类似退款,不能超过之前设置的总金额。

  4. Stripe里的预授权时限是7天,如果七天内不进行上面第二步的扣款操作,预授权会失效,以后不能再扣款。