Commit Graph
100 Commits
Author SHA1 Message Date
ypsdf1 1188da01a9 修补单慢根因: queryOrder两条检测路径全失效——getPlatformDB未先加载pay_secrets致平台库Access denied; getPayKeys()未定义致query_order全500。补加载secrets+改用loadPayKeys+API查询包try/catch 2026-10-08 11:04:53 +08:00
ypsdf1 c1009088ce 补单器修正误用的getResult: execute()直接返回SQLite3Result(7.4/8.2/8.5实测), 接住返回值直接fetchArray 2026-10-08 10:04:37 +08:00
ypsdf1 7dc7d01cd0 补单/查询移除前缀归属门槛:本地已有完整订单号即认本端,平台按完整订单号精确匹配 2026-10-08 01:15:07 +08:00
ypsdf1 7932bd176c 修复补单器SQLite3Stmt::fetchArray致命错误: prepare().execute()在PHP7返回Stmt需getResult()再fetchArray, 修复后平台已付订单正常补单 2026-10-08 00:57:04 +08:00
ypsdf1 ba5352121e 订单号固定格式改递增序列(00000000→CYZJ00000001起);补单器改定向补单:查本地活跃完整订单号精确匹配平台,不再按前缀批量扫 2026-10-07 23:54:42 +08:00
ypsdf1 629c16ec84 修复payComposeOrderNo三段式实现:玩家名段由payGuardLen统一拼装裁剪,清除占位残留变量 2026-10-07 21:22:40 +08:00
ypsdf1 aadb3373e8 充值订单号改读pay.md配置区:固定格式(纯数字0随机/非纯数字6位递增保底)与组合规则双分支,前缀pay.md优先+历史前缀双兼容保补单,删CALLBACK_PORT/GAME_SERVER_HOST死配置 2026-10-07 21:03:35 +08:00
ypsdf1 eb01cb9ea8 新功能的预热 2026-10-07 20:46:35 +08:00
ypsdf1 e20d648b08 领地对账接入:alignmentCatConfig新增lands配置,与Java端72列指纹逐字对齐,多退少补 2026-10-07 17:37:50 +08:00
ypsdf1 e76b38cd7d 对账退侧修复:bans已过期封禁不再计入extra,消除每轮收回1条永不收敛 2026-10-07 16:21:40 +08:00
ypsdf1 59cca9e04a 修复syncPlayerIps变更比对bug:old_ip误比导致PHP端IP永不更新、对账changed恒大于0 2026-10-07 11:46:33 +08:00
ypsdf1 dbb4843db6 对账退侧:清理 player_ip_changes 中两边 users 都不存在的孤儿IP行
- 新增 prune_orphans 开关(仅 ips 类别开启):check_alignment 算出 extra 后,
  把「Java 没有 且 PHP users 表也没有」的行直接删除,让两边对账真正收敛到 0。
- 三重保险:只清 extra、只清 PHP users 里也不存在的玩家、Java 上报 0 条时绝不动表。
- 背景:线上实测 203 条历史残留(玩家已删、IP 行还在),Java 侧无处可收,
  导致每轮对账空转「收回203 / 实际写入本地0条」,两边永远差 203 条。
