# 工作手机 SDK · 线上部署与真机验收（2026-07-14）

## 目标与结果

将工作手机 SDK 部署到存客宝宝塔 Docker，通过 `wpsdk.quwanzhi.com` 提供 HTTPS/WSS，让授权 Redmi 真机扫码/配置后主动连接，并验证设备管理与微信安全读类链路。

当前结论：线上服务、鉴权、CORS、WSS 真机、设备控制、宝塔 Frida RPC 和 15 项微信读类均已通过；朋友圈发布失败，其他写类仍需白名单逐项验收。

## 线上架构

```text
Android 工作手机
  └─ WSS + pairing token
      └─ wpsdk.quwanzhi.com:443（宝塔 Nginx / TLS）
          └─ 127.0.0.1:8899（workphone-sdk-baota）
              ├─ workphone-mongo-baota
              └─ workphone-redis-baota

纯客宝/存客宝 BFF
  └─ HTTPS + X-API-Key → wpsdk.quwanzhi.com/api/v3/
```

## 实际部署文件

- `sdk/docker-compose.baota.yml`：宝塔生产 Compose。
- `sdk/.env.baota.example`：仅变量模板，无真实密钥。
- `sdk/deploy/baota/wpsdk.quwanzhi.com.conf`：HTTPS/WSS 反代。
- `sdk/scripts/deploy_baota_wpsdk.sh`：上传、构建、启动、证书与 Nginx 校验。
- 服务器目录：`/www/wwwroot/workphone-sdk`。

## 手机绑定

生产二维码由受 API Key 保护的 `/api/v3/qrcode/generate` 生成，内容至少包含：

- `server`: `wss://wpsdk.quwanzhi.com/ws/device`
- `project`: `cunkebao`
- `pairing_token`: 仅服务器环境注入

手机端点击“扫描系统二维码”完成绑定。二维码含配对令牌，禁止截图入库、发群或写进文档。

## 验收证据

| 层级 | 结果 |
|---|---|
| DNS | `wpsdk.quwanzhi.com` → `42.194.245.239` |
| 容器 | Mongo、Redis、SDK 均 healthy |
| SDK | `/health` healthy，`/ready` true |
| 安全 | 无 Key 401；有 Key 200；8899 仅绑定本机 |
| TLS | Let's Encrypt，证书有效至 2026-09-25 |
| 真机 | Redmi 2312DRAABC / Android 13 / Agent 5.0.1 |
| WSS | 真机在公网 SDK 显示 online |
| 设备 ID | 管理与业务字段提供 MD5：`ed25814d9c92b3430696dc96c2142b5f` |
| 微信读类 | `ping` 与 `get_wechat_version` 均由公网 Fleet→WSS→APK 成功回执；微信 8.0.69 |
| 密钥保护 | 日志与 API 不回显配对令牌 |
| 令牌轮换 | 本轮曾进入调试输出的旧配对令牌已撤销；新令牌已下发并重新绑定成功 |
| Frida 服务 | Root 可用，Frida 16.5.6 在非默认端口可达，APK 回执 `frida_server_ready=true` |
| 微信 Hook/RPC | 宝塔 `server/frida` 已持有微信 Session 并取得真实 RPC 回执，能力目录为 96 actions / 26 modules |
| 微信读类 | 15 项公网读类均 HTTP 200：资料、联系人、群、标签、近期消息、账号安全及设备信息等 |
| 设备控制 | 启动应用、当前应用、UI 树、1080×2400 PNG 截图均已通过 |
| 浏览器调用 | CORS OPTIONS=200，允许外部网页携带 `X-API-Key` |
| 并发 | 5 路公网 `ping` 并发 5/5 HTTP 200，通道均为 `server/frida` |

## 安全调用样例

```bash
curl -fsS https://wpsdk.quwanzhi.com/health
curl -fsS https://wpsdk.quwanzhi.com/ready

curl -X POST https://wpsdk.quwanzhi.com/api/v3/fleet/execute \
  -H 'X-API-Key: <从服务器安全环境获取>' \
  -H 'Content-Type: application/json' \
  -d '{
    "device_ids": ["<device_id>"],
    "platform": "wechat",
    "action": "get_wechat_version",
    "params": {}
  }'
```

## 回滚

1. 只处理 `/www/wwwroot/workphone-sdk` 与 `wpsdk.quwanzhi.com` 独立站点，不改存客宝其他容器。
2. 在服务器目录使用上一个发行包/镜像重新执行 Compose。
3. 执行 `nginx -t` 后再 reload。
4. 验证原有宝塔站点、SDK `/health` 和手机重连。

## 未完成边界

- APK 面板中的本地 Hook 状态与宝塔 `server/frida` 是两条通道；本轮以服务器真实 Session/RPC 回执验收，不能把 APK 面板灰色误判为服务器 RPC 失效。
- 朋友圈图文发布两次均由微信提示“内容未发表”，按失败记录，未伪报成功。
- 发消息、群发、加友、朋友圈互动等写类仍需测试白名单和操作前确认。
- 还需完成纯客宝/存客宝 BFF 业务页面验收及 24 小时稳定性。

完整明细：[公网 SDK 完整测试汇总](../../../5、接口/06-验收与矩阵/2026-07-14_公网SDK完整测试汇总.md)；外部调用：[公网 API 对接文档](../../../5、接口/02-业务对接/工作手机SDK公网API对接文档_20260714.md)。
