Files
juzi/taobao
xsl 873b45d3a5 fix: preserve legacy admin URLs across H5 channels
Keep local record and download paths compatible while retaining explicit external source selection. Record Taobao, H5, WeChat and rednote compatibility verification and baseline test failures.
2026-11-04 15:17:56 +08:00
..

2026-11-03 正式包开发入口清理

正式路由仅保留登录、主页、档案、拍照、报告和历史六页。pages/mvp、pages/camtest、pages/camnative 已从 app.json 移除,并同时加入编译和上传排除项;开发测试源码保留供离线回归,不随正式包注册或上传。登录和主页的开发入口、诊断弹层、对应处理方法与样式已清理。主拍照页 ?debug=local-face 还必须显式启用 cameraDebug,当前配置为 false。

“重新开启相机”是实际失败后的恢复入口,不是测试按钮:只在真实错误/权限提示下显示,登录校验、初次启动、预览、拍摄完成过渡和报告处理中隐藏;点击重试时先清除旧错误,失败再恢复提示。没有增加自动重试,也没有改变相机方向、角度、识别后端、照片顺序、亮度门限或 1.5 秒新鲜度限制。

淘宝小程序开发说明

用户已确认自动三连拍在当前手机通过,正式业务配置已恢复 photoInputMode: 'camera',使用与测试页相同的识别和自动拍照逻辑;原相册入口保留。UI 和交互保持原样,不新增上传面板。若需独立排查选图上传,仍可临时设为 'upload' 跳过实时识别。淘宝专用 Node 已备份并更新新版游客及幂等接口,云服务访问异常及实际手机三图报告仍需验收。

正式入口:登录/游客 → 开始检测 → 原隐私弹窗 → 档案 → 拍照引导的“开始” → 自动三连拍 → 上传及报告。首次使用时衔接平台相机授权,无需先进入开发测试页。游客和正式账号的多页面集成回归均已覆盖,测试服务响应不代表真实云网关已通过。

页面按 H5 还原:报告检测图区域支持左右跟手滑动切换页卡,标签和高度同步;点检测图可放大,再点关闭;档案肤质卡支持跟手横滑、箭头和圆点联动。正常页面隐藏开发诊断入口,主页保留“开始检测/我的报告”,报告页不附加额外按钮。专项诊断时可在开发环境临时启用 cameraDebug:true 显示测试入口。

当前适配:独立登录首屏(淘宝账号/游客)→ 基础档案 → 正/右/左三步拍摄或相册选图 → 检测等待 → 七项报告 → 对应商品。正式淘宝账号保留最近 5 份历史;游客会话、档案和报告仅本次内存使用。商品 I/II/III 统一打开 1090510453077,推荐规则沿用 H5。

首版要求实时识别抓拍。 当前默认采用普通 camera 前置取景及连续帧,在本机运行人脸定位和轻量 68 点模型,复用 H5 姿态及稳定性判断,倒计时后用原生 takePhoto 获取 JPEG。用户已验证普通相机默认前置、帧数增加、可以拍照出图;手机已识别人脸并通过正脸姿态,但优化后的 CPU 单帧仍约 4.25 秒。当前候选改用原生 WebGL 加速,需通过数值自测、预热后再处理真实帧;手机兼容性、速度和自动三连拍仍待验收。AR 路线保留为显式开发对照,其默认自拍修正尚未通过真机验证。诊断页面保留在开发源码中,已移出正式路由及上传包。诊断不登录、不上传、不产生检测费用。

本轮实施状态、验收和部署顺序见 适配交接。

开发版“相机测试(开发版)”现直接进入 CAM-NATIVE-20261102-04,点顶部“开始自动三连拍测试”可进入 LOCAL-FACE-20261102-09。该页复用正式取景、实时识别、正/右/左自动拍摄及 JPEG 压缩,最后只展示本页临时照片,不要求账号或档案、不上传照片、不创建检测任务。卡住时点“复制识别诊断”,只复制模型阶段、耗时、帧尺寸、计数、安全错误代码及固定合成输入的图形自测指标,不复制图像或人脸坐标。测试页不播放语音;应用自身已有的静态资源加载及账号恢复不受这个页内模式控制。

