# H5 扫码功能 HTTPS 配置指南
## 问题原因
`html5-qrcode` 库要求必须在 **HTTPS** 或 **localhost** 环境下才能访问摄像头。
你当前的环境是局域网 IP(`192.168.10.7`),不是 HTTPS,所以浏览器拒绝访问摄像头。
## 解决方案:使用 ngrok 提供 HTTPS 隧道
### 步骤1:下载并安装 ngrok
1. 访问 https://ngrok.com/download
2. 下载 Windows 版本(`ngrok-v3-stable-windows-amd64.zip`)
3. 解压到任意目录,例如 `D:\tools\ngrok`
4. (可选)将 ngrok.exe 所在目录添加到系统 PATH
### 步骤2:注册 ngrok 账号(免费)
1. 访问 https://dashboard.ngrok.com/signup
2. 使用邮箱注册
3. 获取你的 authtoken(在 Dashboard → Your Authtoken)
### 步骤3:配置 ngrok
```bash
# 打开命令行,进入 ngrok 目录
cd D:\tools\ngrok
# 配置 authtoken(替换为你的 token)
ngrok config add-authtoken YOUR_AUTHTOKEN_HERE
```
### 步骤4:启动 H5 开发服务器
```bash
cd D:\java_project\forge-admin\forge-h5-ui
pnpm dev:h5
```
假设前端运行在 **3001** 端口(查看控制台输出确认实际端口)。
### 步骤5:启动 ngrok 隧道
```bash
# 方法1:直接启动(推荐)
ngrok http 3001
# 方法2:指定域名(如果你有付费计划)
ngrok http --domain=your-domain.ngrok-free.app 3001
```
启动成功后,你会看到类似这样的输出:
```
Forwarding https://abc123def456.ngrok-free.app -> http://localhost:3001
```
### 步骤6:使用 HTTPS URL 访问
在手机浏览器中访问 ngrok 提供的 HTTPS URL,例如:
```
https://abc123def456.ngrok-free.app
```
**注意:**
- 不要使用原来的 `http://192.168.10.7:3001`
- 必须使用 ngrok 生成的 `https://xxx.ngrok-free.app`
### 步骤7:测试扫码功能
1. 打开 HTTPS URL
2. 点击"扫描二维码"按钮
3. 浏览器会请求摄像头权限,点击"允许"
4. 应该能正常打开相机进行扫码了!
## 常见问题
### Q1: ngrok 免费版有限制吗?
A: 是的,免费版有以下限制:
- 每次重启 ngrok,URL 会变化
- 每月有带宽限制(通常够用)
- 连接数有限制
如果需要固定域名,可以升级到付费计划。
### Q2: 为什么花生壳不行?
A: 花生壳免费版不支持 HTTPS 映射,而 `html5-qrcode` 必须要求 HTTPS。
### Q3: 有没有其他替代方案?
A: 有的,可以使用以下工具:
- **Cloudflare Tunnel**(免费,推荐):https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
- **localtunnel**(免费):`npm install -g localtunnel && lt --port 3001`
- **serveo**(免费,无需安装):`ssh -R 80:localhost:3001 serveo.net`
### Q4: 支付宝沙盒扫码还是空白页怎么办?
A: 支付宝内置 WebView 强制要求 HTTPS,即使使用 ngrok 也可能有问题。建议:
1. 使用普通手机浏览器(Chrome/Safari)测试
2. 或者部署到正式的 HTTPS 服务器(如阿里云、腾讯云)
## 验证是否成功
打开浏览器控制台(F12),如果看到以下日志,说明摄像头已正常启动:
```
[QR Scanner] Camera started successfully
```
如果看到错误信息,请检查:
1. 是否使用了 HTTPS URL
2. 是否允许了摄像头权限
3. 是否有其他应用占用了摄像头