因此,当我的卡是非 3DS 卡时,我已经能够成功创建新的条带客户、订阅并传递其余逻辑,但我在实现 3DS 的逻辑时遇到问题,对于 3DS,我尝试将用户重定向到他们的银行,通过模式或 iframe 进行身份验证,并在身份验证成功后将他们重定向回我的网站,但我没有看到 3DS 卡的任何身份验证页面,但在 stripe 仪表板中创建了一个新客户和订阅,付款状态为“未完成”
if($_SERVER['REQUEST_METHOD'] == "POST"){
set_value($_POST);
$token = (isset($_POST['stripeToken'])) ? $_POST['stripeToken'] : null;
$crad_number = (isset($_POST['crad_number'])) ? $_POST['crad_number'] : null;
$month = (isset($_POST['month'])) ? $_POST['month'] : null;
$year = (isset($_POST['year'])) ? $_POST['year'] : null;
$cvv = (isset($_POST['cvv'])) ? $_POST['cvv'] : null;
// Validation
$errors = array();
if(empty($token)){
$errors[] = 'Token is required';
}
if(empty($crad_number)){
$errors[] = 'Crad Number is required';
}
if(empty($month)){
$errors[] = 'MONTH name is required';
}
if(empty($year)){
$errors[] = 'YEAR is required';
}
if(empty($cvv)){
$errors[] = 'CVV is required';
}
if(empty($errors)){
try{
$stripe = new \Stripe\StripeClient('sk_test key');
// Create Customer In Stripe
$customer = \Stripe\Customer::create(array(
"email" => $email,
"name" => $membernamedata,
'source' => $token,
));
$finalamount = $amount*100;
$paydesc = "Members Directory";
// Create the subscription with the found product ID
$subscription = $stripe->subscriptions->create([
'customer' => $customer,
'items' => [['price' => $product_id]],
"currency" => $_currency,
"description" => $paydesc,
//'amount' => $finalamount,
'expand' => ['latest_invoice.payment_intent'],
]);
// Check if 3DS authentication is required
if ($subscription->latest_invoice->payment_intent->status === 'requires_action' &&
$subscription->latest_invoice->payment_intent->next_action->type === 'redirect_to_url'
) {
// Redirect the customer to the 3DS authentication page
$redirectUrl = $subscription->latest_invoice->payment_intent->next_action->redirect_to_url->url;
header('Location: ' . $redirectUrl);
exit();
} else {
我期待显示一个模式或 iframe 供用户确认身份验证
如果您的 PaymentIntent 状态为
requires_action
,则下一步是:
client_secret
confirmCardPayment
来启动 3DS 流程客户完成 3DS 流程后,PaymentIntent 将为
status: succeeded
,订阅将为 status: active
。