Swal.fire({ icon: 'warning', title: 'Akses Ditolak!', text: 'Harap login terlebih dahulu.', confirmButtonColor: '#3085d6', confirmButtonText: 'OK' }).then((result) => { if (result.isConfirmed) { window.location='/login'; } }); "; exit; } $id_pembeli = $_SESSION['id_pembeli']; $stmt = $conn->prepare("SELECT nama_pembeli, alamat, saldo, email, no_hp FROM pembeli WHERE id_pembeli = ?"); $stmt->bind_param("i", $id_pembeli); $stmt->execute(); $pembeli_data = $stmt->get_result()->fetch_assoc(); // Ganti nama variabel agar tidak konflik $alamat_pengiriman_db = $pembeli_data['alamat']; // Alamat dari DB $saldo = $pembeli_data['saldo']; $email = $pembeli_data['email']; $no_hp = preg_replace('/^0/', '62', $pembeli_data['no_hp']); $nama_pembeli = $pembeli_data['nama_pembeli']; $stmt = $conn->prepare("SELECT c.id_cart, c.id_produk, c.jumlah, c.potong, p.nama_produk, p.harga_jual, p.stok FROM cart c JOIN produk p ON c.id_produk = p.id_produk WHERE c.id_pembeli = ?"); $stmt->bind_param("i", $id_pembeli); $stmt->execute(); $result = $stmt->get_result(); $keranjang = []; $total_harga_produk_checkout = 0; // Ganti nama variabel while ($row = $result->fetch_assoc()) { if ($row['jumlah'] > $row['stok']) { echo ""; exit; } $keranjang[] = $row; $total_harga_produk_checkout += $row['harga_jual'] * $row['jumlah']; // Gunakan variabel baru } if (empty($keranjang)) { echo ""; exit; } // Proses checkout if ($_SERVER['REQUEST_METHOD'] === 'POST') { $alamat_input_user = trim($_POST['alamat']); // Alamat yang diinput/diubah user di form $metode_pembayaran = $_POST['metode_pembayaran']; // Perhitungan ongkir HARUS berdasarkan alamat yang diinput user saat checkout, BUKAN dari DB // Ini penting karena user bisa mengubah alamat di form checkout $alamat_normal_checkout = strtolower(str_replace(['.', ',', '-', '_', '/', '\\'], ' ', $alamat_input_user)); $is_nganjuk_checkout = strpos($alamat_normal_checkout, 'nganjuk') !== false; $ongkos_kirim_checkout = 0; if ($total_harga_produk_checkout > 0) { // Gunakan total harga produk yang benar if ($total_harga_produk_checkout < 50000) { $ongkos_kirim_checkout = $is_nganjuk_checkout ? 0 : 5000; } elseif ($total_harga_produk_checkout >= 50000 && $total_harga_produk_checkout < 200000) { // Koreksi kondisi $ongkos_kirim_checkout = $is_nganjuk_checkout ? 3000 : 5000; } else { // total_harga_produk_checkout >= 200000 $ongkos_kirim_checkout = 10000; } } else { $ongkos_kirim_checkout = 0; } $total_pembayaran_checkout = $total_harga_produk_checkout + $ongkos_kirim_checkout; if ($metode_pembayaran === 'SALDO' && $saldo < $total_pembayaran_checkout) { echo ""; exit; } // Atur status order sesuai metode pembayaran $status_order = match($metode_pembayaran) { 'SALDO' => 'Pembayaran Sukses', 'QRIS' => 'Menunggu Pembayaran', 'COD' => 'Belum Dibayar', default => 'Menunggu Pembayaran' }; $conn->begin_transaction(); try { // Gunakan alamat yang diinput user untuk order $stmt = $conn->prepare("INSERT INTO orders (id_pembeli, alamat, metode_pembayaran, total_harga, ongkos_kirim, total_pembayaran, status_order) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("issddds", $id_pembeli, $alamat_input_user, $metode_pembayaran, $total_harga_produk_checkout, $ongkos_kirim_checkout, $total_pembayaran_checkout, $status_order); $stmt->execute(); $id_order = $stmt->insert_id; foreach ($keranjang as $item) { $stmt = $conn->prepare("INSERT INTO order_details (id_order, id_produk, jumlah, potong, harga) VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param("iiiii", $id_order, $item['id_produk'], $item['jumlah'], $item['potong'], $item['harga_jual']); $stmt->execute(); $stmt = $conn->prepare("UPDATE produk SET stok = stok - ? WHERE id_produk = ?"); $stmt->bind_param("ii", $item['jumlah'], $item['id_produk']); $stmt->execute(); } if ($metode_pembayaran === 'SALDO') { $saldo_baru = $saldo - $total_pembayaran_checkout; $stmt = $conn->prepare("UPDATE pembeli SET saldo = ? WHERE id_pembeli = ?"); $stmt->bind_param("di", $saldo_baru, $id_pembeli); $stmt->execute(); } $stmt = $conn->prepare("DELETE FROM cart WHERE id_pembeli = ?"); $stmt->bind_param("i", $id_pembeli); $stmt->execute(); $conn->commit(); // Persiapan Email $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'chickycuts2025@gmail.com'; // Ganti dengan email Anda $mail->Password = 'etccszhnwgvvgxfx'; // Ganti dengan App Password Gmail Anda $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->setFrom('chickycuts2025@gmail.com', 'ChickyCuts'); $mail->addAddress($email, $nama_pembeli); $mail->isHTML(true); $mail->Subject = 'Pesanan Anda (#'.$id_order.') Telah Diproses - ChickyCuts'; $mail->Body = "

Halo {$nama_pembeli},

Terima kasih telah melakukan pemesanan di ChickyCuts! Pesanan Anda dengan nomor #{$id_order} telah kami terima.

Detail Pesanan:

"; if ($metode_pembayaran === 'QRIS' && $status_order === 'Menunggu Pembayaran') { // Anda bisa menyertakan gambar QRIS atau link ke halaman pembayaran QRIS di sini jika perlu // Misalnya: $mail->Body .= "

Silakan lakukan pembayaran melalui QRIS yang tersedia di halaman checkout atau klik di sini.

"; $mail->Body .= "

Silakan lakukan pembayaran melalui QRIS yang telah ditampilkan pada halaman checkout.

"; } $mail->Body .= "

Kami akan segera memproses pesanan Anda setelah pembayaran dikonfirmasi (jika bukan COD atau Saldo).

Terima kasih telah berbelanja dengan kami.

Salam Hangat,
Tim ChickyCuts

"; $mail->send(); // Tidak perlu menampilkan alert sukses email di sini, cukup alert sukses pesanan } catch (Exception $e) { // Email gagal dikirim, tapi pesanan tetap diproses. Mungkin log errornya. // error_log("Mailer Error: " . $mail->ErrorInfo); // Anda bisa menambahkan alert di sini jika ingin memberitahu user email gagal, // tapi biasanya cukup jika pesanan utamanya sukses. } // Notifikasi Sukses Pesanan Utama echo ""; exit; // Penting untuk menghentikan eksekusi setelah mengirim respons } catch (Exception $e) { $conn->rollback(); // error_log("Checkout Error: " . $e->getMessage()); // Log error echo ""; exit; } } else { // Jika bukan POST request, redirect atau tampilkan error echo ""; exit; } ?>