2026-10-07 11:17:09 +08:00
ypsdf1 6a6cb9ec3c 订单前缀配置化+新订单号格式,补单脚本同读前缀;新增online_heartbeat心跳与sync_webtx_receipts回执补推端点 2026-10-06 18:18:22 +08:00
ypsdf1 bd47d25165 修复领地同步500:老库web_area_lands缺y_min/y_max/synced_at三列,ALTER迁移补列 2026-10-06 00:04:40 +08:00
ypsdf1 a5871f6761 对账配套:credentials字段映射与online类别、admins去整表删除、canon null整数列归一 2026-10-05 22:29:51 +08:00
ypsdf1 6cc8dbf582 交易对账改双向:check_tx_alignment 返回 extra_ids(PHP有Java无的),新增 pull_tx 交还完整流水;关键接口 set_time_limit 13秒内必答复、busy_timeout 收紧到6秒 2026-10-05 17:46:34 +08:00
ypsdf1 d2f42bef62 补单/轮询日志收敛:只有报错或真正补到单/有数据才写debug.log,无合适数据静默返回
- poller_online.php:去掉每次轮询必写的「补单开始/正在连接MySQL/MySQL DSN/连接成功」4 行;「补单完成」改为 processed>0 才写;连接失败、补单处理、交易写入等成功/报错日志保留
- sync.php:checkWebLoginConfirmations、checkPendingWebLogins 的 count=0 轮询日志改为有数据才写(每 4 秒一次是膨胀主因);check_web_login_verified 去掉「插件查询/未找到/无验证记录」三条无数据日志;三处 catch 补 debugLog 让报错进 debug.log
2026-10-05 14:40:31 +08:00
ypsdf1 1bd51cbcdf log_maintain 加 4.5MB 水位线:避免清理后贴着 5MB 上限导致每次写入都全量重建 2026-10-05 13:41:17 +08:00
ypsdf1 ce489d1450 debug.log 保留策略:只留最近3天+≤5MB,任一超标即清理到两条件同时满足 2026-10-05 13:35:39 +08:00
ypsdf1 e040e8c994 boot恢复模式不再404死胡同:持boot凭据的请求一律302回引导配置页
- security.php 新增 secBootRecoveryRedirect():secGatePage 遇到「不在 IP 白名单但持有效 boot 凭据」的请求,改 302 送回 admin_2fa_setup.php(唯一豁免页),不再返回 nginx 404;secBootAuthenticate 增加凭据预判(无 boot 参数、无会话 cookie、无活动会话则直接判失败),避免路由覆盖面变大后给每个探测请求都 session_start() 刷 session 文件。
- admin.php 令牌层改 secTokenGate(true):admin.php?boot=<引导令牌> 才能进入恢复路由(原先在令牌层就 404);页面对非白名单 IP 依旧不渲染。
- admin_2fa.php 持 boot 但不在白名单 → 直接送回配置页,不再掉进 admin_login.php / admin.php?token= 的 404 弹簧。
- admin_2fa_setup.php:boot 模式隐藏「← 返回」、顶部加恢复指引横幅、后台唯一入口下加 404 警告;新增  修正「刚保存白名单但 ADMIN_IP_WHITELIST 常量本请求内未刷新」导致横幅误报。
- 背景(db/security.log 实录):2026-10-05 09:35:58 boot_unlock 成功,09:35:59 即被 admin.php ip_block,09:42 只能靠宝塔手工改 config.php 脱困。
2026-10-05 10:56:35 +08:00
ypsdf1 99da971fbf 新增 check_tx_alignment 交易对账接口:返回PHP流水笔数/最大序列号,及指定序列号中缺失的部分,供Java只补中断批次 2026-10-04 23:52:35 +08:00
ypsdf1 f7aedc6fae Web 端同步 bad_effects 负面效果字段
- land_api.php / sync.php:建表迁移、INSERT、bindValue 补 bad_effects
- convertEffectsForFrontend 增加负面效果的管道格式 → JSON 数组转换
- 字段白名单加 bad_effects,上限校验改为增益+负面合计口径
- player.php:负面效果独立 UI 区块,addGiveEffect 抽成通用 landEffectAdd,
  新增 addBadEffect(效果档位与 Java 端同口径)
2026-10-04 22:57:37 +08:00
youpaishidifu 398a9db380 新增robots.json模板和关联文件(已脱敏) 2026-10-04 22:06:42 +08:00
ypsdf1 c880f1eb9e 修正药效生存上限表:村庄英雄5级、挖掘疲劳3级、伤害吸收4级、不祥类5级 2026-10-04 20:32:44 +08:00
ypsdf1 386c9d861e 药效等级上限改按各效果的生存可获取上限,同步 Java 端 b64e7e3
用户纠正口径:原版最大上限 = 生存模式正常探索/合成/建造能拿到的最大值,
不是 /effect 的作弊上限(amplifier 255 = 强度 256)。
  · 抗性提升 信标最高 2 级
  · 海豚的恩惠 只有潮涌能量块一个来源 → 最高 1 级

改动:
- api/land_api.php 新增 getSurvivalMaxLevel():39 个效果逐项查表
  (可升 II 的 11 个 + 单一来源恒 1 的 + 生存无来源的 + 未知兜底 1),
  与 Java 端 AreaProtection.getSurvivalMaxLevel() 134 个 case 标签
  逐项对账一致
