diff --git a/admin/chat_iframe.php b/admin/chat_iframe.php index 59ec7c0..c95b84d 100644 --- a/admin/chat_iframe.php +++ b/admin/chat_iframe.php @@ -5,39 +5,84 @@ require_once '../includes/currency_helper.php'; $pdo = db(); $user_id = $_GET['user_id'] ?? null; -if (!$user_id) die("User ID required"); +if (!$user_id) die("需要用户 ID"); -// Mark as read +// 标记为已读 $pdo->prepare("UPDATE messages SET is_read = 1 WHERE user_id = ? AND sender = 'user'")->execute([$user_id]); -// Handle Message Sending +// 处理消息发送 if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['message'])) { $msg = $_POST['message']; $pdo->prepare("INSERT INTO messages (user_id, sender, message, type) VALUES (?, 'admin', ?, 'text')")->execute([$user_id, $msg]); exit; } -// Handle Recharge Actions +// 处理充值/提现操作 if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action'])) { $oid = $_POST['order_id']; - if ($_POST['action'] == 'match') { + if ($_POST['action'] == 'match_deposit') { $bank = $_POST['bank_name'] ?? ''; $name = $_POST['account_name'] ?? ''; $number = $_POST['account_number'] ?? ''; $remarks = $_POST['remarks'] ?? ''; $info = "🏦 银行名称:$bank\n👤 收款姓名:$name\n💳 收款账号:$number\n📝 备注说明:$remarks"; $pdo->prepare("UPDATE fiat_orders SET status = 'matched', bank_account_info = ? WHERE id = ?")->execute([$info, $oid]); + // 发送消息给用户 $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, $info]); - $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, "✅ 匹配成功!收款账户已下发。"]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, "✅ 匹配成功!收款账户已下发,请在转账后上传凭证。"]); + echo ""; + exit; + } elseif ($_POST['action'] == 'send_withdraw_format') { + $format = "📋 请提供以下提现收款信息:\n\n1. 银行/钱包名称:\n2. 收款人姓名:\n3. 账号/地址:\n4. 支行/网络:"; + $pdo->prepare("UPDATE fiat_orders SET status = 'matched', bank_account_info = ? WHERE id = ?")->execute([$format, $oid]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, $format]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, "✅ 请按上述格式回复您的收款详情。"]); + echo ""; + exit; } elseif ($_POST['action'] == 'complete') { - $stmt = $pdo->prepare("SELECT amount, currency FROM fiat_orders WHERE id = ?"); + $stmt = $pdo->prepare("SELECT order_type, usdt_amount, currency FROM fiat_orders WHERE id = ?"); $stmt->execute([$oid]); $order = $stmt->fetch(); - $pdo->prepare("UPDATE users SET balance = balance + ? WHERE id = ?")->execute([$order['amount'], $user_id]); - $pdo->prepare("UPDATE fiat_orders SET status = 'completed' WHERE id = ?")->execute([$oid]); - $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, "🎉 充值已确认到账!"]); + + $pdo->beginTransaction(); + try { + if ($order['order_type'] === 'deposit') { + // 充值:增加余额 + $pdo->prepare("UPDATE users SET balance = balance + ? WHERE id = ?")->execute([$order['usdt_amount'], $user_id]); + $msg = "🎉 您的充值已确认到账!"; + } else { + // 提现:余额已在发起时扣除,这里仅标记完成 + $msg = "🎉 您的提现申请已处理完成,请查收!"; + } + $pdo->prepare("UPDATE fiat_orders SET status = 'completed' WHERE id = ?")->execute([$oid]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, $msg]); + $pdo->commit(); + } catch (Exception $e) { + $pdo->rollBack(); + die($e->getMessage()); + } + echo ""; + exit; } elseif ($_POST['action'] == 'reject') { - $pdo->prepare("UPDATE fiat_orders SET status = 'rejected' WHERE id = ?")->execute([$oid]); + $stmt = $pdo->prepare("SELECT order_type, usdt_amount FROM fiat_orders WHERE id = ?"); + $stmt->execute([$oid]); + $order = $stmt->fetch(); + + $pdo->beginTransaction(); + try { + if ($order['order_type'] === 'withdrawal') { + // 提现拒绝:退还余额 + $pdo->prepare("UPDATE users SET balance = balance + ? WHERE id = ?")->execute([$order['usdt_amount'], $user_id]); + } + $pdo->prepare("UPDATE fiat_orders SET status = 'rejected' WHERE id = ?")->execute([$oid]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$user_id, "❌ 您的申请已被拒绝,如有疑问请咨询客服。"]); + $pdo->commit(); + } catch (Exception $e) { + $pdo->rollBack(); + die($e->getMessage()); + } + echo ""; + exit; } } @@ -45,7 +90,7 @@ $user = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $user->execute([$user_id]); $userData = $user->fetch(); -$orders = $pdo->prepare("SELECT * FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'submitting', 'matched') ORDER BY id DESC"); +$orders = $pdo->prepare("SELECT * FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'paid') ORDER BY id DESC"); $orders->execute([$user_id]); $pending_orders = $orders->fetchAll(); ?> @@ -55,82 +100,123 @@ $pending_orders = $orders->fetchAll();
- (UID: ) - Balance: USDT + (UID: ) + 余额: USDT
-
+
+
待处理申请 (ACTIVE REQUESTS)
-
- - +
+
+ : + USDT +
+
+ -
- - - - - - -
- -
- - View Proof - -
+ + + + +
+ + + + + +
+
+ +
+ + + +
+ + +
+
- +
-
+ - +
- +
- +
- +
- +
+ + \ No newline at end of file diff --git a/admin/orders.php b/admin/orders.php index 137e202..9f943ec 100644 --- a/admin/orders.php +++ b/admin/orders.php @@ -16,7 +16,7 @@ if (isset($_POST['action'])) { $orderStmt->execute([$id]); $order = $orderStmt->fetch(); if ($order) { - $msg = "您的充值订单 #$id 匹配成功。请刷新支付页面查看收款账户详情并按要求完成转账。"; + $msg = "📢 您的充值订单 #$id 匹配成功.\n收款账户信息:\n$info\n请按要求完成转账并上传凭证。"; $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], $msg]); } } elseif ($_POST['action'] == 'complete') { @@ -24,7 +24,7 @@ if (isset($_POST['action'])) { $orderStmt->execute([$id]); $order = $orderStmt->fetch(); if ($order) { - $credit_amount = $order['usdt_amount'] > 0 ? $order['usdt_amount'] : $order['amount']; + $credit_amount = $order['usdt_amount']; $pdo->beginTransaction(); try { @@ -34,7 +34,7 @@ if (isset($_POST['action'])) { // Update transaction status $pdo->prepare("UPDATE transactions SET status = 'completed' WHERE user_id = ? AND type = 'deposit' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); - $msg = "您的充值 " . $credit_amount . " USDT 已确认到账。"; + $msg = "🎉 您的充值 " . $credit_amount . " USDT 已确认到账。"; $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], $msg]); $pdo->commit(); @@ -51,22 +51,15 @@ if (isset($_POST['action'])) { if ($order) { // Update transaction status $pdo->prepare("UPDATE transactions SET status = 'rejected' WHERE user_id = ? AND type = 'deposit' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); + $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], "❌ 您的充值申请 #$id 已被拒绝,请咨询客服。"]); } } } -$all_deposits = $pdo->query("SELECT o.*, u.username, u.uid FROM fiat_orders o JOIN users u ON o.user_id = u.id ORDER BY o.id DESC")->fetchAll(); - -usort($all_deposits, function($a, $b) { - $priority = ['matching' => 3, 'submitting' => 2, 'pending' => 2, 'matched' => 1, 'completed' => 0]; - $pA = $priority[$a['status']] ?? 0; - $pB = $priority[$b['status']] ?? 0; - if ($pA != $pB) return $pB - $pA; - return $b['id'] - $a['id']; -}); +$all_deposits = $pdo->query("SELECT o.*, u.username, u.uid FROM fiat_orders o JOIN users u ON o.user_id = u.id WHERE o.order_type = 'deposit' ORDER BY o.id DESC")->fetchAll(); $unread_msgs = $pdo->query("SELECT COUNT(*) FROM messages WHERE sender = 'user' AND is_read = 0")->fetchColumn(); -$pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE status IN ('matching', 'submitting')")->fetchColumn(); +$pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE status IN ('matching', 'paid')")->fetchColumn(); ?> @@ -87,9 +80,10 @@ $pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE stat .table th, .table td { padding: 12px; text-align: left; border-bottom: 1px solid var(--border); font-size: 0.85rem; } .status-badge { padding: 3px 8px; border-radius: 4px; font-size: 0.75rem; font-weight: bold; } .matching { background: rgba(255, 60, 0, 0.2); color: #ff3c00; border: 1px solid #ff3c00; } - .submitting { background: rgba(0, 192, 135, 0.2); color: #00c087; border: 1px solid #00c087; } + .paid { background: rgba(0, 192, 135, 0.2); color: #00c087; border: 1px solid #00c087; } .matched { background: rgba(55, 122, 255, 0.1); color: #377aff; } .completed { background: rgba(0, 192, 135, 0.1); color: #00c087; opacity: 0.6; } + .rejected { background: rgba(246, 70, 93, 0.1); color: #f6465d; } .btn-primary { background: var(--primary); color: black; border: none; padding: 8px 15px; border-radius: 6px; font-weight: bold; cursor: pointer; } @@ -122,7 +116,8 @@ $pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE stat - + # (UID: ) @@ -130,34 +125,57 @@ $pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE stat - + 查看凭证 - + 未上传 - + - + + + - +
- -
- - - -
- + +
+
+ + + +
+
+ + + +
+
+ - +
- \ No newline at end of file + diff --git a/admin/withdrawals.php b/admin/withdrawals.php index bfd1279..e81f3b3 100644 --- a/admin/withdrawals.php +++ b/admin/withdrawals.php @@ -9,70 +9,60 @@ $error_msg = ""; // Handle Actions if (isset($_POST['action'])) { $id = $_POST['order_id']; + $table = 'fiat_orders'; if ($_POST['action'] == 'complete') { - $pdo->prepare("UPDATE orders SET status = 'completed' WHERE id = ?")->execute([$id]); + $pdo->prepare("UPDATE $table SET status = 'completed' WHERE id = ?")->execute([$id]); - $orderStmt = $pdo->prepare("SELECT user_id, amount, currency, type FROM orders WHERE id = ?"); + $orderStmt = $pdo->prepare("SELECT user_id, usdt_amount FROM $table WHERE id = ?"); $orderStmt->execute([$id]); $order = $orderStmt->fetch(); if ($order) { // Update transaction status - $pdo->prepare("UPDATE transactions SET status = 'completed' WHERE user_id = ? AND type = 'withdraw' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); + $pdo->prepare("UPDATE transactions SET status = 'completed' WHERE user_id = ? AND type = 'withdrawal' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); - $msg = "您的提现 " . $order['amount'] . " USDT 已汇出,请查收。"; + $msg = "🎉 您的提现 " . $order['usdt_amount'] . " USDT 已汇出,请查收。"; $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], $msg]); } $success_msg = "确认成功,提现已处理。"; } elseif ($_POST['action'] == 'reject') { - $remark = !empty($_POST['remark']) ? $_POST['remark'] : '违反规定'; + $remark = !empty($_POST['remark']) ? $_POST['remark'] : '审核不通过'; - $orderStmt = $pdo->prepare("SELECT user_id, amount FROM orders WHERE id = ?"); + $orderStmt = $pdo->prepare("SELECT user_id, usdt_amount FROM $table WHERE id = ?"); $orderStmt->execute([$id]); $order = $orderStmt->fetch(); if ($order) { $pdo->beginTransaction(); try { - // Return balance - $pdo->prepare("UPDATE users SET balance = balance + ? WHERE id = ?")->execute([$order['amount'], $order['user_id']]); - $pdo->prepare("UPDATE orders SET status = 'rejected' WHERE id = ?")->execute([$id]); + // 退还余额 + $pdo->prepare("UPDATE users SET balance = balance + ? WHERE id = ?")->execute([$order['usdt_amount'], $order['user_id']]); + $pdo->prepare("UPDATE $table SET status = 'rejected' WHERE id = ?")->execute([$id]); - // Log return to transactions + // 记录退还到交易记录 $pdo->prepare("INSERT INTO transactions (user_id, type, amount, currency, status, description) VALUES (?, 'withdraw_return', ?, 'USDT', 'completed', ?)")->execute([ - $order['user_id'], $order['amount'], "Withdrawal #$id Rejected: $remark" + $order['user_id'], $order['usdt_amount'], "提现申请 #$id 被拒绝退回: $remark" ]); - // Update original transaction status - $pdo->prepare("UPDATE transactions SET status = 'rejected' WHERE user_id = ? AND type = 'withdraw' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); + // 更新原交易状态 + $pdo->prepare("UPDATE transactions SET status = 'rejected' WHERE user_id = ? AND type = 'withdrawal' AND description LIKE ?")->execute([$order['user_id'], "%#$id%"]); - $msg = "您的提现申请 #$id 已被拒绝,资金已退回您的余额。原因: " . $remark; + $msg = "❌ 您的提现申请 #$id 已被拒绝,资金已退回。原因: " . $remark; $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], $msg]); $pdo->commit(); - $success_msg = "拒绝成功"; + $success_msg = "已成功驳回提现申请。"; } catch (Exception $e) { $pdo->rollBack(); $error_msg = "操作失败: " . $e->getMessage(); } - } else { - $error_msg = "订单不存在。"; - } - } elseif ($_POST['action'] == 'send_format') { - $orderStmt = $pdo->prepare("SELECT user_id FROM orders WHERE id = ?"); - $orderStmt->execute([$id]); - $order = $orderStmt->fetch(); - if ($order) { - $format = "【出款格式】\n提现单号: #$id\n请确认您的收货地址及相关信息准确无误。管理员正在进行最后审核。"; - $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'admin', ?)")->execute([$order['user_id'], $format]); - $success_msg = "出款格式已发送。"; } } } -$withdrawals = $pdo->query("SELECT o.*, u.username, u.uid FROM orders o JOIN users u ON o.user_id = u.id WHERE o.type IN ('usdt', 'fiat') ORDER BY o.id DESC")->fetchAll(); +$withdrawals = $pdo->query("SELECT o.*, u.username, u.uid FROM fiat_orders o JOIN users u ON o.user_id = u.id WHERE o.order_type = 'withdrawal' ORDER BY o.id DESC")->fetchAll(); $unread_msgs = $pdo->query("SELECT COUNT(*) FROM messages WHERE sender = 'user' AND is_read = 0")->fetchColumn(); -$pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE status IN ('matching', 'submitting')")->fetchColumn(); +$pending_orders_count = $pdo->query("SELECT COUNT(*) FROM fiat_orders WHERE status IN ('matching', 'paid')")->fetchColumn(); $pending_kyc = $pdo->query("SELECT COUNT(*) FROM users WHERE kyc_status = 1")->fetchColumn(); ?> @@ -97,7 +87,8 @@ $pending_kyc = $pdo->query("SELECT COUNT(*) FROM users WHERE kyc_status = 1")->f .table th { background: #fafafa; color: #707a8a; font-weight: 600; } .status-badge { padding: 4px 10px; border-radius: 6px; font-size: 0.75rem; font-weight: bold; } - .pending { background: #fff9e6; color: #f0b90b; } + .matching { background: rgba(255, 60, 0, 0.2); color: #ff3c00; border: 1px solid #ff3c00; } + .paid { background: rgba(0, 192, 135, 0.2); color: #00c087; border: 1px solid #00c087; } .completed { background: #e6fff1; color: #03ad5d; } .rejected { background: #fff1f0; color: #f6465d; } @@ -108,7 +99,6 @@ $pending_kyc = $pdo->query("SELECT COUNT(*) FROM users WHERE kyc_status = 1")->f .btn { padding: 8px 15px; border: none; border-radius: 6px; cursor: pointer; font-size: 0.85rem; font-weight: 600; transition: 0.2s; } .btn-success { background: #03ad5d; color: white; } .btn-danger { background: #f6465d; color: white; } - .btn-info { background: #4facfe; color: white; } .btn:hover { opacity: 0.9; } input[type="text"] { padding: 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 0.85rem; outline: none; width: 120px; } @@ -151,55 +141,55 @@ $pending_kyc = $pdo->query("SELECT COUNT(*) FROM users WHERE kyc_status = 1")->f ID 用户 - 金额 (USDT) - 类型 - 详情 + 提现币种 + 金额 + 折算 USDT 状态 操作 - + # - () + (UID: ) + - - - + + + + - +
-
- - - -
- +
- +
- + -- - + - +
- + \ No newline at end of file diff --git a/api/check_order_status.php b/api/check_order_status.php index d53e349..c8c125f 100644 --- a/api/check_order_status.php +++ b/api/check_order_status.php @@ -1,26 +1,24 @@ 'unauthorized']); + echo json_encode(['success' => false, 'error' => 'Unauthorized']); exit; } $user_id = $_SESSION['user_id']; $pdo = db(); -$stmt = $pdo->prepare("SELECT status, bank_account_info FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'submitting') ORDER BY id DESC LIMIT 1"); +// Check for active orders (including 'paid' which means waiting for admin approval) +$stmt = $pdo->prepare("SELECT id, order_type, status, bank_account_info FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'paid') ORDER BY id DESC LIMIT 1"); $stmt->execute([$user_id]); $order = $stmt->fetch(); if ($order) { - echo json_encode([ - 'status' => $order['status'], - 'account_info' => $order['bank_account_info'] - ]); + echo json_encode(['success' => true, 'order' => $order]); } else { - echo json_encode(['status' => 'none']); + echo json_encode(['success' => true, 'order' => null]); } diff --git a/assets/pasted-20260214-020643-a75405ce.png b/assets/pasted-20260214-020643-a75405ce.png new file mode 100644 index 0000000..500a7f9 Binary files /dev/null and b/assets/pasted-20260214-020643-a75405ce.png differ diff --git a/assets/pasted-20260214-021651-5f5ff45e.png b/assets/pasted-20260214-021651-5f5ff45e.png new file mode 100644 index 0000000..b749806 Binary files /dev/null and b/assets/pasted-20260214-021651-5f5ff45e.png differ diff --git a/chat.php b/chat.php index 7ebbfba..aff0495 100644 --- a/chat.php +++ b/chat.php @@ -13,18 +13,32 @@ $stmt = $pdo->prepare("SELECT uid, username FROM users WHERE id = ?"); $stmt->execute([$user_id]); $user = $stmt->fetch(); -// Get user IP -$user_ip = $_SERVER['REMOTE_ADDR']; -if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { - $user_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; +// Check if there's an active deposit/withdrawal process +$stmt = $pdo->prepare("SELECT * FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'paid') ORDER BY id DESC LIMIT 1"); +$stmt->execute([$user_id]); +$active_order = $stmt->fetch(); + +$is_locked = (bool)$active_order; + +// Action to complete transfer/submission +if (isset($_GET['action']) && $_GET['action'] === 'complete_order' && $active_order) { + $stmt = $pdo->prepare("UPDATE fiat_orders SET status = 'paid' WHERE id = ?"); + $stmt->execute([$active_order['id']]); + + $type_text = ($active_order['order_type'] === 'deposit') ? "充值" : "提现"; + $msg = "✅ 用户已点击确认,$type_text 申请等待审核中。"; + $stmt = $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'user', ?)"); + $stmt->execute([$user_id, $msg]); + + header("Location: chat.php"); + exit; } // Fetch greeting message $stmt = $pdo->prepare("SELECT value FROM settings WHERE name = 'chat_greeting'"); $stmt->execute(); -$greeting = $stmt->fetchColumn() ?: 'Hello! Welcome to NovaEx official support. How can we help you today?'; +$greeting = $stmt->fetchColumn() ?: '您好!欢迎咨询 NovaEx 官方客服,请问有什么可以帮您?如果是充值咨询,请提供您的充值金额和币种。'; -// Handle POST request via AJAX if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) { $msg = trim($_POST['message']); if ($msg !== '') { @@ -43,48 +57,104 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) { #chat-box { flex: 1; overflow-y: auto; padding: 25px; display: flex; flex-direction: column; gap: 20px; background: #161a1e; scroll-behavior: smooth; } .msg-container { display: flex; flex-direction: column; transition: all 0.3s ease; } - .msg-content { max-width: 75%; padding: 12px 18px; border-radius: 18px; font-size: 14px; line-height: 1.6; } + .msg-content { max-width: 75%; padding: 12px 18px; border-radius: 18px; font-size: 14px; line-height: 1.6; position: relative; } + + .locked-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.85); backdrop-filter: blur(5px); z-index: 9999; display: flex; align-items: center; justify-content: center; } + .locked-modal { background: #1e2329; width: 90%; max-width: 500px; border-radius: 24px; padding: 40px; text-align: center; border: 1px solid var(--primary-color); } + + .account-modal { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 450px; background: #1e2329; border-radius: 24px; border: 1px solid var(--primary-color); z-index: 10001; padding: 30px; box-shadow: 0 20px 50px rgba(0,0,0,0.8); display: none; } + .modal-backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 10000; display: none; } + + .status-bar { background: rgba(240,185,11,0.1); border: 1px solid var(--primary-color); padding: 15px 25px; border-radius: 12px; margin-bottom: 15px; display: flex; align-items: center; justify-content: space-between; color: var(--primary-color); } + + #image-upload-btn:hover { background: #3b424d !important; color: #fcd535 !important; } + #image-upload-btn:disabled { opacity: 0.5; cursor: not-allowed; } -
-
+ + + + +
+ +
+
+ +
+
+
+
+
+ +
+ + + + + + + +
+
+ + +
-
+
-

NovaEx Support

+

官方客服中心

- Online + 24/7 全天候在线
UID:
-
IP:
+ 退出
- -
Connecting to support...
+
正在连接客服...
- - -
@@ -92,11 +162,31 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) {
+ + + + \ No newline at end of file diff --git a/chat_iframe.php b/chat_iframe.php index d417f8d..33c70f2 100644 --- a/chat_iframe.php +++ b/chat_iframe.php @@ -27,13 +27,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) { @@ -41,13 +46,19 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) {
+ + - +
\ No newline at end of file diff --git a/deposit.php b/deposit.php index 465c325..b2d9c65 100644 --- a/deposit.php +++ b/deposit.php @@ -6,84 +6,227 @@ require_once 'db/config.php'; require_once 'includes/currency_helper.php'; $db = db(); -$stmt = $db->prepare("SELECT id FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'submitting') ORDER BY id DESC LIMIT 1"); +// 检查是否有正在进行的订单,如果有则跳转到聊天 +$stmt = $db->prepare("SELECT id FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'paid') ORDER BY id DESC LIMIT 1"); $stmt->execute([$_SESSION['user_id']]); if ($stmt->fetch()) { header("Location: chat.php"); exit; } $fiat_rates = get_fiat_rates(); $fiat_currencies_info = [ - 'USD' => 'US Dollar', 'EUR' => 'Euro', 'GBP' => 'British Pound', 'CNY' => 'Chinese Yuan', 'HKD' => 'Hong Kong Dollar', 'JPY' => 'Japanese Yen', 'KRW' => 'Korean Won', 'SGD' => 'Singapore Dollar', 'TWD' => 'Taiwan Dollar', 'THB' => 'Thai Baht', 'VND' => 'Vietnamese Dong', 'IDR' => 'Indonesian Rupiah', 'MYR' => 'Malaysian Ringgit', + 'USD' => ['name' => '美元', 'flag' => '🇺🇸'], + 'EUR' => ['name' => '欧元', 'flag' => '🇪🇺'], + 'GBP' => ['name' => '英镑', 'flag' => '🇬🇧'], + 'CNY' => ['name' => '人民币', 'flag' => '🇨🇳'], + 'HKD' => ['name' => '港币', 'flag' => '🇭🇰'], + 'JPY' => ['name' => '日元', 'flag' => '🇯🇵'], + 'KRW' => ['name' => '韩元', 'flag' => '🇰🇷'], + 'SGD' => ['name' => '新加坡元', 'flag' => '🇸🇬'], + 'TWD' => ['name' => '台币', 'flag' => '🇹🇼'], + 'THB' => ['name' => '泰铢', 'flag' => '🇹🇭'], + 'VND' => ['name' => '越南盾', 'flag' => '🇻🇳'], + 'IDR' => ['name' => '印尼盾', 'flag' => '🇮🇩'], + 'MYR' => ['name' => '马来西亚林吉特', 'flag' => '🇲🇾'], ]; ?> -
-
- -
-

-

+ + +
+
+
+ 个人中心 +

充值

+

通过多种通道安全地为您的账户充值

-
-
-
-
-

-
-
-
-
-
-

USDT

-
+
+ +
+
安全保障
+
所有交易均经过加密处理,24/7 全天候监控。您的资金受到我们的安全资产基金保护。
-
-
- -
-
- +
+
+
+

1. 选择充值方式

+
+
+
+
法币充值
+
银行转账 / 全球 OTC
+
+
+
+
USDT 充值
+
USDT (TRC20, ERC20, BEP20)
+
-
- -
-
- - -
- -
- +
+ + + + \ No newline at end of file diff --git a/header.php b/header.php index b1b7518..18f9fa7 100644 --- a/header.php +++ b/header.php @@ -99,9 +99,6 @@ $site_logo = $settings['site_logo'] ?? null; #mobileMenuBtn { display: block !important; margin-right: 15px; } } - /* Payout Popup */ - #payout-popup { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--card-bg); border: 1px solid var(--border-color); padding: 30px; border-radius: 20px; z-index: 3000; display: none; width: 90%; max-width: 400px; box-shadow: 0 30px 60px rgba(0,0,0,0.8); } - .dropdown-content { display: none; position: absolute; background-color: var(--card-bg); min-width: 200px; box-shadow: 0 15px 40px rgba(0,0,0,0.6); z-index: 1001; border: 1px solid var(--border-color); border-radius: 12px; top: 100%; right: 0; overflow: hidden; } .dropdown:hover .dropdown-content { display: block; } .dropdown-content a { color: white; padding: 14px 20px; text-decoration: none; display: flex; align-items: center; gap: 12px; font-size: 14px; transition: background 0.2s; } @@ -110,15 +107,6 @@ $site_logo = $settings['site_logo'] ?? null; -
-
- -

-
-
- -
- @@ -268,24 +256,4 @@ $site_logo = $settings['site_logo'] ?? null; const chat = document.getElementById('cs-chat-window'); chat.style.display = chat.style.display === 'flex' ? 'none' : 'flex'; } - - - setInterval(async () => { - try { - const resp = await fetch('api/get_messages.php'); - const res = await resp.json(); - if (res.success && res.data) { - const payoutMsg = res.data.find(m => m.message.includes('【出款格式】')); - if (payoutMsg) { - const popup = document.getElementById('payout-popup'); - const content = document.getElementById('payout-content'); - if (popup.style.display !== 'block') { - content.innerText = payoutMsg.message; - popup.style.display = 'block'; - } - } - } - } catch (e) {} - }, 5000); - \ No newline at end of file diff --git a/matching.php b/matching.php index 1e98f4e..173a611 100644 --- a/matching.php +++ b/matching.php @@ -13,30 +13,52 @@ $pdo = db(); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['amount'])) { $amount = (float)$_POST['amount']; - $type = $_POST['type'] ?? 'fiat'; + $order_type = $_POST['order_type'] ?? 'deposit'; // 'deposit' or 'withdrawal' + $type = $_POST['type'] ?? 'fiat'; // 'fiat' or 'usdt' $currency = $_POST['currency'] ?? 'USDT'; $network = $_POST['network'] ?? ''; $fiat_rates = get_fiat_rates(); $rate = $fiat_rates[$currency] ?? 1.0; - $usdt_amount = ($rate > 0) ? ($amount / $rate) : $amount; + + if ($order_type === 'deposit') { + $usdt_amount = ($rate > 0) ? ($amount / $rate) : $amount; + } else { + // Withdrawal: amount is already in USDT (usually) + $usdt_amount = $amount; + + // For withdrawal, we check balance first + $stmt = $pdo->prepare("SELECT balance FROM users WHERE id = ?"); + $stmt->execute([$user_id]); + $balance = (float)$stmt->fetchColumn(); + + if ($balance < $usdt_amount) { + die("余额不足"); + } + + // Deduct balance immediately for withdrawal + $stmt = $pdo->prepare("UPDATE users SET balance = balance - ? WHERE id = ?"); + $stmt->execute([$usdt_amount, $user_id]); + } $expires_at = date('Y-m-d H:i:s', strtotime('+30 minutes')); $pdo->beginTransaction(); try { // Create order with status 'matching' - $stmt = $pdo->prepare("INSERT INTO fiat_orders (user_id, amount, usdt_amount, exchange_rate, currency, status, expires_at, created_at) VALUES (?, ?, ?, ?, ?, 'matching', ?, CURRENT_TIMESTAMP)"); - $stmt->execute([$user_id, $amount, $usdt_amount, $rate, $currency, $expires_at]); + $stmt = $pdo->prepare("INSERT INTO fiat_orders (user_id, order_type, amount, usdt_amount, exchange_rate, currency, status, expires_at, created_at) VALUES (?, ?, ?, ?, ?, ?, 'matching', ?, CURRENT_TIMESTAMP)"); + $stmt->execute([$user_id, $order_type, $amount, $usdt_amount, $rate, $currency, $expires_at]); $order_id = $pdo->lastInsertId(); // Log to transactions table - $stmt = $pdo->prepare("INSERT INTO transactions (user_id, type, amount, currency, status, description) VALUES (?, 'deposit', ?, 'USDT', 'pending', ?)"); - $stmt->execute([$user_id, $usdt_amount, "Deposit Request #$order_id ($amount $currency)"]); + $desc = ($order_type === 'deposit') ? "充值申请 #$order_id ($amount $currency)" : "提现申请 #$order_id ($amount $currency)"; + $stmt = $pdo->prepare("INSERT INTO transactions (user_id, type, amount, currency, status, description) VALUES (?, ?, ?, 'USDT', 'pending', ?)"); + $stmt->execute([$user_id, $order_type, ($order_type === 'deposit' ? $usdt_amount : -$usdt_amount), $desc]); - // Explicit notification message for admin/chat + // Notification message for admin/chat + $type_text = ($order_type === 'deposit') ? "充值" : "提现"; $method_info = ($type === 'usdt') ? "USDT ($network)" : "法币 ($currency)"; - $msg = "升匆 用户发起充值,金额 $amount $currency\n订单号: #$order_id\n方式: $method_info"; + $msg = "📢 用户发起 $type_text 请求\n金额: $amount $currency\n订单号: #$order_id\n方式: $method_info"; $stmt = $pdo->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'user', ?)"); $stmt->execute([$user_id, $msg]); @@ -49,6 +71,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['amount'])) { die("Error: " . $e->getMessage()); } } else { - header("Location: deposit.php"); + header("Location: index.php"); exit; -} +} \ No newline at end of file diff --git a/profile.php b/profile.php index bebd00d..426c578 100644 --- a/profile.php +++ b/profile.php @@ -15,169 +15,302 @@ $user = $stmt->fetch(); $kyc_status = $user['kyc_status'] ?? 0; $kyc_labels = [ - 0 => __('kyc_none', '未认证'), - 1 => __('kyc_pending', '审核中'), - 2 => __('kyc_approved', '已认证'), - 3 => __('kyc_rejected', '未通过'), + 0 => '未认证', + 1 => '审核中', + 2 => '已认证', + 3 => '未通过', ]; $kyc_colors = [0 => '#888', 1 => '#f0b90b', 2 => 'var(--success-color)', 3 => 'var(--danger-color)']; ?> -
+
- -
- -
-
- -
-
-
+ +
+
+
diff --git a/withdraw.php b/withdraw.php index 977f97c..fd064b6 100644 --- a/withdraw.php +++ b/withdraw.php @@ -14,199 +14,175 @@ $stmt = $db->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_SESSION['user_id']]); $user = $stmt->fetch(); +// Check for active orders +$stmt = $db->prepare("SELECT id FROM fiat_orders WHERE user_id = ? AND status IN ('matching', 'matched', 'paid') ORDER BY id DESC LIMIT 1"); +$stmt->execute([$_SESSION['user_id']]); +if ($stmt->fetch()) { header("Location: chat.php"); exit; } + $fiat_rates = get_fiat_rates(); $fiat_currencies_info = [ - 'USD' => 'US Dollar', 'EUR' => 'Euro', 'GBP' => 'British Pound', 'CNY' => 'Chinese Yuan', 'HKD' => 'Hong Kong Dollar', 'JPY' => 'Japanese Yen', 'KRW' => 'Korean Won', 'SGD' => 'Singapore Dollar', 'TWD' => 'Taiwan Dollar', 'THB' => 'Thai Baht', 'VND' => 'Vietnamese Dong', 'IDR' => 'Indonesian Rupiah', 'MYR' => 'Malaysian Ringgit', + 'USD' => ['name' => '美元', 'flag' => '🇺🇸'], + 'EUR' => ['name' => '欧元', 'flag' => '🇪🇺'], + 'GBP' => ['name' => '英镑', 'flag' => '🇬🇧'], + 'CNY' => ['name' => '人民币', 'flag' => '🇨🇳'], + 'HKD' => ['name' => '港币', 'flag' => '🇭🇰'], + 'JPY' => ['name' => '日元', 'flag' => '🇯🇵'], + 'KRW' => ['name' => '韩元', 'flag' => '🇰🇷'], + 'SGD' => ['name' => '新加坡元', 'flag' => '🇸🇬'], + 'TWD' => ['name' => '台币', 'flag' => '🇹🇼'], + 'THB' => ['name' => '泰铢', 'flag' => '🇹🇭'], + 'VND' => ['name' => '越南盾', 'flag' => '🇻🇳'], + 'IDR' => ['name' => '印尼盾', 'flag' => '🇮🇩'], + 'MYR' => ['name' => '马来西亚林吉特', 'flag' => '🇲🇾'], ]; $error = ''; - -if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $type = $_POST['type'] ?? 'usdt'; - $amount = (float)($_POST['amount'] ?? 0); - $currency = $_POST['currency'] ?? 'USDT'; - $trading_pass = $_POST['trading_password'] ?? ''; - $address = $_POST['address'] ?? ''; - $network = $_POST['network'] ?? ''; - $bank_info = $_POST['bank_info'] ?? ''; - - if ($trading_pass !== $user['trading_password']) { - $error = "Incorrect trading password / 交易密码错误"; - } elseif ($amount > $user['balance']) { - $error = "Insufficient balance / 余额不足"; - } elseif ($amount < 10) { - $error = "Minimum withdrawal amount is 10 USDT / 最低提现金额为 10 USDT"; - } else { - $db->beginTransaction(); - try { - // Deduct balance (Freeze/Pre-deduct as per standard practice, Reject will return it) - $stmt = $db->prepare("UPDATE users SET balance = balance - ? WHERE id = ?"); - $stmt->execute([$amount, $_SESSION['user_id']]); - - // Log withdrawal order - $info = ($type === 'usdt') ? "USDT Network: $network, Address: $address" : "Fiat Currency: $currency, Bank Info: $bank_info"; - - // Calculate fiat amount if fiat type - $fiat_amount = $amount; - if ($type === 'fiat' && isset($fiat_rates[$currency])) { - $fiat_amount = $amount * $fiat_rates[$currency]; - } - - $stmt = $db->prepare("INSERT INTO orders (user_id, type, amount, currency, account_info, status) VALUES (?, ?, ?, ?, ?, 'pending')"); - $stmt->execute([$_SESSION['user_id'], $type, $amount, $currency, $info]); - $order_id = $db->lastInsertId(); - - // Log to transactions table - $stmt = $db->prepare("INSERT INTO transactions (user_id, type, amount, currency, status, description) VALUES (?, 'withdraw', ?, 'USDT', 'pending', ?)"); - $stmt->execute([$_SESSION['user_id'], -$amount, "Withdrawal Request #$order_id" . ($type === 'fiat' ? " ($fiat_amount $currency)" : "")]); - - // Insert notification message for chat - $method_info = ($type === 'usdt') ? "USDT ($network)" : "法币 ($currency)"; - $msg = "👈 用户申请提现,金额 $amount USDT\n订单号: #$order_id\n方式: $method_info\n详情: $info\n请及时处理。"; - $stmt = $db->prepare("INSERT INTO messages (user_id, sender, message) VALUES (?, 'user', ?)"); - $stmt->execute([$_SESSION['user_id'], $msg]); - - $db->commit(); - echo ""; - exit; - } catch (Exception $e) { - $db->rollBack(); - $error = "System error, please try again later / 系统错误,请稍后再试: " . $e->getMessage(); - } - } -} ?> -
-
- - + -
-

-

+
+
+
+ 个人中心 +

提现

+

安全地将您的资产提取至个人账户

-
- +
+ +
-
-
-
-
- -
-
-

-

-
-
-
- -
-
-
- -
-
-

-

Blockchain Transfer

-
-
-
-
- -
-
- - -
+