Files
2026-10-27 17:39:27 +07:00

30 KiB
Raw Permalink Blame History

API 对接验证

日期:2026-10-17。

2026-10-22 测试与生产环境配置

本项目增加 config/test.env、config/production.env,保留独立的开发配置。进程变量优先,其次为对应 *.local.env,最后为基础配置;本地覆盖文件忽略提交。接口均沿用 https://91av-wz.80sygtm.com,默认端口均为 21021。测试部署使用 APP_ENV=test 和 NODE_ENV=production,构建目录为 .next-test/;生产目录为 .next/。开发目录为 .next-dev/。SEO 快照随对应目录隔离,同 API 的两个环境也不会共用快照。

npm run build:test、npm run check 通过,全部 290 项测试通过。新增测试覆盖配置优先级、环境隔离、CLI 参数、错误配置、真实子进程退出状态,以及同上游的 SEO 快照隔离。另通过启动脚本分别启动两套实际 Next.js 服务,使用临时端口和本地模拟上游验证静态资源及 API 代理均返回 200,验证结束后关闭临时服务。未执行远程部署。

2026-10-22 slug 路由

本项目(JHA-1047)的内容链接、轮播、专题/标签/栏目、搜索、书架卡片、选集、评论分页及解锁后跳转统一优先 slug,缺少时用 ID。支持 slug 地址直接访问与刷新,保留原 ID 地址直接访问;业务写入及仅接受 ID 的读取继续使用真实数字 ID。专题详情按当前文档先从分页专题目录解析 ID,不向接口发送未定义的 slug 参数。

生产构建及全部 283 项测试通过。新增回归覆盖 URL 编码、中文及特殊字符、分页目录解析、目录异常与缺失资源、canonical/JSON-LD 一致性、客户端选集与解锁跳转,以及严格 Swagger 参数约束下的 Next.js 生产响应。当前 Swagger 的 slug 查询参数已只读核对;测试使用本地模拟接口,未提交真实付费解锁、订单或评论。

2026-10-21 跳转性能优化

公共数据服务增加短期进程内缓存和并发合并:配置、页脚、导航、分类及标签选项 60 秒,首页 30 秒;按上游及查询参数隔离,返回独立副本并限制条目数量。无效数据、错误响应、认证和私人业务读取不缓存,配置/首页可在刷新失败时使用最近一次有效数据。详情、章节、选集、评论和推荐在响应详情之前并行请求,仍在服务端输出完整 HTML。

浏览器直接复用首屏公开配置及页脚,SDK 配置不序列化。公开页从浏览器前进后退缓存恢复时保留文档,后台按当前 Cookie 恢复身份并补报页面访问;账户、播放、支付及打开弹窗的页面保留重新验证。类型检查、生产构建及全部 258 项测试通过,包括跨请求缓存、并发合并、过期、错误恢复、副本隔离、缓存边界、两个账号隔离、首屏配置白名单、并行请求屏障、后退恢复与埋点。

真实接口及 29 个页面检查通过。本机短期采样中,公共缓存预热后列表约 312ms、专题约 287ms、回家的路约 143ms(首字节中位数,各 3 次);首次游客会话曾超时,另一次交替对比也出现显著上游波动,不能将上述采样当作稳定延迟承诺。未提交真实订单、付费解锁、评论或反馈,未执行浏览器视觉验收。

2026-10-21 服务端直接渲染

请求与渲染方式:页面数据在服务端准备,页头、公开列表、搜索、详情/播放、应用目录、回家的路、反馈、个人中心及设置、充值/VIP 的正文随初始 HTML 返回。站内链接、分页和搜索使用原生文档请求,保留当前页面直到新响应到达;不再清空正文显示页面加载占位。浏览器复用首屏快照绑定交互,避免启动时重复读取整页数据。提交成功后重新请求当前页面,轮播、图片解密、实时权限、解锁和支付确认保留。

Proxy 为有效业务页面准备身份,并在本次请求中传递新 Cookie,供服务端读取账户内容;同一 Cookie 同时写回浏览器。客户端复用服务端用户快照,避免再次初始化游客;正式账号失效显示登录入口,服务异常直接提供重试。外部传入的内部身份头先清除,用户、列表、套餐和流水使用明确字段白名单,凭证不写入 HTML;账户响应继续禁止缓存和索引。独立 /navigation/、资源、无效地址和尾斜杠重定向不触发该会话流程。