手机在旧版 LOCAL-FACE-20261102-01 已识别 1 脸并通过姿态,CPU 优化版 02 从约 10.7 秒降至 4.25 秒,仍因结果过期停止,尚未完成自动抓拍。版本 03 明确请求原生 WebGL1,并按淘宝官方文档开启 window.enableSkia:"true";手机矩阵自测执行 4 次绘制后报 MATMUL_FAILED。版本 04 依次验证 default、packed_byte(禁用浮点下载)和 unpacked_byte(再禁用打包 shader),真机三档均失败。最后一档记录 5 次绘制、1 次字节读回,矩阵校验和 0/预期 2786、244 项不匹配、最大误差 22,呈现全零特征;这些聚合指标尚不能单独证明全部元素为零或确定根因,仍未处理真实相机帧。

版本 05 按淘宝官方说明关闭 readPixels 的宿主额外翻转,并增加 2×2 原生图形检查。手机清屏读回通过,非对称 shader 有 3 项不匹配,预期校验和 2244/实际 2040;实际值与此前清屏校验和相同。这与绘制未覆盖的情况一致,也可能来自坐标、缓冲区上传或绘制状态,尚不能唯一确定根因,仍未处理真实相机帧。

版本 06 显式规范化 GL 绘制状态,每次绘制前清黑,先分别验证恒色 drawArrays/索引绘制,再验证原非对称 shader 和字节/浮点纹理。原生兼容候选按 standard → buffer_copy(将视图字节紧密拷贝为标准 bufferData ArrayBuffer)→ framebuffer_y(仅补偿已绑定 FBO 的 viewport/scissor Y 坐标)→ combined 自测;仅 VALUE_MISMATCH 允许换路,其他错误停止。四路使用同一上下文,每路结束清理自己的检查对象;TF 三档选择最多创建 3 个上下文。每条可用路径都须通过全部原生检查及后续严格矩阵/卷积自测、真实模型预热,不能按机型硬开,也不放宽 1.5 秒源帧新鲜度或回退 CPU。诊断保留原始失败阶段/代码、最终 nativeStrategy、固定合成的四像素及缓冲区字节数,仅初始化时缓存;真实人脸结果不能覆盖。手机实际选路、识别速度和三连拍仍待验收。

当前候选 07 针对真机 06 的 nativeInitialStage=constant_indexed:标准路径普通恒色绘制已通过,索引绘制失败;最后的坐标兼容黑屏不代表原始根因。原生索引调用前先重新绑定索引缓冲。若仍然是普通绘制通过而索引数值失败,则验证等价的四顶点 TRIANGLE_STRIP 路径;通过非对称图案、纹理、原矩阵/卷积和模型预热后才使用。仅把自有固定索引 [0,1,2,2,1,3]、TRIANGLES/6/UNSIGNED_SHORT/offset0 转换,未知签名、缓冲未确认或部分修改时明确拒绝。诊断新增 drawStrategy=quad_strip、实际绘制计数和 constantQuad;此时 constantIndexed=not_run,不宣称原生索引已通过。原生候选最多 8 次、仍使用同一上下文,手机效果与速度待验收。

此入口仅在 environment: 'development'、captureMode: 'native-face'、nativeCamera: true 时开放,允许当前 cloud 配置;debug=local-face 参数不能在生产环境绕过登录。原来的 debug=camera 手动验收仍要求显式 cameraDebug 开关及本机直连,不变更其范围。

本地启动

在本目录运行:

npm ci
npm run dev:backend

只监听回环地址:

  • http://127.0.0.1:18180:本地 H5 与淘宝网关模拟代理。
  • http://127.0.0.1:18181:实际共享 Node 后端。
  • http://127.0.0.1:18180/dev/health:确认样本模式。
  • ../temp/taobao-local-data/:隔离的账号、照片、检测记录和报告。不会读写现有 h5/data/。