- 新增 getEffectLevelCap():min(生存上限, 用户组 max_effect_level)
  两层同时生效;用户组配 256 也突破不了生存硬顶
- handleUpdateLandField 写入 give_effects 时改为逐个效果封顶,
  此前是统一按 256 放行,等于没封
- getLandMaxEffectLevel 注释澄清它只是「用户组软顶」,真正封顶看 getEffectLevelCap
- admin.php 两处说明文案改为生存可获取上限口径,举例抗性提升 2 级、
  海豚的恩惠 1 级
2026-10-04 19:57:23 +08:00
ypsdf1 4160c60aa6 新增用户组药效等级上限配置,与Java端双向打通
配合 Java 端 6f92028(原版药效强度上限 256)。原版 /effect 的
amplifier 硬上限是 255,即药效强度 1~256,此前 Web 侧封顶写死
255 且各建表点口径不一,本次统一为 max_effect_level 配置项。

改动:
- web_user_groups 增加 max_effect_level 列(默认 256)
  · sync.php / land_api.php / core.php 全部 8 处建表块补列
  · 3 处迁移表补 ALTER 条目,老库自动升级
- api/sync.php syncUserGroups:Java 推送时接收并写入 max_effect_level,
  <=0 或超过 256 一律归一到 256(原版硬上限不可突破)
- api/land_api.php 新增 getLandMaxEffectLevel():按领地所有者所属
  最高优先级用户组取上限,无组则 256;handleUpdateLandField 写入
  give_effects 时改用该上限 clamp(原先硬编码 255)
- api/land_api.php update_user_group 读写补该字段
- admin.php 用户组新建/编辑弹窗补「药效等级上限」输入框
  (1~256,默认 256),并附原版范围说明;两处提交参数同步带上

规则:普通玩家(未加入任何用户组)固定按 256 封顶,严禁超限;
加入用户组后按组配置封顶,填 256 即不额外限制。
2026-10-04 19:26:05 +08:00
ypsdf1 419b677aa9 修复工单上传图片误判+用户组max_effects配置同步 2026-10-04 14:48:43 +08:00
ypsdf1 fe1ed613ba 工单管理支持上传图片(兰空图床转存)
- 新增 lsky.php:兰空图床 API 客户端,token 缓存+提前60秒续签+401自动重签重试
- 新增 lsky_keys.php:图床凭据模板(仓库仅占位符,真值只在服务器,永不上传)
- api/ticket.php:新增 upload_image 动作,限 png/jpg、单张≤2048K、内容与后缀必须一致、同会话每分钟限12次;web_tickets 增 images 列(JSON 数组,上限3张,URL 仅限自家图床)
- core.php:权威建表补 images 列 + 老库幂等 ALTER 迁移
- player/admin 两端:上传即暂存、光标处插入 [图片N] 滚动占位符、上限3张;提交时随工单入库
- player/admin/service 三端详情:占位符还原为 markdown 图片,未引用图片补在末尾
2026-10-04 10:16:37 +08:00
ypsdf1 c6b05d72c8 安全:pay_poller.php 摘出仓库转为 release 模板,真实 MySQL 账密不再入库
- api/pay_poller.php 从 git 索引移除并加入 .gitignore(同 pay_secrets.php 处理)
- 本地文件改为 REPLACE_ME_* 占位符模板,硬编码的 kH3C3LLinNwYdTF5 /
  sRhsdxrpHBhmSsp8 / PAY_MD5_KEY 全部摘除(原文件备份为 .orig_backup)
- deploy_php_only.py 补 pay_secrets.php / pay_poller.php 排除项,防止批量部署把
  线上真值覆盖回旧密码
- 修复 should_exclude 通配符不生效:deploy_*.py 等 glob 原先字面比较永远不命中,
  改为 fnmatch,避免部署脚本(含 FTP 明文账密)被传到公网站点根
