'Method not allowed'], 405); } $orderId = $_GET['order_id'] ?? ''; $sessionId = $_GET['session_id'] ?? ''; if (empty($orderId) && empty($sessionId)) { jsonResponse(['error' => 'Order ID or Session ID required'], 400); } // Get order by ID or session if (!empty($orderId)) { $order = db()->fetch( "SELECT * FROM orders WHERE order_id = :id", ['id' => $orderId] ); } else { $order = db()->fetch( "SELECT * FROM orders WHERE stripe_session_id = :session OR stripe_payment_intent = :session", ['session' => $sessionId] ); } if (!$order) { jsonResponse(['error' => 'Order not found'], 404); } // If already marked as paid, return success if ($order['payment_status'] === 'paid') { jsonResponse([ 'status' => 'complete', 'payment_status' => 'paid', 'order_id' => $order['order_id'], 'order_number' => $order['order_number'], 'redirect' => '/order-confirmation.php?order=' . $order['order_id'] ]); } // Check if Stripe is configured if (!isStripeConfigured()) { jsonResponse([ 'status' => 'demo_mode', 'payment_status' => $order['payment_status'], 'message' => 'Stripe not configured - running in demo mode' ]); } try { // Check with Stripe if (!empty($order['stripe_session_id'])) { // Check checkout session status $session = stripe()->getCheckoutSession($order['stripe_session_id']); if ($session['payment_status'] === 'paid') { // Update order db()->update('orders', [ 'payment_status' => 'paid', 'order_status' => 'confirmed', 'stripe_payment_intent' => $session['payment_intent'] ?? null ], 'order_id = :id', ['id' => $order['order_id']] ); jsonResponse([ 'status' => 'complete', 'payment_status' => 'paid', 'order_id' => $order['order_id'], 'order_number' => $order['order_number'], 'redirect' => '/order-confirmation.php?order=' . $order['order_id'] ]); } jsonResponse([ 'status' => $session['status'], 'payment_status' => $session['payment_status'] ]); } elseif (!empty($order['stripe_payment_intent'])) { // Check payment intent status $paymentIntent = stripe()->getPaymentIntent($order['stripe_payment_intent']); if ($paymentIntent['status'] === 'succeeded') { // Update order db()->update('orders', [ 'payment_status' => 'paid', 'order_status' => 'confirmed' ], 'order_id = :id', ['id' => $order['order_id']] ); jsonResponse([ 'status' => 'complete', 'payment_status' => 'paid', 'order_id' => $order['order_id'], 'order_number' => $order['order_number'], 'redirect' => '/order-confirmation.php?order=' . $order['order_id'] ]); } jsonResponse([ 'status' => $paymentIntent['status'], 'payment_status' => 'pending' ]); } // No Stripe reference found jsonResponse([ 'status' => 'pending', 'payment_status' => $order['payment_status'] ]); } catch (Exception $e) { error_log('Payment status check error: ' . $e->getMessage()); jsonResponse([ 'status' => 'error', 'payment_status' => $order['payment_status'], 'error' => 'Failed to check payment status' ]); }