修复支付系统核心问题
- pay.php: 超时时间从30分钟改为5分钟 - poller_online.php: 修复debugLog未定义变量+保留输出缓冲区 - recharge_orders_api.php: 修复对账结果JSON双重包装 - player.php: 支付成功后锁定按钮+续支付检测处理已支付订单 解决: 1. 订单超时改为5分钟 2. Java轮询500错误(debugLog变量未定义) 3. 对账结果显示undefined 4. 支付成功后按钮状态修复
This commit is contained in:
+2
-2
@@ -255,8 +255,8 @@ function createOrder($token) {
|
||||
$db = getDB();
|
||||
ensurePayOrdersTable($db);
|
||||
|
||||
// ★ 防重复支付:检查玩家是否有未支付的已有订单(仅30分钟内有效)
|
||||
$staleThreshold = time() - 1800; // 30分钟过期
|
||||
// ★ 防重复支付:检查玩家是否有未支付的已有订单(仅5分钟内有效)
|
||||
$staleThreshold = time() - 300; // 5分钟过期
|
||||
$checkStmt = $db->prepare("SELECT out_trade_no, submit_params, money, bond_amount, created_at FROM pay_orders WHERE player_name = :p AND status = 'created' AND created_at >= :stale ORDER BY created_at DESC LIMIT 1");
|
||||
$checkStmt->bindValue(':p', $player, SQLITE3_TEXT);
|
||||
$checkStmt->bindValue(':stale', $staleThreshold, SQLITE3_INTEGER);
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 0);
|
||||
|
||||
while (ob_get_level() > 0) { ob_end_clean(); }
|
||||
// 只在直接执行时清除输出缓冲区,被包含时保留
|
||||
if (!defined('POLLER_NO_AUTO_RUN')) {
|
||||
while (ob_get_level() > 0) { ob_end_clean(); }
|
||||
}
|
||||
|
||||
// ===== 配置 =====
|
||||
$PLATFORM_DB_HOST = 'localhost';
|
||||
@@ -30,6 +33,7 @@ $SQLITE_DB_PATH = __DIR__ . '/../db/web.db';
|
||||
|
||||
if (!function_exists('debugLog')) {
|
||||
function debugLog($msg, $ctx = []) {
|
||||
$logFile = __DIR__ . '/../db/debug.log';
|
||||
$ts = date('Y-m-d H:i:s');
|
||||
$entry = "[$ts] $msg";
|
||||
if ($ctx) $entry .= ' | Context: ' . json_encode($ctx, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
@@ -140,7 +140,10 @@ function handleReconcile() {
|
||||
error('对账脚本执行异常');
|
||||
}
|
||||
|
||||
success($result);
|
||||
// 直接输出结果,不再用 success() 包装(避免双重 JSON)
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($result, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+14
-3
@@ -1102,9 +1102,18 @@ if ($currentVersion !== $BUILD_VERSION) {
|
||||
(async () => {
|
||||
try {
|
||||
const res = await api('pay.php', {action: 'query_order', out_trade_no: lastNo});
|
||||
if (res.success && res.data && res.data.status === 'created') {
|
||||
if (res.success && res.data) {
|
||||
const st = document.getElementById('rechargeStatus');
|
||||
const btn = document.getElementById('rechargeBtn');
|
||||
if (res.data.status === 'paid') {
|
||||
// 已支付:清除本地记录,锁定按钮
|
||||
localStorage.removeItem('sdf1_last_recharge_no');
|
||||
st.innerHTML = '<span style="color:var(--green)">✅ 此订单已支付完成。</span>';
|
||||
btn.disabled = true;
|
||||
btn.textContent = '✅ 支付完成';
|
||||
btn.onclick = null;
|
||||
} else if (res.data.status === 'created') {
|
||||
// 未支付:显示继续支付
|
||||
btn.textContent = '🔄 继续支付 ¥' + (res.data.money || '0.01');
|
||||
btn.onclick = async function() {
|
||||
try {
|
||||
@@ -1132,6 +1141,8 @@ if ($currentVersion !== $BUILD_VERSION) {
|
||||
st.innerHTML = '<span style="color:var(--yellow)">⚠️ 您有一笔未完成的订单,<a href="javascript:void(0)" onclick="document.getElementById(\'rechargeBtn\').click()" style="color:var(--accent)">点此继续支付</a></span>';
|
||||
document.getElementById('rechargeQueryBtn').style.display = 'block';
|
||||
}
|
||||
// 如果是 expired 或其他状态,不处理,保持默认按钮
|
||||
}
|
||||
} catch (e) {
|
||||
localStorage.removeItem('sdf1_last_recharge_no');
|
||||
}
|
||||
@@ -1186,10 +1197,10 @@ if ($currentVersion !== $BUILD_VERSION) {
|
||||
if (res.data.status === 'paid') {
|
||||
st.innerHTML = '<span style="color:var(--green)">✅ 支付成功!游戏内债券发放中,请稍候刷新「余额查询」。</span>';
|
||||
if (rechargePollTimer) { clearInterval(rechargePollTimer); rechargePollTimer = null; }
|
||||
// 支付成功后清除本地记录 + 恢复按钮
|
||||
// 支付成功后清除本地记录 + 锁定按钮
|
||||
localStorage.removeItem('sdf1_last_recharge_no');
|
||||
const btn = document.getElementById('rechargeBtn');
|
||||
if (btn) { btn.disabled = false; btn.textContent = '🅰️ 支付宝支付 ¥0.01'; btn.onclick = startRecharge; }
|
||||
if (btn) { btn.disabled = true; btn.textContent = '✅ 支付完成'; btn.onclick = null; }
|
||||
} else {
|
||||
st.innerHTML = '<span style="color:var(--dim)">⏳ 订单处理中(' + (res.message || '等待支付平台通知') + ')…</span>';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user