2026-10-02 23:19:25 +08:00
ypsdf1 7f513b9fa1 充值补单只认本方RE订单:平台多商户库不再整表拉取,杜绝垃圾充值单刷屏 2026-10-02 21:43:23 +08:00
ypsdf1 9ee8023d90 领地权限与面积限制接口:补生物蛋/涂蜡刮蜡两权限字段,新增退费比例与面积限制配置项 2026-10-02 19:31:20 +08:00
ypsdf1 5912c6fd76 引导初始化:管理密码首次由部署者自设,解开占位符密码无法保存配置的死结 2026-10-02 17:10:39 +08:00
ypsdf1 e18d8df22f 限流第四层新增凭据放行:引导模式/入口令牌/boot/后台会话不再被挂起白屏 2026-10-02 15:40:49 +08:00
ypsdf1 196e20868e 安全闸门最小化信息透露:非白名单请求统一返 nginx 原生 404,新增 DB 引导标记
- secGatePage / secGateApi 不再回 403(页面 HTML 与 JSON),一律 secNginx404(),
  探测者分不清是文件不存在还是被拦截;拒绝仍写 db/security.log。
- 新增 secIsBootstrapped() 双判据:config SEC-UPDATE 区已有令牌(既有站点即刻生效)
  或 web.db 的 sec_bootstrap 标记表有行(secWriteConfig 保存时写入)。
- 全新部署首次访问(两者皆空)为引导模式:放行并把 admin.php 跳到 admin_2fa_setup.php,
  配齐白名单/访问令牌/2FA 后一保存即自动转强制;读库异常从严按已引导。
- secTokenGate 引导模式不强制,已引导后照旧 ?token= 否则 404。
- setup 页状态卡片新增「门禁状态」展示;config.php 注释同步 404 与引导标记说明。
- 不调用 SQLite3::enableExceptions(false):PHP 8.4 该写法触发 E_DEPRECATED,
  提前输出会把 nginx404 的状态行挤掉(404 变 200),改由 @ + try/catch 兼容新旧版本。
