fetch(my_ajax_object.ajax_url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ action: 'process_checkout', nonce: my_ajax_object.nonce_process_checkout, selected_price: selectedPriceValue, quote_id: quoteId, }), }) .then(response => { console.log('Raw Response:', response); return response.json(); }) .then(data => { console.log('Parsed Response:', data); if (data.success) { window.location.href = nextStepPath; } else { console.error('Error:', data.message); alert('An error occurred. Please try again.'); } }) .catch(error => { console.error('Error:', error); }); }
<?php function handle_process_checkout() { // Start session if not already started if (session_status() === PHP_SESSION_NONE) { session_start(); } // Verify nonce for security if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'process_checkout_nonce')) { wp_send_json_error(['message' => 'Unauthorized request. Invalid or missing nonce.'], 403); return; } // Capture and validate incoming data $selected_price = isset($_POST['selected_price']) ? floatval($_POST['selected_price']) : 0.00; $valid_options = ['cash_price', 'regular_price']; if (empty($selected_price_option) || !in_array($selected_price_option, $valid_options)) { wp_send_json_error(['message' => 'Invalid or missing selected_price_option.'], 400); return; } $quote_id = sanitize_text_field($_SESSION['quote_id'] ?? ($_POST['quote_id'] ?? '')); if (empty($quote_id)) { wp_send_json_error(['message' => 'Missing quote ID.'], 400); return; } // Ensure session data exists for prices and cast as float $cash_price = isset($_SESSION['cash_price']) ? floatval($_SESSION['cash_price']) : 0.00; $regular_price = isset($_SESSION['regular_price']) ? floatval($_SESSION['regular_price']) : 0.00; // Determine the selected price value $selected_price_value = ($selected_price_option === 'cash_price') ? $cash_price : $regular_price; // Update session with selected price value $_SESSION['selected_price'] = $selected_price_value; // Update the database with the numeric value global $wpdb; $table_name = $wpdb->prefix . 'jet_cct_instant_quotes'; $result = $wpdb->update( $table_name, [ 'selected_price' => $selected_price_value // Use the calculated value ], [ 'quote_id' => $quote_id ], [ '%f' // Float format for the selected_price ], [ '%s' // String format for quote_id ] ); // Check for database errors if ($result === false) { wp_send_json_error([ 'message' => 'Database update failed.', 'query_error' => $wpdb->last_error ?: 'No database error reported.', ], 500); return; } // Respond with success wp_send_json_success([ 'message' => 'Selected price saved successfully.', 'selected_price' => $selected_price_value, ]); } // Register the AJAX handlers for logged-in and logged-out users add_action('wp_ajax_nopriv_process_checkout', 'handle_process_checkout'); // For non-logged-in users add_action('wp_ajax_process_checkout', 'handle_process_checkout'); // For logged-in users
Hata kodu 400 aliyorum