File manager - Edit - /home/webapp69.cm.in.th/u69319090037/Shop/api/views/payment_settings.php
Back
<?php /** * Payment Settings Page (QR Code PromptPay Config) * CMTC Shopping */ require_once __DIR__ . '/../includes/header.php'; require_once __DIR__ . '/../includes/navbar.php'; require_login(); require_permission($db, 'system_settings'); // ============================================================ // PASSCODE LOCK SYSTEM // ============================================================ // Default passcode can be set in system_settings table column // 'payment_passcode'. Falls back to '1234' if not set. // ============================================================ $correct_passcode = $sys_settings['payment_passcode'] ?? '1234'; $passcode_session_key = 'payment_settings_unlocked_' . md5($correct_passcode); // Handle passcode submit $passcode_error = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['check_passcode'])) { $entered = trim($_POST['passcode'] ?? ''); if ($entered === $correct_passcode) { $_SESSION[$passcode_session_key] = true; } else { $passcode_error = 'รหัสผ่านไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง'; } } // Handle lock (logout passcode session) if (isset($_GET['lock'])) { unset($_SESSION[$passcode_session_key]); header("Location: payment_settings.php"); exit(); } // Check if unlocked $is_unlocked = !empty($_SESSION[$passcode_session_key]); // If NOT unlocked → show passcode screen and stop if (!$is_unlocked): ?> <div class="d-flex"> <?php require_once __DIR__ . '/../includes/sidebar.php'; ?> <main class="flex-grow-1 p-4 d-flex align-items-center justify-content-center" style="min-height: 80vh; background-color: var(--bs-body-bg);"> <div class="card border-0 shadow-sm glass-card p-5 text-center" style="max-width: 440px; width: 100%;"> <div class="mb-3"> <div class="bg-danger-subtle text-danger rounded-circle d-flex align-items-center justify-content-center mx-auto shadow-sm" style="width: 70px; height: 70px;"> <i class="bi bi-shield-lock-fill fs-2"></i> </div> </div> <h5 class="fw-bold mb-1">เข้าถึงข้อมูลสำคัญความปลอดภัยสูง</h5> <p class="text-muted small mb-4">กรุณากรอกรหัสผ่านความปลอดภัย (Passcode) เพื่อเปิดใช้งานหน้าจัดการการเงินของระบบ</p> <?php if (!empty($passcode_error)): ?> <div class="alert alert-danger py-2 small mb-3"><?php echo $passcode_error; ?></div> <?php endif; ?> <form method="POST"> <div class="mb-3"> <input type="password" name="passcode" class="form-control form-control-lg text-center fw-bold letter-spacing-3" placeholder="••••" autocomplete="off" autofocus style="letter-spacing: 0.5em; font-size: 1.4rem;"> </div> <button type="submit" name="check_passcode" class="btn btn-primary w-100 py-2 fw-bold"> <i class="bi bi-lock-fill me-1"></i> ปลดล็อกรหัสผ่าน </button> </form> <div class="mt-3"> <a href="dashboard.php" class="text-muted small text-decoration-none"> <i class="bi bi-arrow-left me-1"></i>กลับหน้าแดชบอร์ด </a> </div> </div> </main> </div> <?php require_once __DIR__ . '/../includes/footer.php'; exit(); endif; // ============================================================ // END PASSCODE LOCK — content below shows only when unlocked // ============================================================ $error = ""; $success = ""; // Auto create table + ensure all columns exist try { $db->exec(" CREATE TABLE IF NOT EXISTS `payment_settings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `promptpay_no` varchar(50) DEFAULT NULL, `account_name` varchar(255) DEFAULT NULL, `bank_name` varchar(100) DEFAULT NULL, `bank_account_no` varchar(50) DEFAULT NULL, `qr_image` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); $chk = $db->query("SELECT COUNT(*) FROM payment_settings")->fetchColumn(); if ($chk == 0) { $db->exec("INSERT INTO payment_settings (promptpay_no, account_name, bank_name, bank_account_no) VALUES ('0888888888', 'แผนกวิชาเทคนิคคอมพิวเตอร์', 'ธนาคารกรุงไทย', '123-4-56789-0')"); } } catch (Exception $e) {} // Handle Passcode Change $passcode_change_error = ''; $passcode_change_success = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['change_passcode'])) { if (!validate_csrf_token($_POST['csrf_token'] ?? '')) { $passcode_change_error = "โทเค็นความปลอดภัยไม่ถูกต้อง"; } else { $old_code = trim($_POST['old_passcode'] ?? ''); $new_code = trim($_POST['new_passcode'] ?? ''); $confirm = trim($_POST['confirm_passcode'] ?? ''); if ($old_code !== $correct_passcode) { $passcode_change_error = "รหัสผ่านเดิมไม่ถูกต้อง"; } elseif (strlen($new_code) < 4) { $passcode_change_error = "รหัสผ่านใหม่ต้องมีความยาวอย่างน้อย 4 ตัวอักษร"; } elseif ($new_code !== $confirm) { $passcode_change_error = "รหัสผ่านใหม่และการยืนยันไม่ตรงกัน"; } else { try { // Ensure column exists try { $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `payment_passcode` varchar(100) DEFAULT '1234'"); } catch(Exception $e) {} $db->prepare("UPDATE system_settings SET payment_passcode = ?")->execute([$new_code]); // Re-unlock session with new passcode $new_session_key = 'payment_settings_unlocked_' . md5($new_code); unset($_SESSION[$passcode_session_key]); $_SESSION[$new_session_key] = true; log_activity($db, 'edit', "เปลี่ยนรหัสผ่านหน้าตั้งค่าการชำระเงิน"); $passcode_change_success = "เปลี่ยนรหัสผ่านสำเร็จเรียบร้อยแล้ว รหัสใหม่: <strong>" . htmlspecialchars($new_code) . "</strong>"; } catch (Exception $e) { $passcode_change_error = "เกิดข้อผิดพลาด: " . $e->getMessage(); } } } } // Handle Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_payment'])) { if (!validate_csrf_token($_POST['csrf_token'] ?? '')) { $error = "โทเค็นความปลอดภัยไม่ถูกต้อง"; } else { $promptpay_no = trim($_POST['promptpay_no'] ?? ''); $account_name = trim($_POST['account_name'] ?? ''); $bank_name = trim($_POST['bank_name'] ?? ''); $bank_account_no = trim($_POST['bank_account_no'] ?? ''); try { $stmt = $db->prepare("UPDATE payment_settings SET promptpay_no = ?, account_name = ?, bank_name = ?, bank_account_no = ? LIMIT 1"); $stmt->execute([$promptpay_no, $account_name, $bank_name, $bank_account_no]); // Handle QR image if (isset($_FILES['qr_image']) && $_FILES['qr_image']['error'] === UPLOAD_ERR_OK) { $upload_res = upload_image($_FILES['qr_image'], 'qrcode', 'qr'); if ($upload_res['success']) { $db->prepare("UPDATE payment_settings SET qr_image = ? LIMIT 1")->execute([$upload_res['filename']]); } } log_activity($db, 'edit', "แก้ไขการตั้งค่าช่องทางชำระเงิน"); $success = "บันทึกข้อมูลช่องทางชำระเงินเรียบร้อยแล้ว"; } catch (Exception $e) { $error = "เกิดข้อผิดพลาด: " . $e->getMessage(); } } } $pay_settings = $db->query("SELECT * FROM payment_settings LIMIT 1")->fetch(); ?> <div class="d-flex"> <?php require_once __DIR__ . '/../includes/sidebar.php'; ?> <main class="flex-grow-1 p-4" style="background-color: var(--bs-body-bg);"> <div class="d-flex justify-content-between align-items-center mb-4"> <div> <h3 class="fw-bold mb-0"><i class="bi bi-credit-card-2-front-fill text-primary me-2"></i>ตั้งค่าการชำระเงิน</h3> <nav aria-label="breadcrumb"> <ol class="breadcrumb mb-0"> <li class="breadcrumb-item"><a href="dashboard.php">แดชบอร์ด</a></li> <li class="breadcrumb-item active">ตั้งค่าการชำระเงิน</li> </ol> </nav> </div> <div> <a href="payment_settings.php?lock=1" class="btn btn-outline-danger btn-sm" onclick="return confirm('ล็อคหน้านี้และต้องกรอกรหัสใหม่เพื่อเข้า?');"> <i class="bi bi-lock-fill me-1"></i> ล็อคหน้านี้ </a> </div> </div> <?php if (!empty($error)): ?> <div class="alert alert-danger mb-4"><?php echo $error; ?></div> <?php endif; ?> <?php if (!empty($success)): ?> <div class="alert alert-success mb-4"><?php echo $success; ?></div> <?php endif; ?> <div class="row g-4"> <!-- Left: Form --> <div class="col-lg-7"> <div class="card border-0 shadow-sm glass-card p-4"> <h5 class="fw-bold mb-4"><i class="bi bi-qr-code text-primary me-2"></i>ข้อมูล PromptPay & บัญชีธนาคาร</h5> <form method="POST" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" value="<?php echo get_csrf_token(); ?>"> <div class="row g-3 mb-3"> <div class="col-md-6"> <label class="form-label fw-semibold">เบอร์ / เลขบัตรประชาชน พร้อมเพย์</label> <input type="text" name="promptpay_no" class="form-control" value="<?php echo sanitize($pay_settings['promptpay_no'] ?? ''); ?>" placeholder="เช่น 08xxxxxxxx หรือเลข 13 หลัก"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">ชื่อบัญชีรับเงิน *</label> <input type="text" name="account_name" class="form-control" value="<?php echo sanitize($pay_settings['account_name'] ?? ''); ?>" required> </div> </div> <div class="row g-3 mb-4"> <div class="col-md-6"> <label class="form-label fw-semibold">ชื่อธนาคาร</label> <input type="text" name="bank_name" class="form-control" value="<?php echo sanitize($pay_settings['bank_name'] ?? ''); ?>" placeholder="เช่น ธนาคารกรุงไทย"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">เลขที่บัญชีธนาคาร</label> <input type="text" name="bank_account_no" class="form-control" value="<?php echo sanitize($pay_settings['bank_account_no'] ?? ''); ?>" placeholder="xxx-x-xxxxx-x"> </div> </div> <div class="mb-4"> <label class="form-label fw-semibold">รูป QR Code สำหรับรับเงิน</label> <?php if (!empty($pay_settings['qr_image'])): ?> <div class="mb-2 text-center"> <img src="<?php echo base_url('uploads/qrcode/' . sanitize($pay_settings['qr_image'])); ?>" class="img-fluid rounded border p-2 shadow-sm" style="max-height: 200px;"> <p class="text-muted small mt-1">QR Code ปัจจุบัน</p> </div> <?php endif; ?> <input type="file" name="qr_image" class="form-control" accept="image/jpeg,image/png,image/webp"> <small class="text-muted">อัปโหลดรูป QR Code PromptPay ใหม่ (รองรับ JPG, PNG, WEBP)</small> </div> <button type="submit" name="save_payment" class="btn btn-primary px-4"> <i class="bi bi-check-circle me-1"></i> บันทึกช่องทางชำระเงิน </button> </form> </div> </div> <!-- Right: Preview --> <div class="col-lg-5"> <div class="card border-0 shadow-sm glass-card p-4"> <h5 class="fw-bold mb-3"><i class="bi bi-eye text-muted me-2"></i>ตัวอย่างหน้าชำระเงิน</h5> <div class="card border rounded p-3 text-center bg-body-secondary"> <?php if (!empty($pay_settings['qr_image'])): ?> <img src="<?php echo base_url('uploads/qrcode/' . sanitize($pay_settings['qr_image'])); ?>" class="img-fluid rounded mb-2" style="max-height: 180px;"> <?php else: ?> <div class="bg-light border rounded d-flex align-items-center justify-content-center mx-auto mb-3" style="width: 160px; height: 160px;"> <i class="bi bi-qr-code text-muted" style="font-size: 4rem;"></i> </div> <?php endif; ?> <div class="fw-bold text-primary fs-6">PromptPay: <?php echo sanitize($pay_settings['promptpay_no'] ?? '—'); ?></div> <div class="text-muted small mt-1">ชื่อบัญชี: <?php echo sanitize($pay_settings['account_name'] ?? '—'); ?></div> <?php if (!empty($pay_settings['bank_name'])): ?> <div class="text-muted small"><?php echo sanitize($pay_settings['bank_name']); ?> เลขที่: <?php echo sanitize($pay_settings['bank_account_no'] ?? ''); ?></div> <?php endif; ?> </div> <p class="text-muted small mt-3 mb-0 text-center">ข้อมูลด้านบนจะแสดงให้ลูกค้าเห็นในหน้า Checkout</p> </div> <!-- Change Passcode Card --> <div class="card border-0 shadow-sm glass-card p-4 mt-4"> <h5 class="fw-bold mb-3"><i class="bi bi-key-fill text-warning me-2"></i>เปลี่ยนรหัสผ่าน Passcode</h5> <?php if (!empty($passcode_change_error)): ?> <div class="alert alert-danger py-2 small mb-3"><?php echo $passcode_change_error; ?></div> <?php endif; ?> <?php if (!empty($passcode_change_success)): ?> <div class="alert alert-success py-2 small mb-3"><?php echo $passcode_change_success; ?></div> <?php endif; ?> <form method="POST"> <input type="hidden" name="csrf_token" value="<?php echo get_csrf_token(); ?>"> <div class="mb-3"> <label class="form-label fw-semibold">รหัสผ่านเดิม *</label> <input type="password" name="old_passcode" class="form-control" required placeholder="กรอกรหัสผ่านปัจจุบัน" autocomplete="off"> </div> <div class="row g-3"> <div class="col-md-6"> <label class="form-label fw-semibold">รหัสผ่านใหม่ * (ขั้นต่ำ 4 ตัว)</label> <input type="password" name="new_passcode" class="form-control" required placeholder="รหัสผ่านใหม่" minlength="4" autocomplete="new-password"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">ยืนยันรหัสผ่านใหม่ *</label> <input type="password" name="confirm_passcode" class="form-control" required placeholder="ยืนยันรหัสผ่านใหม่" minlength="4" autocomplete="new-password"> </div> </div> <div class="mt-3"> <button type="submit" name="change_passcode" class="btn btn-warning px-4"> <i class="bi bi-shield-check me-1"></i> เปลี่ยนรหัสผ่าน </button> </div> </form> </div> </div> </div> </main> </div> <?php require_once __DIR__ . '/../includes/footer.php'; ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings