diff --git a/uc_stripe.module b/uc_stripe.module
index 3e7c1ca..c1797f8 100644
--- a/uc_stripe.module
+++ b/uc_stripe.module
@@ -630,7 +630,7 @@ function uc_stripe_charge($order_id, $amount, $data) {
       "description" => t("Order #@order_id", array("@order_id" => $order_id)),
       "payment_method" => $stripe_payment_method_id,
       "payment_method_types" => ['card'],
-      "confirm" => true,
+      "confirm" => FALSE,
 
     );
 
@@ -643,7 +643,11 @@ function uc_stripe_charge($order_id, $amount, $data) {
 
     // charge the Customer the amount in the order
     $payment_intent = \Stripe\PaymentIntent::retrieve($intent_id);
-
+    
+    if ($payment_intent->status != 'requires_confirmation') {
+      throw new Exception($payment_intent['last_payment_error']['message']);
+    }
+    $payment_intent->confirm();
     if ($payment_intent->status != 'succeeded') {
       throw new Exception($payment_intent['last_payment_error']['message']);
     }
@@ -961,8 +965,8 @@ function _generatePaymentResponse($intent) {
             'requires_action' => true,
             'payment_intent_client_secret' => $intent->client_secret
         ];
-      } else if ($intent->status == 'succeeded') {
-        # The payment didn’t need any additional actions and completed!
+      } else if ($intent->status == 'requires_confirmation') {
+        # It will be confirmed in uc_stripe_charge()
         # Handle post-payment fulfillment
         $response = ['success' => true];
       } else {