代理使用固定的本地测试身份并模拟淘宝网关签名;Face++ 返回仓库内的固定样本。模拟逻辑仅在开发启动脚本中,正式服务器不会接受客户端自报 open_id,也没有免验签的开发登录后门。本地 H5 的微信入口不启用;微信 /state/ 授权由独立浏览器回归验证。

config.js 默认是 cloud/tower/test,使用聚石塔云网关。仅做本机样本联调时手动切换到 transport: 'direct'、baseUrl: 'http://127.0.0.1:18180';结束后恢复云配置。代理为正式和游客会话签名,不绕过后端校验。手机上的 127.0.0.1 指向手机自身。

文件职责

首页右上角“开发调试 · 相机验收”可直接进入相机页,不依赖淘宝登录、本地后端或网络。也可在IDE启动参数中指定页面 pages/camera/camera、参数 debug=camera。入口需要同时满足 config.js 中 environment: 'development'、cameraDebug: true、本机直连配置;改为正式/cloud配置后入口关闭,单独拼参数也不能绕过登录。

验收时先开启相机,按正脸→右脸→左脸拍摄/确认,第三张完成后仅在本页验证JPEG压缩并展示三张原始预览与压缩尺寸,不发检测请求、不生成报告、不播放远程语音,也不会写入正式档案/报告状态。临时预览用于检查前置照片方向;页面不判断拍摄姿态是否合格。退出时清空本页照片引用。

依次检查:首次授权、拒绝后相册仍可使用、授权设置恢复、前后镜头、三张方向、切后台恢复、压缩最长边≤1280。真实系统权限和相机画面仍需淘宝IDE/手机验收,自动测试仅验证代码流程。

  • pages/login:淘宝/游客登录、协议、登录恢复,以及仅开发版显示的 AR 测试入口。
  • pages/splash:品牌首页、开始检测、历史、退出/结束游客体验。
  • pages/profile:账号隔离的基础信息缓存、出生年月和省市滚轮、肤质选择。
  • pages/camera:普通前置相机本地实时识别、正/右/左三步引导、H5 轮廓及定位线、自动倒计时和原生 JPEG 拍摄;保留 AR 开发对照、完成卡与扫描等待页。相册路径拍后直接推进;单画布顺序压缩最长边 1280 的 JPEG;暂停后复用原分析任务,不重新收费。
  • pages/report:服务端返回的当前评分/话术、七项分析、护理选三、精华、真实图层和坐标标注;侧脸图层异步加载。
  • pages/history:本人最近5份完整报告。
  • utils/transport.js:本机代理或淘宝云 SDK 传输,保留反代子路径配置。
  • utils/api.js:账号凭据、64KiB照片分片、检测任务提交与轮询、历史报告。
  • vendor/:从 H5 同步的评分、报告呈现、拍照规则及哈希清单;native-face/ 为从 H5 原始模型生成的小程序 CPU 副本,含来源记录。分别使用共享同步脚本和 node scripts/build-native-face.cjs 重建,不手工改生成文件。
  • scripts/、test/、docs/:开发与回归文件,IDE 配置排除上传。

H5 规则变更后运行 npm run sync:shared;npm run check:shared 会检查逐字节一致。在线报告优先使用服务端返回的 vm/presentation,原始检测分数和展示肌龄分别保存。

账号与共享后端

正式淘宝请求走 cloud.application.httpRequest。登录分两步:先获取60秒一次性 challenge,再发送经网关签名、含 challenge 与同意标记的登录请求。服务端验证全部查询参数和原始请求体的签名,从网关注入的 open_id 建立 kind: taobao 的稳定账号;不依赖前端上报身份。账号键保存为 appKey/openId 的哈希。

淘宝使用独立 Bearer 会话,微信继续使用原有 Cookie。两种会话不能互换。共用 accounts 存储和报告格式,按服务端身份隔离历史、图片上传、检测任务和侧脸标注。

新检测记录自动标记 h5 或 taobao,不信任请求体中的 channel。历史没有该字段的记录视为 H5。管理 API 支持 ?channel=taobao 筛选;统计返回 by_channel;CSV在末尾追加渠道列,旧列的位置保持不变。后台页面本轮没有改布局。