类型检查、生产构建及全部 249 项测试通过,覆盖完整首屏正文、原生跳页保留旧文档、快照绑定不重复取数、两个账号隔离、伪造身份头、正式账号过期与退出、Cookie 传递、套餐及流水、播放器与广告/轮播清理。真实只读接口及 29 个页面检查通过,另确认真实免费与金币章节页面输出完整 HTML。没有创建真实订单、付费解锁、提交评论或反馈;未执行浏览器视觉验收。

2026-10-21 动态导航

顶部与侧栏共用 navigation/header 的服务端数据,移动抽屉继承同一菜单,底栏按同源数据生成。保留接口名称、顺序、图标和二级条目;过滤底部类型、不安全地址及已移除的独立剧集地址。首屏 HTML 已包含真实链接,原脚本不再插入固定顶部导航或覆盖接口名称。已知 API 的 /hot 与空系统入口直接生成本站路径,不新增跳转。

路由高亮由同一纯函数处理首屏及客户端导航:首页精确匹配,列表分页保持选中,排行榜覆盖三个榜单,具体专题及带查询条件的入口按对应地址匹配,顶部不借用详情页的列表高亮。接口空列表不回填静态菜单;异常只提示导航暂不可用,正文仍能加载。构建、类型检查和全部 248 项测试通过,覆盖动态顺序/名称、二级条目、外链、空列表、异常、旧剧集过滤和高亮规则。

2026-10-21 移除独立剧集

按后续确认移除桌面顶部、侧栏、移动端的“剧集”导航,以及独立剧集列表、视频详情和对应分页路由;旧地址无论是否带尾斜杠均直接返回 404,不请求内容接口,也不重定向。首页与 JSON-LD 不再展示旧类型的视频栏目。短剧详情、选集、金币解锁和章节播放保留。构建、类型检查与全部 242 项测试通过,包括入口清理、旧地址 404 和原有播放/解锁回归。

2026-10-21 当前 Swagger 对接

按 91av-wz.80sygtm.com 当前文档与实际只读响应核对页面接口,端点和参数映射见 页面接口对照。修正短剧列表、专题顶层字段、题材筛选、搜索联想与空结果推荐、详情推荐及章节 SEO/统计字段;删除旧接口代理依赖。首页“更多”保留已确认的 moreUrl 优先规则,未配置时只展示真实首页栏目的数据。按用户后续要求移除独立剧集导航和路由,旧地址及分页直接返回 404;短剧章节播放保留。

构建、类型检查及全部 240 项接口合同与回归测试通过。真实服务验证游客身份、列表/三个榜单、专题、标签、配置、应用、套餐、个人列表和余额记录;另核对 29 个原生页面响应与实际有内容的免费/金币章节(/play/10923/12723/、/play/10923/12726/)。没有创建真实订单、付费解锁、注册账号或提交评论、反馈。未执行新的浏览器视觉验收。

2026-10-20 充值确认弹窗

恢复原 HTML 的支付标题/副标题、订单卡片、基础/赠送/合计金币、金额徽标、渠道图标按钮及选中圆点、确认按钮和底部说明,并复用原稿的尺寸、间距、圆角及移动布局。支付宝、微信、USDT 图标使用原始本地素材;渠道仅来自套餐配置,其他渠道保留名称和通用图标。使用隐藏表单值连接样式按钮和原下单参数,金币充值与 VIP 接口保持不变。

tests/payment.test.mjs 验证实际金币字段及金额换算、不注入演示赠送或未配置渠道、方法切换后的订单参数、重复提交拦截、VIP 接口、无效支付地址、无支付方式以及旧表单响应隔离。类型检查、生产构建和全部 152 项测试通过,仅使用本地模拟上游,没有创建真实订单或发起真实支付。

2026-10-20 详情选集解锁

对照参考项目 playletser/chapter.go 的列表权限规则和 pages/play.js 的解锁处理,金币集数使用按钮直接打开 play-episode-lock,保留原 HTML 的金币图标、余额/消耗摘要、确认和充值入口样式。弹窗先获取目标章节详情,再展示实际价格及余额;仅确认后提交解锁,成功刷新余额并跳转所选真实章节。已可观看和会员章节按最新权限处理,余额不足和登录过期分别进入充值或登录。

