【前言】
最近在研究微信小程序 code 获取和风控规避方案,发现一个很有意思的开源项目 YYB Go。
它能够将手机扫码授权转化为服务端可复用登录态,搭配云环境与账号级代理,高效解决异地登录风控难题。


本文结合项目源码与扩展方案整理完整技术文档,欢迎技术交流!
【一、项目是什么】
核心解决三大问题
- 生成微信扫码二维码,支持用户手机授权,服务端接管登录态(login_buffer + 凭据)
- 登录信息持久化至 SQLite,对外提供标准化 HTTP 接口
- 代理调用 wxapp 能力(getCode /getPhoneNumber/operateWxData)
一句话概括:一套实现扫码接入 + 服务端持有登录态 + API 代调用的工具集。
适用场景
✅ 需要临时接入微信账号完成接口联调
✅ 服务端长期复用登录态,减少重复扫码
✅ 为内部测试搭建稳定 wxapp 调用入口
✅ 搭配代理出口,解决异地登录风控(核心场景)
【二、技术栈一览】
- 开发语言:Go 1.23
- Web 框架:Gin
- 数据库:SQLite(modernc.org/sqlite)
- 接口文档:Swagger UI + OpenAPI
- 前端页面:服务端渲染 HTML(resource/templates/)
- 网络代理:支持 SOCKS5、HTTP CONNECT
注意:云机三天无交互自动回收,务必配置持久化策略
优势:依赖精简、单体架构,适合云服务器快速部署启动
【三、核心机制详解(重点)】
3.1 扫码授权链路(两层模型)
用户授权层(手机端)
- 访问
/scan页面 - 请求
POST /qr创建会话 - 服务端发起微信 OAuth 请求,解析二维码 UUID 并返回图片
- 用户手机扫码并确认授权
服务端会话层
- 前端轮询
GET /qr/{session_id}/poll,等待授权状态变更为 authorized - 前端发起
POST /qr/{session_id}/confirm - 服务端请求 OAuth 回调,从 CookieJar 提取 openid /accesstoken/refreshtoken
- 调用 YYB 接口换取 login_buffer
- 将账号信息(login_buffer、授权凭据)持久化写入 SQLite
3.2 login_buffer 的核心作用
- 一次扫码获取 login_buffer
- 依托凭证建立底层协议会话(ManualAuth,获取 SendKey/RecvKey/UIN/Ticket/DeviceID/HostAppID/PSK)
- 会话存入 sessions 表缓存,后续可直接复用
3.3 协议会话建立流程(调用 /wxapp/* 接口触发)
- 根据 ref 匹配目标账号
- 查询 sessions 缓存(隔离维度:wechat_account_id + tcp_proxy)
- ✅ 缓存命中:直接复用现有会话
- ❌ 缓存失效 / 未命中:重建会话
① 读取 login_buffer
② 获取长连接候选地址,执行 ManualAuth 登录,提取会话密钥
③ 获取短连接目标地址列表
④ 组装 WmpfSession 存入缓存
⑤ 执行业务调用并返回结果
3.4 会话缓存粒度
sessions 表唯一约束:(wechat_account_id, tcp_proxy)
同一账号搭配不同代理出口,可生成相互独立的会话,为账号级代理提供底层支撑。
3.5 账号状态管理
- alive:登录态正常有效
- expired:凭据失效,需要重新扫码
- unknown:账号状态无法识别
刷新接口 POST /accounts/refresh
利用 refresh_token 刷新 access token,重新换取 login_buffer,同步更新账号状态。
【四、当前安全边界与扩展方向】
✅ 现有能力
- 扫码接入、账号信息持久化
- login_buffer 与授权凭据存储、自动刷新
- 协议会话缓存复用(账号 + 代理双向隔离)
- 全局 TCP 代理(SOCKS5 / HTTP CONNECT)
- Web 控制台 + OpenAPI 在线文档
- 三类 wxapp 接口代理调用
⚠️ 当前缺失关键能力
- 后台无登录鉴权,任何人可直接访问控制台操作
- 缺少账号来源 IP 限制策略
- 无分级权限管控模型
- 无操作审计日志
适用范围:本地测试、内网环境;若部署公网、开放多人使用,必须优先完成安全加固。
📌 扩展优先级规划
第一层|安全加固(最高优先级)
- 管理后台登录鉴权
- 全量操作审计日志
- 账号操作权限划分
- 访问来源 IP 白名单
第二层|网络策略优化
- 独立账号代理配置
- 账号绑定固定出口 IP
- 调用链路可视化监控
- 请求失败自动重试机制
第三层|使用体验优化
- 账号分组、标签管理
- 调用记录查询与数据导出
- 批量账号健康状态检测
- 凭据失效批量重扫提醒
【五、核心扩展:账号级 IP 绑定(解决风控核心方案)】
需求背景
微信风控会校验账号登录 IP 与常用登录地域。多个账号共用同一服务器出口 IP,极易触发异地登录风险提醒。
解决方案:为每个账号分配独立代理出口 IP,保证微信侧识别 IP 与账号常用地区匹配。
可行性分析
现有 sessions 表已支持 (wechat_account_id, tcp_proxy) 会话隔离,transport.go 原生兼容 SOCKS5/HTTP CONNECT 代理,底层条件完备。
仅需在 wechat_accounts 数据表新增账号专属代理配置字段,调用接口时优先读取对应策略。
两套实现方案(支持同时部署)
方案 A|管控出口 IP(核心风控方案)
账号表新增代理配置 → 接口调用自动使用账号绑定代理 → 会话依据代理自动隔离
方案 B|管控访问入口 IP
账号表配置 allowed_source_ips → HTTP 请求层校验客户端来源 IP,非法 IP 直接返回 403 拒绝访问
最小改动实施方案
数据层(wechat_accounts 新增字段)
- bound_proxy TEXT:存储 socks5://xxx 或 http-connect://xxx 代理地址
- allowed_source_ips TEXT:支持 JSON 数组 / 逗号分隔格式填写白名单 IP
后端层
前端层
【六、MonkeyCode 云环境部署要点】
- Git 定时备份
代码文件 + SQLite 数据库(resource/db/)定时推送远程仓库
- Docker 容器化部署
YYB Go 打包镜像,环境销毁后一键重建
FROM golang:1.23-alpine
WORKDIR /app
COPY . .
RUN go build -o yyb-go ./cmd/yyb-go
EXPOSE 8000
CMD ["./yyb-go", "--host", "0.0.0.0", "--port", "8000"]
- 代理配置持久化
代理信息存入数据库(账号级代理扩展配置),环境重建自动加载
基础运行命令(全局代理可选配置)
go run ./cmd/yyb-go --host 0.0.0.0 --port 8000 --db ./resource/db/yyb.db --tcp-proxy socks5://proxy:1080
【七、风险与注意事项】
📜 合规提示
本方案仅限技术学习、原理研究使用
请严格遵守微信用户协议以及国家相关法律法规
禁止大规模自动化运营、商用落地
⚙️ 技术注意事项
- 代理 IP 质量直接影响会话稳定性,优先选择高质量代理服务商
- 账号代理参数配置错误,会直接导致协议会话创建失败
- IP 白名单限制过严,容易造成正常请求被拦截
- 云环境回收前提前备份数据库,避免账号授权凭据永久丢失






青龙脚本合集-4-小鑫の小屋">













- 最新
- 最热
只看作者