PC / 手机打开浙江移动宽带「查看进度」进入一站式订单详情时整页白屏。列表有单,问题在详情接口字段形态。
代码:https://github.com/fjh1997/wx-zjmcrm-whitescreen-fix
修复前: 一站式订单详情白屏,无进度内容。
修复后: 进度时间线正常展示(本例订单状态为已取消)。
原因
详情页 showOrder 提交的是 AES 加密后的订单号(约 32 位 Hex),而网关对 customerOrderId 按 原始字符串长度 ≤ 14 校验。
| 请求体 | 结果 |
|---|---|
| 32 位密文 | retCode: -9999,maximum length of 14,无进度数据 |
| 14 位明文订单号 | retCode: 200,返回 order 进度节点 |
没有 order 时,前端仍按成功去渲染 → 空页面 / 白屏。
flowchart LR A[订单号 14 位明文] --> B[aesEncrypt] B --> C[32 位 Hex 提交] C --> D[网关 length > 14] D --> E[-9999 无 order] E --> F[白屏] A --> G[直接提交明文] G --> H[200 + order] H --> I[正常显示]
原理
|
|
前端问题写法 vs 正确写法:
|
|
成功请求体(脱敏):
|
|
修复
只做一件事:让详情接口收到 ≤14 位明文订单号。
1. 能改前端
去掉 showOrder 里对订单号的 aesEncrypt,并保证 customerOrderId 为 10~14 位数字。
2. 不能改源码(mitm)
用仓库中的 minimal_fix.py:
- 请求改写:命中
QRY_RBOSS_MOBILE_DETAIL时,把 body 改成明文 14 位(按 action 路径 命中,不依赖域名;Host 显示为 IP 时也能改); - JS 热补:
oneStationUser.js组参不再aesEncrypt,并带上retCode判断。
核心请求改写:
|
|
核心 JS 热补(概念):
|
|
操作步骤(按这个顺序)
|
|
验收(必看)
打开仓库目录下的 minimal_fix.log:
| 日志 | 含义 |
|---|---|
DETAIL body -> plain {...} |
改写已生效 |
DETAIL resp retCode=200 |
网关返回进度 |
rewrote oneStationUser.js |
JS 热补命中 |
只有 ready,没有 DETAIL |
流量没进 mitm:检查管理员 ProxyBridge、是否重启微信 |
常见翻车
| 现象 | 原因 | 处理 |
|---|---|---|
| 一直白屏 | 代理没挂上 / 未重启微信 | 管理员 PB + 杀干净微信 |
WARN: no plain order id |
未设 ZJ_ORDER_ID 且解不出密文 |
设订单号后重启 mitmdump |
| 系统异常 /「请输入正确的 URL」 | 乱改 Host/CONNECT 把其它站点指到 CRM | 不要把 218.205.68.* 全改成 CRM 域名(如 wap.zj.10086.cn 会被搞挂) |
| 证书报错 | 未信任 mitm CA | 安装 mitmproxy CA 到受信任根证书 |
小结
| 根因 | 详情订单号多做了 AES,字段超长被网关拒绝 |
| 修复 | 提交明文 14 位订单号 |
| 落地 | 管理员进程代理 + mitm 改 body;以 minimal_fix.log 的 DETAIL body -> plain 为成功标志 |
| 仓库 | wx-zjmcrm-whitescreen-fix |
仅供自有账号排障与学习,请勿用于未授权访问。

说些什么吧!