2026-10-02 13:42:02 +08:00
youpaishidifu 23c40df6b1 删除仓库内不需要的db文件夹(服务器需要仓库不需要) 2026-10-01 23:10:01 +08:00
ypsdf1 c0e95b6c73 正版验证页:人机验证挂件与卡片边框对齐(同边框色/圆角、内容居中) 2026-10-01 17:41:36 +08:00
ypsdf1 293d7b283c 修复:主脚本注释含字面量script闭合标签导致页面截断 2026-10-01 16:08:39 +08:00
ypsdf1 8fa7eb5c95 用户端 player.php 接入人机验证挂件:三个登录入口统一挂载并提交前取 token 2026-10-01 15:39:10 +08:00
ypsdf1 1a221330dc config.php 验证码段改为单开关二选一:CF/VA 取值与行内说明写清,全站厂商统一由 CAPTCHA_PROVIDER 决定,密钥仍留 captcha_keys.php 2026-10-01 15:11:31 +08:00
ypsdf1 b138171a7c 修复人机验证挂件:CF 挂件自行加载 Turnstile SDK,解决后台「验证组件加载失败」 2026-10-01 14:25:51 +08:00
ypsdf1 ea5d476825 补上admin_login与api/admin遗漏的captcha_guard require(此前调用cgWidgetHtml/cgEnforce但未引入库,线上报undefined function) 2026-10-01 14:03:58 +08:00
ypsdf1 17d53c40a0 三大场景接入人机验证:新增captcha_guard.php统一校验库与CAPTCHA_PROVIDER配置,管理员登录/用户后台账密登录/正版验证浏览器提交三处接入;captcha_keys.php清空为可入库的空模板并加填写说明,部署脚本排除密钥文件防覆盖线上真值 2026-10-01 13:38:29 +08:00
ypsdf1 4f498a80c6 fix: 验证码测试页切VAPTCHA V4(V3域名全部NXDOMAIN):SDK换c4.vaptcha.com/src/v4.js、服务端改v41官方verify+本地HMAC双方式、修PHP8.5 curl_close弃用污染JSON;.gitignore排除captcha_keys.php 2026-10-01 11:25:01 +08:00
ypsdf1 5400856785 fix: 2FA取数参数名定为t(WAF复测矩阵:token+≥32位hex被拦404,t=全长度可过,POST body可过) 2026-10-01 10:57:32 +08:00
ypsdf1 2e4ddcbaea fix: 2FA二维码token回退裸hex64,查询参数名保留token(WAF矩阵验证v1_前缀与t=长hex被拦) 2026-10-01 10:46:34 +08:00
ypsdf1 1eb898adea 2FA二维码token改v1_前缀+查询参数名t换token:规避WAF对32位以上纯hex查询串的404拦截 2026-10-01 10:37:59 +08:00
ypsdf1 b86d29b34a 新增验证码接口测试页captcha_test.php:上下布局同时接入CF Turnstile与VAPTCHA(v3),密钥四级回退(captcha_keys/config/URL/robots.json),内置siteverify与vaptcha服务端校验代理,暂不接入登录流程 2026-10-01 10:24:04 +08:00
ypsdf1 b5b252d1b7 新增玩家2FA二维码展示端:api/twofa.php(secret推送10分钟载荷+token取回)、twofa_qr.php(内联二维码库纯展示页)——2FA校验全在Java,PHP只做显示器 2026-10-01 10:17:29 +08:00
ypsdf1 eb741beeb4 更新.gitignore以屏蔽密钥文件 2026-10-01 10:06:19 +08:00
ypsdf1 186e670400 SN管理:修正顶层签发入口里被转义成字面量的 emoji 2026-09-30 17:41:53 +08:00
ypsdf1 43fd8e2891 SN管理:顶层办理签发入口(玩家ID+设备类型直发),详情页旧签发按钮移除 2026-09-30 17:32:08 +08:00
ypsdf1 b6983f99e4 新增第四层安全防护:全局限流20次/分钟/IP,白名单与带secret的内部调用豁免,超限挂起连接不返回数据 2026-09-30 15:56:16 +08:00
ypsdf1 4c2e075667 配置页防回车误触修复:回车不再命中首个提交按钮「重新生成令牌」 2026-09-30 13:30:48 +08:00
ypsdf1 27da2b5c05 SN日志动作列中文化:admin.php与player.php新增SN_ACTION_CN映射,覆盖issue_admin/cancel_force等全部动作值 2026-09-30 12:31:17 +08:00
ypsdf1 a97f9274cc 管理端 issue 命令 reason 文案修正:办理签发单独文案,不再误标为管理员强制执行 2026-09-30 12:20:11 +08:00
ypsdf1 f033e71095 SN管理端新增 issue 办理签发命令:两条件硬校验并分别提示,isForce 固定为 0;管理端详情页加入办理签发按钮与确认文案 2026-09-30 12:11:49 +08:00
ypsdf1 51e418ac16 需求4护栏:重置访问密钥不再关闭二次验证——security.php新增2FA快照/语义指纹/回滚/写后比对四函数,rotate_token与save_whitelist走最小写入+护栏,误关即回滚报错 2026-09-30 11:19:00 +08:00
ypsdf1 b7b2647ef1 需求3脱敏:config.php改为占位符分发(敏感信息不入库),清除admin.php公网前端13处与land_api.php的硬编码SECRET_KEY,改为服务端注入/常量比对 2026-09-30 11:18:41 +08:00
ypsdf1 a46737d64b SN注销冷静期分流:管理员强制注销跳过1小时冷静期,代办注销保持三条件门槛+1小时冷静 2026-09-29 23:57:27 +08:00
ypsdf1 c46c9ebdfe 紧急加固三层:admin.php 入口令牌门禁 + 2FA 扫码绑定与精确诊断
第三层(新增,config.php 的 SEC_ACCESS_TOKEN):
- 只有 admin.php?token=<令牌> 才放行,缺/错令牌一律返回 nginx 原生 404
  (与"文件真的不存在"逐字节一致,探测者无从判断),令牌检查置于白名单之前
- 登录接口在密码校验通过后才下发 token,2FA 通过与收银台跳转由服务端补拼
- 入口页加 Referrer-Policy: no-referrer,防令牌经外链 Referer 泄露
- 配置页展示后台唯一入口地址,支持一键重新生成令牌

第一层修复(2FA 验证码"无效"):
- secTotpVerify 容错窗口 ±30 秒扩到 ±90 秒
- 新增 secTotpDiagnose:失败时区分"密钥没对上"与"设备时钟偏移多少秒"并给出处置指引
- Base32 解码兼容空格/连字符与 0/1/8/9 手误,避免密钥被静默截短
- 验证页倒计时与服务器时间显示改用服务端时钟基准
- 密钥生成改幂等,"重新生成"二次确认,防止已扫码密钥被误作废