新增测试覆盖:列表权限优先级、详情页弹窗不提前跳转/扣费、最新价格覆盖列表旧价格、正确章节 ID、重复点击及确认防重、支付中禁止切换、迟到响应隔离、关闭/离开页面、余额不足、已可观看/VIP、章节信息不匹配、登录失效、失败重试,以及实际 Route Handler 的凭据和解锁参数转发。类型检查、生产构建与全部 147 项测试通过;测试仅连接本地模拟上游,未提交真实金币解锁。

2026-10-20 详情页样式调整

区块留白按原稿保留:横幅上下桌面端 26px、手机端 22px,官方链接至评论区 28px。无横幅数据时,选集与官方链接之间仍保留对应间距,不因条件渲染移除广告区而贴合。

对照原 HTML 的 overviewMarkup、操作栏、选集和评论 DOM 恢复结构,复用已有桌面/移动样式及原始 SVG 素材;修复 API 按钮属性与原样式选择器不一致的问题。简介支持三行截断与展开/收起,尺寸变化及离开页面时更新和清理;选集分段只横向调整滚动,保持桌面/手机切换前的章节位置。评论使用原稿的头像、正文、时间/操作行和嵌套回复容器,保留接口和独立分页路由。

tests/detail.test.mjs 验证动态字段与文本转义、图片解密入口、真实章节链接、配置官方链接和简介展开/尺寸变化/清理;播放测试补充详情页点赞接口、评论回复结构及移动端集数分段。类型检查、生产构建和全部 137 项测试通过。浏览器视觉复核仍受访问工具策略限制,未生成新的浏览器截图。

2026-10-20 登录逻辑调整

游客登录 403 当时通过匹配实际 HTTP Host 和协议修复了本地监听地址误判。2026-10-26 正式站点复核发现:空参数登录请求不带 Origin 时返回 400,携带正式域名 Origin 时却被本地检查拦截为 403。因此现已按 jha-1045-hgdjnet-web 移除代理层 POST 来源拦截,并以 CDN 域名、内部 Host 和协议变化的真实 HTTP 集成测试替代原来源校验单元测试;上游权限错误仍正常返回。

修复后对用户正在运行的 http://localhost:3000/api/app/auth/guest 进行一次正常游客握手,携带浏览器 Origin 和设备标识,真实响应为 HTTP 200 / code 200,返回用户信息及会话 Cookie。未记录或展示登录凭证,未提交正式账号注册、密码或其他业务写操作。

对照参考项目的 common/auth.js、登录/绑定弹窗及 authser 调整游客初始化、账号切换、绑定、失效恢复和退出。tests/auth.test.mjs 验证账号/邮箱和密码校验、密码确认、协议、设备持久化、首次渠道与邀请码、存储不可用、游客请求合并、登录响应顺序、失败保留原身份、旧请求隔离、正式账号过期只提示一次、手动退出,以及实际弹窗事件的防重复提交和密码清理。

HTTP 集成测试另验证真实 Route Handler 的登录与绑定参数、游客 Authorization、可选邮箱补全、设备头与客户端 IP、getInfo 不返回 token 时续用原凭证、正式账号初始化过期不降级、游客 GET/POST 失效最多重试一次、HTTP 401、缺少 token 的异常登录响应、Cookie 清理和退出后一次自动登录跳过。类型检查、生产构建和全部 127 项测试通过。测试只连接本地模拟上游,没有提交真实账号登录、绑定或密码重置。

真实接口

通过本地 Next.js 代理验证首页、配置、底部信息、短剧运营列表、热榜、专题、热搜、应用列表、充值套餐和搜索接口,均返回业务码 200。首页使用服务端请求的实际内容,首页筛选项保持移除。

上游 POST /api/app/auth/guest 在直接请求和代理请求中均出现超时(最长等待 25 秒)。无有效 token 的章节列表返回业务码 1000。真实登录态下的播放、用户资料、评论、收藏、订单和金币解锁尚未完成端到端联调;没有向真实接口提交评论、支付订单或解锁请求。

本地集成测试

