# 微信小程序体验成员：扫码申请台

这是一个可在自己电脑或服务器上运行的小工具：测试用户扫描二维码、填写微信号并提交申请；管理员在后台审核后，系统可调用微信小程序的 `wxa/bind_tester` 接口绑定体验成员。

> 微信原生“体验版二维码”的扫码申请和本工具不同：原生流程由微信服务通知审核。本工具适合你希望自行收集申请、批量审核或在已有微信号后批量绑定的场景。

## 已实现

- 面向测试用户的手机友好申请页
- 自动生成申请页二维码（同一 Wi-Fi 下可直接用手机扫码）
- 管理后台：查看、搜索、批量审核、拒绝、导出 CSV
- 可选接入微信 `wxa/bind_tester` 接口
- 防止重复申请、基础提交频率限制
- 本地 JSON 存储，零数据库配置

## 快速开始

1. 双击 `启动服务.bat`，首次启动会在项目根目录生成 `.env` 并显示后台管理密钥。
2. 在电脑浏览器打开 `http://localhost:3000`。
3. 点击右上角 **管理后台**，粘贴控制台显示的后台管理密钥。
4. 把页面中的二维码发给测试人员；手机与电脑需连接同一个局域网。

## 正式接入微信体验成员绑定

默认是安全的演示模式：审核成功只记录为“模拟绑定”，不会调用微信。

编辑首次运行生成的 `.env`：

```env
WECHAT_MODE=production
WECHAT_APP_ID=你的小程序AppID
WECHAT_APP_SECRET=你的小程序AppSecret
```

然后重启服务。此后，点击“批准并绑定”或“批量批准并绑定”会：

1. 使用 `AppID + AppSecret` 获取 `access_token`；
2. 调用 `wxa/bind_tester`；
3. 将微信返回结果保存到申请记录中。

**不要**把 `.env`、`AppSecret` 或后台管理密钥上传到 Git、网盘或前端代码。

## 自动批准（谨慎）

默认 `APPROVAL_MODE=manual`，必须由管理员确认。若你确认申请页面只会被可信测试人员访问，可以把它改为：

```env
APPROVAL_MODE=auto
```

这样用户提交后会立即尝试绑定体验成员。由于任何拿到链接的人都可能提交微信号，生产环境建议始终保留人工审核。

## 局域网和公网

- 同一个 Wi-Fi：扫描首页显示的局域网二维码即可。
- 不同网络：请部署到有 HTTPS 的服务器，并在 `.env` 设置 `APP_PUBLIC_URL=https://你的域名`。微信内打开页面通常需要 HTTPS；如使用网页授权，也需要在微信公众平台配置业务域名/网页授权域名。

## 限制说明

微信体验成员绑定接口需要申请人的**微信号**字段；普通网页扫码无法自动取得用户微信号。因此，这个工具会要求测试人员自己填写微信号。若你希望走微信原生“扫码申请体验”，请直接分发体验版二维码并在微信服务通知内审核；这一过程不能由网页替代或绕过。

## 微信侧列表说明

微信获取体验者列表接口只返回 `userstr`，不返回微信号、昵称或头像。因此公众平台页面和工具后台不一定能按微信号一一展示；判断是否绑定成功，以 `bind_tester` 返回 `errcode:0` 和微信侧体验者数量增加为准。

## 服务器部署

已提供 `Dockerfile`、`docker-compose.yml`、`.env.production.example` 和 `DEPLOY.md`。

公网部署建议：

```env
SHOW_ADMIN_QR=false
APPROVAL_MODE=manual
INVITE_CODE=给测试人员的邀请码
```

- 申请页：`/apply`
- 电脑后台：`/admin`
- 手机审批：`/madmin`

详细步骤见 `DEPLOY.md`。

## 当前正式访问地址

- 申请页：https://jia.mcwh.art/apply
- 电脑后台：https://jia.mcwh.art/admin
- 手机审批：https://jia.mcwh.art/madmin

