我想要订阅类型=试用版的3d安全模式授权检查。
我正在关注this link来设置条纹订阅。当我创建不带“ trial_period_days”的订阅时,由于订阅状态变为“不完整”,会弹出3d安全授权模式。
但是当我通过> trial_period_days和'payment_behavior'=>'allow_incomplete'时,由于订阅状态变为“活动”,模态无效。
在订阅试用期间,如何显示授权模式? 我也看到了此链接https://stripe.com/docs/payments/3d-secure#manual-three-ds,但没有任何进展。
建议我实施此方法。
这是我的代码:
public function createCustomer($token) {
\Stripe\Stripe::setApiKey(secretKey);
$customer = \Stripe\Customer::create([
'email' => 'any_email@domain.com',
'source' => $token,
]);
return $this->createSubscription($customer, $token);
}
public function createSubscription($customer, $token) {
$plan_id = $this->getPlanId();
$payment_intent = $this->createSetupIntent($customer->id, $token);
$subscription = \Stripe\Subscription::create([
'customer' => $customer->id,
'items' => [
[
'plan' => $plan->id,
],
],
'trial_period_days' => 14,
'expand' => ['latest_invoice.payment_intent'],
'payment_behavior' => 'allow_incomplete',
]);
return [
'subscription' => $subscription,
'payment_intent' => $payment_intent
];
}
public function createSetupIntent($customer_id, $token) {
$client = new Client();
$url = "https://api.stripe.com/v1/setup_intents";
$response = $client->request('POST', $url, [
'auth' => ['sk_test_key', ''],
'form_params' => [
'customer' => $customer_id,
'payment_method_types' => ["card"],
'payment_method_options' => [
"card" => [
"request_three_d_secure" => "any"
]
]
],
'timeout' => 10.0
]);
$setup_intent = $response->getBody()->getContents();
return json_decode($setup_intent, true);
}
当我将订阅设置为试用版时,我也希望3d安全授权检查模式。
答案 0 :(得分:0)
您所描述的是Stripe doc
中的一种情况基本上,当您创建具有试用期的订阅时,由于不会立即付款,因此不需要3DS身份验证。
身份验证被延迟到试用期结束。
要求用户进行身份验证,以便在试用结束时不再需要3DS身份验证,并且在创建具有试用期的订阅时,该订阅将具有pending_setup_intent
attribute >
您可以使用该pending_setup_intent
来要求用户完成身份验证。您不必显式创建设置意图。您可以做的是检查订阅中的状态。
如果订阅位于trialing
中,请检查是否有pending_setup_intent
,如果存在,则将pending_setup_intent.client_secret
传递到客户订阅您产品的前端,然后致电{ {1}} Stripe.js
handleCardSetup
设置卡并结束试用期后,将不太可能需要再次通过3DS身份验证进行收费。
您可以使用Stripe Test Card,stripe.handleCardSetup(psi.client_secret)
.then(siResult => {
log({siResult});
}).catch(err => {
log({siErr: err});
});
适合此测试。
您可以通过使用
4000002500003155
希望以上帮助