npm test 启动独立模拟上游和 Next.js 生产服务,检查:

  • 服务端渲染使用上游标题和栏目;API 文本转义;首页筛选项未恢复。
  • 首页广告列表显式返回 null、轮播/栏目/公告为非数组、数组夹有空项时仍返回 200;有效内容继续显示,空内容显示空状态。
  • 纯站点地址和带 / 的根地址均直接返回首页及 200,无 Location 响应头;首页入口指向根路径,短剧入口单独指向 /shorts/。
  • 游客 token 仅写 HttpOnly Cookie,不返回到前端脚本;设备头按参考格式发送。
  • 公共请求隔离过期 token;兼容二次编码的 JSON data。
  • 正式账号会话失效后,写请求不会自动降级为游客重试。
  • 接口白名单、请求方法、跨站写入拒绝。
  • 保留真实章节 ID、观看权限和单集金币数。
  • 退出登录清理会话 Cookie,不调用上游业务写接口。
  • 30 个页面路径以 / 结尾,直接返回 200 且没有 Location 响应头;不带尾斜杠的地址也直接返回 200;/shorts/ 刷新返回 200;无效路径返回可见的 404;首页和业务页面链接直接包含尾斜杠。
  • /navigation/ 直接访问与刷新返回 200,独立渲染入口线路、渠道和 App 下载链接,不加载业务页面运行脚本;首页及其余 30 个路径均不包含入口导航弹窗或隐藏页面的等待状态。
  • 顶部、悬浮工具和首页底部的下载入口在配置未知时保持隐藏;页面不包含悬浮二维码面板。独立入口页在下载地址为空或无效时不渲染下载按钮。

tests/routing.test.mjs 另检查所有路由类型、中文和含斜线的搜索词、hash 地址不转换或替换、站内链接识别,以及 History 导航的事件通知、重复地址和前进后退记录。

全部分页使用 原页面路径/page/页码/,第一页链接使用原路径;页码、上一页和下一页均为真实链接。tests/pagination.test.mjs 覆盖短剧、剧集、专题/题材/标签/栏目、榜单、搜索、个人收藏/历史/已购、充值和 VIP 余额明细,以及详情/播放页的评论分页,检查页码解析、首尾页、无效页码、中文搜索词、排序保留和会员接口参数。播放器测试检查评论页码与排序、真实分页链接;HTTP 集成测试检查 20 类路径的两种尾斜杠形式均直接返回 200、刷新不重定向,以及非法分页路径返回 404。本次生产构建及全部 109 项测试通过。

排行榜独立使用 /rank/hot/、/rank/new/、/rank/follow/,对应接口 rankType=1/2/3。tests/rank-pages.test.mjs 检查真实页面路由逻辑、链接与当前页高亮、标题、刷新和翻页后的榜单类型,以及加载中和请求失败时保留导航;HTTP 集成测试检查三条路径两种尾斜杠形式均直接返回 200、独立标题且没有 Location 响应头。原 /rank/ 仍直接展示热播榜,不重定向。此次生产构建和全部 100 项测试通过。

tests/download.test.mjs 检查下载地址优先级和有效性、各下载入口随配置显示/隐藏、动态插入入口,以及桌面端直接打开链接、移动端点击弹窗与组合键保留浏览器默认操作。

tests/render.test.mjs 检查广告、首页列表及嵌套栏目中的空值和类型异常,保留有效内容顺序及 HTML 转义;弹窗测试另覆盖广告队列中的空项和非对象项。

tests/images.test.mjs 使用参考算法的固定密文验证逐字节解密、100 字节边界、MIME 识别和普通图片兼容,并检查重复请求合并与缓存、并发和优先级、失败重试、超时取消、异步切图、Blob 释放、初始/动态节点和视口懒加载。渲染与 SSR 测试另确认接口图片不直接写入 src,视频封面使用 data-poster。

2026-10-19 只读抽取真实首页接口的 3 张图片验证,均返回 HTTP 200,按参考密钥解密后识别为 WebP;图片 CDN 返回 Access-Control-Allow-Origin: *。未保存原始图片,也未提交业务写请求。

tests/playback.test.mjs 覆盖播放地址及签名保留、观看权限优先级与旧字段、正片/预告切换、Safari/Chromium/移动壳浏览器选择、HLS 恢复上限、重试重建、切换路由与异步导入竞态、拒绝自动播放后的重试、预告不计入正片记录、真实章节 ID、解锁确认与防重复提交,以及实际控件脚本的播放/重试/解锁事件。HTTP 集成测试覆盖媒体清单、密钥端点两种尾斜杠形式、原始 AES 字节、凭据隔离、Range 和错误状态。