云网关接入准备

这里仅说明未来配置,不会自动部署。

  1. 关联淘宝 AppKey 与外部云应用,配置域名与资源域名权限。
  2. 只在后端环境配置 TAOBAO_APP_KEY、TAOBAO_APP_SECRET;Face++ 密钥沿用现有服务端设置。所有 Secret 均不得进入小程序代码。
  3. config.js 设置 environment: 'production'、cameraDebug: false、transport: 'cloud'、HTTPS baseUrl、cloudAppId、资源 assetBase。如果使用原来的 /state/ 反代入口,设置 basePath: '/state',资源根同时包含 /state/assets/。
  4. 外部/空应用 cloudEnv 为 online,这表示淘宝网关的环境,和本次是否部署生产服务器无关。
  5. 真实淘宝授权确认后才能创建账号。当前尚未填入真实 AppKey/Secret/cloudAppId,也没有宣称已完成真实平台联调。

云网关单次请求内容上限128KB、外部服务超时最多10秒。照片按64KiB base64顺序上传,每个用户的照片只可消费一次;检测与侧脸标注均用短请求提交、轮询结果,不能直接把三张大图发进一个45秒请求。中断轮询不会自动重复付费检测,已完成结果可在历史报告中读取。

官方依据:

自动验证

npm run check:shared
npm test
npx playwright install chromium
npm run test:h5

npm test 覆盖验签和重放、账号与历史隔离、照片分片与过期、异步检测、渠道筛选/CSV兼容、评分与七项话术、拍摄竞态、图片尺寸和省市联动。检测上游均为固定样本,不消耗线上检测额度。

npm run test:h5 运行现有 H5 的四组浏览器测试,覆盖游客不留存、HTTPS /state/ 微信授权/退出/跨设备、完整报告/后台/CSV,以及异步侧脸图层。使用本地 Playwright,不改写旧测试;Windows上自动使用已安装 Git 附带的 OpenSSL。截图保存至 ../temp/taobao-h5-compatibility/。

待平台验收

开发账号采用独立淘宝账号,由公司主账号管理员将其加入目标小程序的开发成员。公司完成主体认证、开发者入驻及应用创建;开发人员按后台要求完成个人账号认证,获得开发权限后再登录IDE关联应用。不能把店铺子账号的应用使用权限当作小程序开发权限,也不能只添加为体验者。当前账号尚未就绪,以下平台验收未完成。

相机权限单独处理:进入拍摄页先查询 my.getSetting;首次使用由用户点击“开启相机”后调用 my.authorize({ scopes: 'scope.camera' }),授权后再挂载原生camera组件。拒绝后保留相册路径,并提供用户主动打开 my.openSetting 的入口,不循环申请。相册选择使用独立的 scope.album;淘宝账号登录的 scope.userInfo 不代表相机已获授权。app.json 中的用途描述也不代表授权完成。平台控制台仍需确认对应权限包,并在“开发设置-scope授权项管理”填写用途。手机系统对淘宝App的相机/相册权限同样需要真机验证。

参考:淘宝用户授权、权限范围与拒绝后的设置入口、淘宝camera组件与CameraContext API。

  • 真实 AppKey/cloudAppId、签名参数和授权权限包联调。
  • 真实网关传输报告大图时的返回体限制与内存占用;已减少小程序 setData 中重复照片和非当前Tab图层。
  • Android/iOS相机权限、前置相片方向、cover-view覆盖、系统相机降级、后台恢复、原生canvas及大图读取。
  • UI真机对齐。H5 取景轮廓及实时姿态自动拍摄已接入本地代码,仍需在手机验证定位、左右转头提示、识别耗时和完整三连拍。
  • 商品目标已确认:1090510453077(1'me以我自在有势挺括双仓精华液)。仍需验证平台能力、游客/新报告/历史报告跳转及返回状态。

以上是待真实平台验收的范围,不影响已通过的本地接口与H5回归结论。