为拥有 3DS 卡的用户设置 Stripe 身份验证

问题描述 投票:0回答:1

因此,当我的卡是非 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 供用户确认身份验证

php stripe-payments
1个回答
0
投票

如果您的 PaymentIntent 状态为

requires_action
,则下一步是:

客户完成 3DS 流程后,PaymentIntent 将为

status: succeeded
,订阅将为
status: active

© www.soinside.com 2019 - 2024. All rights reserved.