小学生

- 金币
- 67
- 好评
- 0
- 信誉
- 100
|
可直接到结尾 结尾有惊喜
【前言】
大家好!
最近在研究微信小程序 code 获取和风控规避方案,发现一个很有意思的开源项目 YYB Go。
YYB Go 是一个基于应用宝协议逆向开发的微信扫码接入+服务端代调用wxapp能力的轻量控制台:
• 生成微信扫码二维码,手机确认授权
• 服务端持有`login_buffer`和登录态
• 代调用`getCode`、`getPhoneNumber`、`operateWxData`等能力
简单来说:YYB Go帮你拿到微信小程序的code,用来执行签到、授权等自动化脚本。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【一、项目是什么】
YYB Go 是一个基于 Go 语言开发的应用宝协议逆向的轻量级 Web 控制台,核心解决三个问题:
生成微信扫码二维码,让用户手机授权
服务端接管登录态(login_buffer + 凭据),持久化到 SQLite
对外提供 HTTP 接口,代调用 wxapp 能力(getCode / getPhoneNumber / operateWxData)
一句话定位:“扫码接入 + 服务端持有登录态 + API 代调用” 的工具箱。
适用场景:
需要临时接入微信账号做接口联调
需要在服务端复用登录态,避免频繁扫码
需要为内部测试提供稳定的 wxapp 调用入口
结合代理出口,解决异地登录风控(重点)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【二、技术栈一览】
语言:Go 1.23
Web 框架:Gin
数据库:SQLite(modernc.org/sqlite)
接口文档:Swagger UI + OpenAPI JSON
前端:服务端渲染的 HTML 页面(resource/templates/)
网络代理:支持 SOCKS5 和 HTTP CONNECT
部署环境:MonkeyCode 云机(三天无对话回收,需持久化策略)
依赖简洁,单体部署,非常适合云环境快速拉起。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【四、核心机制详解(重点)】
4.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
4.2 为什么 login_buffer 是关键
login_buffer 是后续所有协议会话建立的核心输入,无需每次重新扫码:
一次扫码得到 login_buffer
基于它建立底层协议会话(ManualAuth → 获取 SendKey/RecvKey/UIN/Ticket/DeviceID/HostAppID/PSK)
会话写入 sessions 表缓存,后续复用
4.3 协议会话建立流程(调用 /wxapp/* 时)
根据 ref 解析账号
查询 sessions 表缓存(按 wechat_account_id + tcp_proxy 维度隔离)
缓存命中 → 直接复用
缓存未命中或失效 → 重新建会话:
读取 login_buffer
获取 LongLink 候选地址
发起 ManualAuth 登录,提取会话密钥
获取 ShortLink 目标列表
组装 WmpfSession 并写入缓存
发起业务调用并返回结果
4.4 会话缓存粒度
sessions 表唯一约束:(wechat_account_id, tcp_proxy)
这意味着同一账号在不同代理出口下可以建立不同会话,为“账号级代理”提供了天然基础。
4.5 账号状态管理
alive:登录态有效
expired:凭据失效,需重新扫码
unknown:状态未知
刷新机制(POST /accounts/refresh):使用 refresh_token 刷新 access token,重新换取 login_buffer,更新状态。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【五、对外接口摘要】
统一返回格式:
{
"code": 0,
"msg": "success",
"data": {}
}
主要接口分类:
【健康检查】
GET /health → 服务存活检查
【扫码登录】
POST /qr 创建二维码会话
GET /qr/{session_id}/image 获取二维码图片
GET /qr/{session_id}/poll 轮询状态(pending/scanned/authorized/confirmed/expired/cancelled)
POST /qr/{session_id}/confirm 确认授权,写入数据库
【账号管理】
GET /accounts 获取账号列表
DELETE /accounts?ref= 删除指定账号
GET /accounts/avatar?ref= 获取头像(本地/302跳转/404)
POST /accounts/refresh 刷新存活状态(可选指定账号)
POST /accounts/resync 重新同步资料(可选指定账号)
【wxapp 调用】
POST /wxapp/getCode 获取小程序登录 code
POST /wxapp/getPhoneNumber 获取手机号
POST /wxapp/operateWxData 通用数据操作(payload 透传)
账号引用(ref)支持:账号ID / UIN / OpenID。
主要错误码:
400 参数错误
404 资源不存在
405 请求方法错误
409 状态不允许(二维码未授权 / 登录态失效)
500 服务端内部错误
502 上游调用失败
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【六、当前安全边界与扩展方向】
现有能力:
扫码接入并持久化账号
login_buffer + 凭据存储与刷新
协议会话缓存与复用(按账号+代理隔离)
全局 TCP 代理支持(SOCKS5 / HTTP CONNECT)
控制台页面 + OpenAPI 文档
三类 wxapp 能力调用
当前缺失(重要):
无后台登录鉴权(任何人访问页面即可操作)
无账号级来源 IP 限制
无权限模型
无操作审计日志
因此目前适合本地测试、内网环境,如要公网或多人协作,必须先做安全加固。
扩展优先级建议:
第一层(安全):
管理后台鉴权 → 操作审计日志 → 账号操作权限控制 → 来源 IP 白名单
第二层(网络策略):
账号级代理配置 → 账号级固定出口 → 调用链路可视化 → 失败重试策略
第三层(易用性):
账号分组与标签 → 调用历史与导出 → 批量健康检查 → 批量重扫提醒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【七、核心扩展:账号级 IP 绑定(解决风控)】
需求背景:
微信风控会校验登录 IP 与账号常用地域是否一致。如果所有账号都走同一个服务器出口,极易触发异地登录提醒。解决办法:为每个账号绑定一个独立的代理出口 IP,让微信看到的 IP 与账号归属地一致。
可行性分析:
当前 sessions 表已经按 (wechat_account_id, tcp_proxy) 隔离会话,transport.go 已支持 SOCKS5/HTTP CONNECT 代理,所以实现基础已具备。只需在 wechat_accounts 表增加账号级代理字段(proxy_type、proxy_addr),并在调用时优先读取。
两种方案:
方案A(账号请求走指定出口 IP):
账号表加代理字段 → 调用时使用账号级代理 → 会话缓存自动隔离
方案B(限制操作来源 IP):
账号表加 allowed_source_ips → HTTP 层校验客户端 IP → 403 拒绝
两个方案可并行,一个控制出口,一个控制入口。
最小改造方案(数据层):
wechat_accounts 新增字段:
bound_proxy TEXT -- 保存 socks5://... 或 http-connect://...
allowed_source_ips TEXT -- 保存 JSON 数组或逗号分隔 IP
后端层:
增加策略解析函数,统一在调用前读取账号级配置,计算有效代理,校验来源 IP。
前端层:
账号详情页增加代理输入框和 IP 白名单输入框。
这样就能实现“每个账号走不同 IP”的精细控制,完美规避异地风控。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【八、MonkeyCode 云环境部署要点】
MonkeyCode 云机三天无对话会回收,建议做好持久化:
Git 备份:
代码和数据库(resource/db/)定时 Push 到 Git 仓库
Docker 化:
将 YYB Go 打包为 Docker 镜像,快速重建环境
Dockerfile 示例:
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 白名单过于严格可能影响正常使用
云环境回收前请做好数据备份,防止账号凭据丢失
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【十一、总结与资源】
核心结论:
YYB Go + MonkeyCode + 账号级 IP 绑定 = 异地登录风控规避的完整方案
YYB Go 提供微信 code 获取能力
MonkeyCode 提供云开发环境
账号级 IP 绑定解决异地风控痛点
最后更新:2026-07-06
技术栈:Go 1.23 + Gin + SQLite + MonkeyCode 云环境
源码以及文档 提示词链接:
https://www.ilanzou.com/s/klixOW6D
monkeycode注册:
http://monkeycode.starorbit.cloud
当前monkeycode 注册 可体验7天专业版会员
基础用户一样可免费使用 一个开发环境 相当于一台永久服务器
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【互动区】
有在用 YYB Go 的兄弟吗?遇到过哪些风控问题?
MonkeyCode 云环境部署 Go 项目有什么坑?
第三方 IP 平台有推荐的吗?求避坑指南
有问题评论区留言,看到必回!
|
-
查看全部评分
总评分:金币 +1
|