[2026.10.5]复刻「系统升级」全链路;打通云市场安装「未登录」闸门;老应用 id 映射与「刷新」功能
一、复刻齐博「系统升级」(云市场底数)
- 精读原版升级实现:各单元版本号存法、云端三个接口(取文件清单 / 取文件内容 / 取版本)、文件级增量升级流程(拉清单 → md5 比对 → 备份旧文件 → 覆盖 → 跑 SQL → 跑 PHP 迁移 → 回写版本号)。
- 客户端:5 个 PHP 控制器 + 升级页模板 + 4 套后台欢迎页模板全部改走
config('market.domain')/shop/,彻底脱离官方域名;新增配置项 market.php 指定自建商店地址。
- 服务端:升级控制器补齐 get_list_file / make_client_file / get_version / get_edition / check_md5 镜像接口,数据源为本地
upgrade_data/<应用id>/ 目录;发布文件树含冒烟标记文件、示例核心文件与迁移脚本。
- 验证:直连各接口 200 且 JSON 正确;用脚本忠实复刻客户端「下载 → 剥离完整性前缀 → md5 校验」链路,3 个文件字节级一致、md5 与清单全对。
二、打通云市场安装「未登录」(三轮定位,四个真根因)
- 根因 1(cookie 双名不匹配):站点开启 cookie 前缀后,前端用 jQuery 写的 cookie 服务端读不到 → 模板改为「裸名 + 前缀名」双写。
- 根因 2(参数名对不上):下载接口读的是 shop_token,而所有调用方传的是 appstore_token → 下载接口改为「先读 appstore_token、空再回退 shop_token」,与齐博原版约定对齐。
- 根因 3(令牌没被透传):令牌只存在浏览器 cookie,后端拼下载 URL 时没带上,且下载是由服务端直连发起、不携带浏览器 cookie → 前端请求追加双令牌参数 + 后端改为「URL 入参优先、cookie 兜底」;令牌改为自带「谁 + 何时 + 签名」并独立验真(12 小时有效)。
- 根因 4(管理员态无兜底):令牌原本只认前台会员登录态,而后台是管理员登录 → 增加管理员态兜底签发,管理员登录即可安装;匿名仍返回空令牌、保持拦截。
- 端到端验证:伪造管理员态取令牌 → 下载接口返回真实 ZIP(32674 字节、45 个条目,完整性校验无损坏);空令牌、签名错、篡改时间戳全部正确拒绝。
- 顺带把购买链路(付费应用)的跨域调用全部改为相对路径,否则付费应用同样装不上。
三、老用户「应用 id 对不上」——服务端加映射层
- 背景:官方云市场下线后复刻市场全新发布拿到新 id,而老站点本地库存的是官方旧 id,发到复刻端会「查无此包」。
- 关键发现:每个单元的关键词(模块目录名 / 插件名 / 钩子类名)重发到复刻市场也不变,可作为「旧 id ↔ 新 id」的稳定桥梁。
- 实现:新增 id 映射配置文件;升级控制器加映射解析方法,取文件清单改为「解析客户端上报的已装清单 → 逐条映射新 id → 只返回这些应用的文件」,核心程序 id 恒定纳入。
- 配套脚本:按目录名 join 生成映射文件;批量把老站点市场地址指向复刻市场(支持预演模式)。
四、模块 / 插件 / 风格新增「刷新」(文件级差异更新)
- 服务端新增「按单个应用取云端文件清单」接口;后台模块、插件、风格三处加刷新页:逐文件 md5 比对,列出「有变化 / 本地缺失」的文件,支持查看差异与单文件下载更新。
- 修「刷新页卡在正在获取」:模板里一处 JS 转义引号写在表达式位置,整段脚本语法错误、函数从未被定义 → 修正并加固(tbody 渲染 + 错误显式提示 + 迁移到 .done())。
- 修「权限检验失败」:新增的刷新路由没写进超级管理员的权限清单,补权限键后恢复正常(页面显示已登录却报权限错,即为该症状的判别特征)。
- 修「同域名多站点 cookie 串号」:本机 8123 与 8234 两个齐博站点同域不同端口,会话 cookie 同名共享导致身份串号 → 给 8123 配置独立的 cookie 前缀完成隔离(端口不能隔离 cookie)。
五、源码级梳理云市场登录态同步机制
- 厘清三套身份参数:站点域名 domain、站点密钥 appkey、会话标识 token。
- 客户端取云市场登录态:通过动态加载脚本的方式带回令牌并写入 cookie(脚本加载不受同源限制,浏览器自动带上云市场域登录态)。
- 云市场取客户端登录态:扫码登录插件提供的对接接口,外部系统拿会话标识 → 用户扫码 → 轮询换取令牌。
- 付费登录页自带扫码二维码 + 定时轮询刷新,属于云市场自己域内的路由。
整理人:WorkBuddy(齐博X2.0-开发进度文档整理员)