H.264/H.265 兼容测试另覆盖 MSE/原生 HLS 编码错误回退、签名与播放位置保留、重复错误及重试次数限制、网络错误区别处理、MP4 不误走 HLS,以及回退过程中的路由取消。tests/codec-manifest.test.mjs 运行真实 hls.js 1.7.3 完整版的清单解析和 LevelController,在模拟设备能力下验证 H.264 回退、hvc1/hev1 保留、HEVC 单编码清单接受/拒绝;测试不访问网络,不代表真实浏览器或硬件的解码实播结果。

2026-10-19 只读验证真实免费预告:清单返回 200,保留 id/t/ticket 参数后密钥代理返回 200 和 16 字节 AES 密钥,首片成功通过 AES-128-CBC 解密,输出首字节为 MPEG-TS 同步字节 0x47。不带签名参数的密钥请求会被上游拒绝。本次未保存密钥/媒体,也未提交真实观看上报、解锁或订单请求;真实账号付费章节和浏览器实播仍需联调。

tests/startup.test.mjs 对照参考项目的实际脚本规则验证:会话内首次年龄确认、确认早于配置返回、完整广告队列、刷新恢复进度、相同队列不重复弹出、广告码变化后重置、无效图片与失败图片跳过、全部失败后可重试、存储不可用、过期异步结果隔离,以及图片加载超时和取消。DOM 事件适配测试覆盖年龄弹窗禁止 Esc 关闭、广告 Esc/按钮切换下一条、广告链接与展示/点击事件,以及退出行为。

浏览器访问工具受 URL 策略限制,本次未进行浏览器视觉复核。目录中的桌面、手机截图属于原 HTML 迁移阶段的布局基线,不是当前 API 数据截图。

2026-10-22 部署脚本与本地发布包

  • bash deploy_test.sh --package-only 完成测试环境构建、294 项回归测试和 zip/SHA-256 生成;bash deploy_prod.sh --package-only 完成生产构建、299 项回归测试和 Linux x64/glibc 包/MD5 生成。构建包含 TypeScript 检查。
  • 两份脚本的 --dry-run 通过命令替身验证,不执行构建、SSH 或 SCP;缺失/非法部署目标在构建前拒绝。测试和生产共用构建锁。
  • 发布包测试覆盖基础配置隔离、本地覆盖/缓存/旧 dist 排除、符号链接目标保护。Next.js 自动追踪漏带的 Turbopack Route Handler 运行文件已显式包含。
  • 最终 dist.zip(29.87 MiB)解压到临时目录,使用本机裁剪依赖启动 node start.mjs;本地模拟 API 下首页、/healthz、Next 静态资源和 public 文件均返回 200,健康检查未触发上游请求。测试 zip 按约定不含依赖,真实 Linux 服务器需执行 npm ci --omit=dev。
  • 最终 web_91dj_h5.tar.gz(44.94 MiB)通过内容、MD5 和目标平台元信息检查;目标 Sharp/libvips 使用 lockfile 固定版本,并通过 Linux x64 ELF 校验,不含 macOS 原生模块。本机未运行 Linux 生产服务。
  • deploy/up_next_h5.sh 用临时目录和命令替身验证校验失败、安装失败不停止旧服务;健康检查失败恢复旧版本;成功更新保留测试私有覆盖和公开 SEO 缓存。新增部署测试共 8 项通过,已包含在最新生产环境的 299 项回归中。
  • 本次仅本地构建和打包,未执行任何真实 SSH/SCP、Supervisor 更新或远端 running.sh。部署前需配置本站目标地址,测试 Supervisor 程序及生产跳板机脚本由运维预先配置。

部署配置统一采用本站标识:测试 root@172.104.181.99:22889 → /server/web_91dj/h5;生产 server@116.212.120.2 → /home/server/web_91dj/h5/nuxt,SCP 22889 / SSH 22。包名 web_91dj_h5.tar.gz、校验文件和 Supervisor 91dj_next_h5 使用本站标识;生产仍只通过完整路径调用原有 running.sh。部署测试验证当前配置、环境变量覆盖、无效目标提前失败及 dry-run 不连接远端;本次未执行实际上传或部署。

部署配置变化后的测试修复

