4.2 KiB
4.2 KiB
微信验证页面浏览器访问解决方案
问题描述
微信的安全验证页面(如 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中的集成
自动检测功能
- 当调用获取二维码接口后,系统自动开始监控登录状态
- 检测到需要验证时,自动显示浮动验证按钮
- 点击按钮即可打开验证弹窗
使用流程
- 在Swagger中调用获取二维码接口
- 用户扫描二维码
- 如果需要安全验证,右下角会出现"🔐 安全验证"按钮
- 点击按钮打开验证弹窗
- 在弹窗中完成滑块验证
- 验证成功后自动关闭弹窗,继续登录流程
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}
返回数据包含:
{
"code": 200,
"data": {
"state": 0, // 0: 等待扫码, 1: 已扫码, 2: 登录成功
"loginState": "waiting",
"data62": "...",
"ticket": "3_890d910a803559e0a6681089cbf70205" // 验证票据
},
"text": "等待扫码"
}
技术特点
1. 微信浏览器模拟
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. 实时状态监控
- 自动轮询检测登录状态
- 智能识别验证需求
- 用户友好的交互体验
使用建议
- 推荐方法一:直接在iframe中验证,体验最佳
- 备用方案:如果iframe加载失败,使用新窗口方式
- 手动方式:复制链接到新标签页打开(最后选择)
安全说明
- 所有验证过程在用户浏览器中完成
- 不存储任何用户凭据信息
- 仅作为微信验证页面的技术代理
- 验证票据具有时效性,过期需重新获取
故障排除
常见问题
-
验证页面无法加载
- 检查ticket是否有效
- 尝试使用不同的验证方法
- 确保网络连接正常
-
验证后无响应
- 检查是否完成了验证操作
- 等待几秒钟让系统检测状态变化
- 可手动调用状态检查接口
-
弹窗被浏览器拦截
- 允许浏览器弹窗
- 使用iframe方式验证
日志调试
// 在浏览器控制台中查看
console.log(window.WechatVerifyIntegration);
// 手动触发状态检查
window.WechatVerifyIntegration.checkLoginStatusOnce();
更新记录
- v1.0 - 初始版本,支持基本的微信验证页面代理
- v1.1 - 添加Swagger集成,自动检测和弹窗功能
- v1.2 - 优化用户体验,增加多种验证方式
本解决方案仅供学习交流使用,请遵守相关法律法规和平台规则。