第二层(二维码):
- admin_2fa_setup.php 内联 qrcode-generator(MIT) 生成 otpauth 二维码,离线可用
- 后台侧边栏新增"安全配置"入口;admin_2fa_setup.php?boot= 在白名单 IP 下同样生效

已通过线上端到端验证 22 项 + 二维码 OpenCV 往返解码校验。
2026-09-29 22:55:46 +08:00
ypsdf1 fd03189f31 SN三条件门槛:报失/补办/注销统一前置校验与最小化提示(不透露未达标项),web_item_sn 新增 detached_at/own_chest,管理端详情展示逐条判定并拆分强制注销/代办注销 2026-09-29 20:22:20 +08:00
ypsdf1 52e07ec9de fix: SN回执幂等防止重复补发,后台命令下发后轮询回执直到出结果 2026-09-29 18:03:32 +08:00
ypsdf1 345e1e9a9b fix: SN目录快照不再把web_item_sn.cancel_time清零,保留PHP端已写入的注销时间 2026-09-29 16:48:51 +08:00
ypsdf1 045d9f60b8 SN接口:管理员命令带 is_force 强制标记(Java 侧仅本次绕过冷静期),注销前增加位置前置检查拒绝箱内/他人手上物品,命令回执按执行结果更新状态 2026-09-29 13:38:35 +08:00
ypsdf1 18bd1e9b19 feat: SN防伪后端 api/sn.php、8张SN数据表与玩家端/管理端SN页面 2026-09-29 11:16:32 +08:00
ypsdf1 4db131082c fix: 永久封禁玩家禁止登录Web后台、正版验证粘贴页响应异常时回查真实状态
- core.php 新增 playerWebBanReason():查 web_player_bans 名字封禁(永久/未过期),expire_time 兼容Java推送的毫秒单位;validateWebAccess 接入,商城/CDK/余额/token校验一律拒绝
- api/sync.php 四个登录入口全部拦截:validate_weblogin_token、web_login_request、send_email_code、verify_email_code
- api/minecraft_auth.php:success/error 清空输出缓冲保证纯JSON;新增 action=status 会话真实状态查询;粘贴页提交响应异常时回查状态,已验证则如实提示通过,不再误报"服务器响应异常"
2026-09-28 00:03:07 +08:00
ypsdf1 eaadc0bd64 chore: gitignore忽略本地开发文档《代码关联关系.md》 2026-09-27 21:44:51 +08:00
ypsdf1 f2b87325e1 feat: 封禁IP同步Web黑名单(须持游戏内/web token)、清空队列联动清理pending登录请求 2026-09-27 21:23:31 +08:00
ypsdf1 6a74dfee91 修复单件附魔书结算时 web_transactions 唯一约束冲突 2026-07-21 16:43:18 +08:00
ypsdf1 d92f1f47a9 安全加固: .gitignore添加deploy_*.py排除规则,移除deploy_php_only.py、sync.php.bak、debug_online.php的git跟踪 2026-07-20 13:56:59 +08:00
ypsdf1 c3d9c0925d 修复4个问题: 用户组购买确认弹窗、在线曲线清理、高频出售缓冲、每小时活跃数据 2026-07-20 13:18:58 +08:00
ypsdf1 312f40c94a 修复活动过期后仍走活动价格的bug:前端必须校验discount_active字段 2026-07-17 23:32:05 +08:00
ypsdf1 0098efda3f fix: 限时折扣过期时间改为当天0:00即过期 2026-07-17 17:17:59 +08:00
ypsdf1 1d5f500a28 fix: 限时折扣过期逻辑修复 + Minecraft OAuth功能改进 2026-07-17 16:51:38 +08:00
ypsdf1 ff83406013 minecraft_auth.php: 改用公共客户端ID实现OAuth,新增verify_code和paste_code_page端点 2026-07-17 14:02:38 +08:00
ypsdf1 d539cc10bf 改用Microsoft Graph User.Read scope(不依赖Xbox Live API权限) 2026-07-17 11:41:00 +08:00
ypsdf1 e30c37ef64 修改OAuth scope为XboxLive.signin 2026-07-17 11:36:20 +08:00
ypsdf1 51aaedc2b3 修复OAuth error回调路由:invalid_scope等错误也能正确显示 2026-07-17 11:34:48 +08:00
ypsdf1 b7c83903ca 修复Microsoft OAuth回调路由:自动检测code+state参数路由到callback 2026-07-17 11:15:08 +08:00
ypsdf1 65fc468ce1 新增Microsoft OAuth正版验证API
1. 新增minecraft_auth.php
   - 完整的Microsoft OAuth流程
   - 支持create_session/check_session/callback/verify_premium
   - 验证状态持久化到SQLite