已复现 tests/deploy.test.mjs:72 的目录断言失败:测试仍固定期望旧项目的上传目录,实际测试脚本已配置 /server/web_91dj/h5。修复后不再将主机、路径、端口或 API 域名作为测试不变量,保留对参数覆盖、命令与帮助输出一致、非法目标提前失败、dry-run 不构建/不连接远端的验证。测试服更新的模拟 Supervisor 使用固定测试服务,避免调用者的 DEPLOY_PROGRAM 污染测试。两份脚本的帮助内容统一从当前变量生成,修复当时测试 SSH 配置 21021、帮助文案却写 22889 的不一致;保留修复时的上传路径和端口。

bash deploy_test.sh --package-only 已完成测试环境构建、全部 299 项测试和 dist.zip 打包;压缩内容及 SHA-256 通过校验。另在设置自定义 DEPLOY_PROGRAM、DEPLOY_DIR、DEPLOY_SSH_PORT 后运行部署专项测试,8 项通过。当前 SSH 端口和应用监听端口分别配置,未连接真实服务器验证 SSH 端口或执行上传/部署。

测试部署改用 tar.gz

deploy_test.sh 现在生成并上传 web_91dj_h5.tar.gz、web_91dj_h5.tar.gz.sha256 和 up_next_h5.sh,包名可通过 DEPLOY_PACKAGE_NAME 覆盖;同时刷新对应 MD5 文件供本地兼容校验。测试包继续排除依赖、本地覆盖、缓存和 macOS 附加文件,包内使用 .next-test 与 config/test.env。保留当前上传目录和端口,以及用户注释的远端自动更新命令;实际脚本上传完成后结束。

服务器辅助脚本同步使用 tar.gz:先校验 SHA-256、检查成员路径与类型,再解压、安装依赖和切换版本;损坏包、路径越界、链接及特殊文件在停止旧服务前拒绝。测试覆盖真实 tar.gz 上传参数、校验值、自定义包名、自动更新保持禁用,以及安装/健康检查失败的回滚。

完整本地构建和 304 项测试通过;测试部署专项 13 项通过。生成的测试 tar.gz 为 29.78 MiB、414 个文件,内容、SHA-256 和 MD5 均通过校验。解压后使用本机裁剪依赖和本地模拟 API 验证启动、首页、健康检查、Next 静态资源与 public 文件均返回 200。未执行真实上传或服务器更新。

2026-10-22 埋点检查与补全

通过项目自带的官方 SDK v1.2.0 复现了内容事件因空 parent_item_id 被拒收的问题;此前测试替身未校验字段,所以没有发现。现在回归测试调用真实 SDK 的具名事件方法,仅使用其初始化前缓存和字段校验,不向外发送测试数据。只读获取当前业务接口配置并在本机解析后,确认页面、内容、搜索、广告、弹窗行为、播放事件均在事件允许列表内;未修改服务端配置或打印密文、签名密钥。

范围 事件与检查结果
页面、分页、后退恢复 appPageView/pageClick,保留真实路径及原有访问去重规则
导航与下载 navigation,补齐独立入口页渠道、App 下载入口选择器
首页及列表内容 appPageitemExposure/appPageitemClick,无父级用字符串 0,通过真实 SDK 校验
专题、福利应用 补齐专题卡片内容元数据;关联 advitiseId 的应用按广告上报,其他应用按内容并携带分类父级
大图广告 adImpression/adClick,保留原展示、点击触发;独立展示位置及延迟 SDK 队列防止漏报
宫格广告 与首页分开去重,滚动后补报可见项;关闭、遮挡或后台标签页不记曝光,恢复后重新观察
弹窗行为 补齐参考项目的 advertising:show/click/close,使用真实广告 ID;关闭不记 adClick,重复关闭不重报
搜索 keywordSearch/keywordClick,保留真实总数、首轮搜索及分页后的全局位置
播放、切集、分享、失败 dramaEvent/dramaStatusChange,全部现有行为的载荷通过真实 SDK 校验,预告不作为正片统计
登录、游客、注册、充值、VIP 沿用 SDK 原始公共字段透传及 UID 同步,成功业务事件由服务端负责
点赞、收藏、评论、购买解锁 保留 BFF 校验后的事件上下文和请求 ID 透传,前端不重复发送服务端成功事件
加载、排队、错误 配置首读跳过 SDK 等待;脚本失败重试加载;扩大初始化前队列并报告溢出;SDK 拒收和发送失败有脱敏诊断

