Files
wechat_ipad_pro/static/doc/wechat-verify-solution.md
2026-02-17 13:06:23 +08:00

153 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信验证页面浏览器访问解决方案
## 问题描述
微信的安全验证页面(如 `https://weixin110.qq.com/security/acct/newreadtemplate?t=extdevsignin/slaveverify&ticket=xxx`)通常只能在微信内置浏览器中打开,在普通浏览器中会报错。
## 解决方案
本方案通过以下技术手段解决了浏览器访问限制:
### 1. User-Agent模拟
- 使用微信浏览器的User-Agent头部
- 模拟iPhone微信浏览器环境
- 绕过微信服务器的浏览器检测
### 2. 代理接口
创建了代理接口 `/api/v1/login/ProxyWechatVerify`,该接口:
- 接收ticket参数
- 设置正确的微信浏览器User-Agent
- 代理请求微信验证页面
- 返回可在浏览器中正常显示的页面
### 3. 验证页面封装
提供了 `/api/v1/login/GetWechatVerifyPage` 接口返回包含多种验证方式的HTML页面
- **方法一**直接在iframe中显示验证页面推荐
- **方法二**:新窗口打开验证页面
- **方法三**:复制链接手动打开
## 在Swagger中的集成
### 自动检测功能
- 当调用获取二维码接口后,系统自动开始监控登录状态
- 检测到需要验证时,自动显示浮动验证按钮
- 点击按钮即可打开验证弹窗
### 使用流程
1. 在Swagger中调用获取二维码接口
2. 用户扫描二维码
3. 如果需要安全验证,右下角会出现"🔐 安全验证"按钮
4. 点击按钮打开验证弹窗
5. 在弹窗中完成滑块验证
6. 验证成功后自动关闭弹窗,继续登录流程
## API接口说明
### 1. 代理微信验证页面
```
GET /api/v1/login/ProxyWechatVerify?ticket={ticket}
```
**参数:**
- `ticket`: 微信验证票据(从检测扫码状态接口获取)
**返回:**
- 微信验证页面的HTML内容已处理CORS和路径问题
### 2. 获取微信验证页面
```
GET /api/v1/login/GetWechatVerifyPage?ticket={ticket}
```
**参数:**
- `ticket`: 微信验证票据
**返回:**
- 包含多种验证方式的自定义HTML页面
### 3. 检测扫码状态(已增强)
```
GET /api/v1/login/CheckLoginStatus?key={key}
```
**返回数据包含:**
```json
{
"code": 200,
"data": {
"state": 0, // 0: 等待扫码, 1: 已扫码, 2: 登录成功
"loginState": "waiting",
"data62": "...",
"ticket": "3_890d910a803559e0a6681089cbf70205" // 验证票据
},
"text": "等待扫码"
}
```
## 技术特点
### 1. 微信浏览器模拟
```javascript
req.Header.Set("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.42(0x18002a2f) NetType/WIFI Language/zh_CN")
```
### 2. 自动路径修复
- 将相对路径转换为绝对路径
- 处理CORS跨域问题
- 确保资源正确加载
### 3. 实时状态监控
- 自动轮询检测登录状态
- 智能识别验证需求
- 用户友好的交互体验
## 使用建议
1. **推荐方法一**直接在iframe中验证体验最佳
2. **备用方案**如果iframe加载失败使用新窗口方式
3. **手动方式**:复制链接到新标签页打开(最后选择)
## 安全说明
- 所有验证过程在用户浏览器中完成
- 不存储任何用户凭据信息
- 仅作为微信验证页面的技术代理
- 验证票据具有时效性,过期需重新获取
## 故障排除
### 常见问题
1. **验证页面无法加载**
- 检查ticket是否有效
- 尝试使用不同的验证方法
- 确保网络连接正常
2. **验证后无响应**
- 检查是否完成了验证操作
- 等待几秒钟让系统检测状态变化
- 可手动调用状态检查接口
3. **弹窗被浏览器拦截**
- 允许浏览器弹窗
- 使用iframe方式验证
### 日志调试
```javascript
// 在浏览器控制台中查看
console.log(window.WechatVerifyIntegration);
// 手动触发状态检查
window.WechatVerifyIntegration.checkLoginStatusOnce();
```
## 更新记录
- **v1.0** - 初始版本,支持基本的微信验证页面代理
- **v1.1** - 添加Swagger集成自动检测和弹窗功能
- **v1.2** - 优化用户体验,增加多种验证方式
---
> 本解决方案仅供学习交流使用,请遵守相关法律法规和平台规则。