2. 配置项在pay_secrets.php中(gitignored,手工FTP上传)
2026-07-17 10:23:07 +08:00
ypsdf1 ace705682c 新增支付邮件通知+玩家订单查询功能
1. 支付成功后自动发送付款凭据邮件(仅绑定邮箱的玩家)
   - handleNotify回调 + queryOrder补单两条路径均触发
   - 邮件包含订单号、商品、金额、到账债券、支付时间
   - 异步静默发送,不影响主流程

2. 玩家端新增「我的订单」页面
   - 后端新增my_orders action查询pay_orders表
   - 前端展示订单列表(状态标签、金额、债券、时间)
   - 支持刷新按钮
2026-07-16 23:31:34 +08:00
ypsdf1 b90eeb2bcd 更新MySQL连接信息:平台重建后数据库凭据变更 2026-07-16 22:22:27 +08:00
ypsdf1 7e3af6d7d7 添加折扣价格硬锁规则:优惠后价格必须小于原价,且不低于0.01元;售价低于0.01元的商品不支持折扣 2026-07-16 19:02:36 +08:00
ypsdf1 f3919a8715 实现折扣价格功能:数据库表、后端API、前端界面完整支持折扣价格字段 2026-07-16 18:33:21 +08:00
ypsdf1 00da16abb6 订正售罄≠下架:售罄商品仍展示仅禁止购买,仅下架(is_active=0)才隐藏;前端售罄按钮置灰 2026-07-16 17:38:01 +08:00
ypsdf1 5fcecdaefd 彻底修复库存0变-1:库存框改text+严格校验(空=无限,0=售罄,非法报错不再静默转-1) 2026-07-16 17:18:49 +08:00
ypsdf1 e2808276c0 修复库存=0误转为-1的bug + 盲盒显示??及随机消费语录 2026-07-16 16:48:31 +08:00
ypsdf1 a8303ba772 修复pay.php充值商品500错误:内联parseExpireDate函数(原函数仅在recharge_orders_api.php中定义) 2026-07-16 16:18:26 +08:00
ypsdf1 de589d2683 实现前端动态加载充值商品功能:从后端shop_configs表读取商品,支持选择商品支付 2026-07-16 15:33:27 +08:00
ypsdf1 433735d595 新增gitignore:忽略调试文件diag_db_content.php 2026-07-16 15:08:19 +08:00
ypsdf1 304bd8f9ef 修复充值商店配置500错误:getParam参数不匹配+前端防重复提交 2026-07-16 15:01:33 +08:00
ypsdf1 6da7f58281 新增充值商店配置管理功能:库存、临时优惠、售价、债券范围、上下架 2026-07-16 14:39:44 +08:00
ypsdf1 95630c7609 修复数据库分离: pay_orders→orders.db + web_transactions→web.db,双库不再混用 2026-07-16 14:03:50 +08:00
ypsdf1 61bc4672a9 修复支付锁定: 支付成功后恢复按钮允许发起新订单 2026-07-16 13:30:57 +08:00
ypsdf1 4afc2470b0 修复对账页面空白: 前端d.orders改为d.data.orders(success()包装格式不匹配) 2026-07-16 13:14:49 +08:00
ypsdf1 07689f235b 修复对账页面空白: pay_orders迁移到orders.db独立库+自动迁移逻辑 2026-07-16 12:36:27 +08:00
ypsdf1 e0bb61f23a 加固MySQL凭据: 默认值硬编码+全局变量显式设置 2026-07-16 12:22:10 +08:00
ypsdf1 ea20701db5 修复表名前缀: 添加global声明确保$PLATFORM_DB_PREFIX在函数内可用 2026-07-16 12:18:56 +08:00
ypsdf1 19d0cf1618 修复SQL语法错误: pay_order是MySQL保留字,加反引号 2026-07-16 12:12:48 +08:00
ypsdf1 4781996f08 修复MySQL连接: poller_online.php直接用常量替代全局变量 2026-07-16 12:04:59 +08:00