浏览器使用真实页面及未修改的官方 SDK,测试专用包装通过 SDK 支持的单次事件地址参数把请求送入本机接收端,避开官方域名解析器对配置地址的 HTTPS 要求。已验证大图广告展示/点击、宫格展示/点击、页面访问、内容曝光,以及原生页面跳转前的内容点击均实际发出带 event_sig 的网络记录。UI 点击和弹窗滚动经浏览器执行,未向正式统计后台发测试事件。未验证正式部署的反向代理和统计后台入库结果。

最终验证:测试环境构建(含 TypeScript)及全部 323 项回归测试通过。最后一轮本机浏览器验证收到 78 条带签名的 SDK 事件,其中 advertising 为 show 21、click 2、close 21;大图广告的三种行为均到达,宫格关闭只覆盖实际曝光的广告,关闭未增加 ad_click。另外一轮已确认原生页面跳转前的 app_pageitem_click 实际到达,内容父级字段为字符串 0。所有网络验证仅使用本地模拟业务数据和本地测试签名配置。

2026-10-27 移除埋点与客服、切换接口域名

删除 Web SDK 及埋点适配层、X-SDK-Common/X-Tracker-* 请求头透传、内容与广告的追踪属性和相关环境变量;删除意见反馈页(/info/feedback/ 返回 404)、feedback/add 代理白名单、页脚/侧栏/播放页/充值页的反馈与客服入口及样式。上游接口统一为 https://webhgcgapi.mfcg.me;配置和快照都没有永久域名时,canonical 使用 https://huangguocg.com。类型检查、生产构建通过;除部署脚本测试因中文目录名被 URL 编码导致找不到 node_modules 外,其余测试全部通过。

2026-10-27 删除充值、用户中心、登录与付费解锁;品牌与联系方式

删除充值/VIP(/info/deposit/*)、个人中心(/member/*、/info/user-center/、/info/settings/)、登录注册/找回密码/退出、头像与资料修改以及付费章节解锁;对应页面返回 404,代理白名单只保留游客会话与浏览、点赞、收藏、评论所需接口。旧版本遗留的已登录 Cookie 失效后自动换成游客,不再提示登录。付费集保留锁定标记和免费预告,播放区提示“本集为付费内容,暂不可观看”。

站点地址(canonical、sitemap、导航页线路与永久入口、回家的路、详情页官方地址)固定为 https://huangguocg.com;导航站名固定为“黄果吃瓜”,页面上写死的“91短剧”改为“黄果吃瓜”;logo、favicon、touch icon、App 图标与分享图换成黄果图标。联系方式与其他黄果站点一致,只保留官方 TG @jbd125。类型检查、生产构建通过,307 项测试中除部署脚本测试(中文目录名被 URL 编码,环境问题,改动前同样失败)外全部通过。

2026-10-27 详情页、播放页、卡片与首页 banner 改版;评论改为推荐视频

为收录及与其他黄果站点区分,短剧卡片、推荐视频条目、首页 banner、详情页和播放页改用独立的 hg-* 结构和样式:全部内容由服务端输出,使用 article、h1/h2/h3、dl 信息表、描述性链接 title 与“《剧名》海报”类 alt;首页 banner 以 <ol> 输出全部推荐的真实详情链接;详情/播放页增加“剧情简介”“全集列表”“推荐视频”小标题。评论读取、发表、点赞及评论分页全部删除,/detail|play/.../page/N/ 返回 404,代理不再放行 comment/*;评论区换成 playlet/guess-like/list 的 12 部推荐。桌面与 390px 手机宽度截图核对;类型检查、生产构建通过,除部署脚本环境问题外测试全部通过。

2026-10-27 全部短剧和视频免费观看

前端去掉付费判断:chapterAccess 只看接口是否返回有效视频地址,needUnlock/needVip/payType/canWatch 不再影响播放、选集链接、SSR 正片地址和索引;选集付费角标、play-paywalled-content 及 isAccessibleForFree:false 结构化数据删除,帮助中心常见问题改为“全部免费观看”。真实接口核对:付费章节(如 14193 第 2 集起)chapter/detail 返回 videoUrl: '',地址由后端签名下发,需后台将章节设为免费后前端即可播放。