首页
留言
壁纸
友链
更多
统计
直播
推荐
🙈注册账户
🏠登录账户
📝写作投稿
👮前往后台
📩找回密码
Search
1
家庭宽带IPv6搭建3X-UI全攻略
795 阅读
2
小米刷机利器:MiFlash Prime Edition 2024.08.01 (修改版) - 9008免授权免登陆刷机指南
396 阅读
3
【飞牛】飞牛系统挂载失败(内部错误)修复指南
368 阅读
4
从零开始搭建 Docker + 青龙面板 + 机器人框架 + 对接微信/QQ 机器人
322 阅读
5
【教程】wxcode+YYB Go融合网关:单容器实现微信小程序取码(架构说明与完整部署指南)
313 阅读
📑教程
💾资源
📱Android
🖥️Windows
💐活动
🏡日常
👨💼版务
💌情感
登录
/
注册
Search
标签搜索
windows
Android
docker
青龙
typecho
软件
Debian
github
插件模块
joe
玩客云
ipv6
DDNS
网络
QQ
京东
框架
web
谷歌
免流
时间煮雨
累计撰写
1,019
篇文章
累计收到
321
条评论
首页
栏目
📑教程
💾资源
📱Android
🖥️Windows
💐活动
🏡日常
👨💼版务
💌情感
页面
留言
壁纸
友链
统计
直播
推荐
🙈注册账户
🏠登录账户
📝写作投稿
👮前往后台
📩找回密码
搜索到
57
篇与
的结果
2026-11-12
(教程)wxcode-yyb-fusion:微信协议网关与多账号控制台(Docker 部署与使用指南)
wxcode-yyb-fusion微信协议网关 + 多账号控制台,单个 Docker 容器即可运行。手机微信扫码授权 → 服务保存并续期凭据 → 对内提供「按账号取小程序 code」与「多账号控制台」两类能力。自带 Web 管理界面、渠道化扫码、账号合并与编队、掉线与保活通知,并与青龙 / 呆呆 / Arcadia 面板联动。1. 项目定位很多自动化脚本需要小程序或公众号的 code(wx.login / 网页授权)。手工取码无法持续,直接用账号密码登录又有风险。本项目的做法是:用手机微信扫码把账号授权一次,服务端保存协议凭据并在后台自动续期,之后脚本只要带上账号引用请求网关,就能随时拿到可用的 code——扫码在浏览器里完成,凭据不出服务器。配套的控制台把「有哪些账号、各自多久过期、跑在哪个面板、什么时候掉线」放在一张页面上,并提供账号级隔离、脚本目录可见范围与访问令牌等管理能力。2. 功能总览序号能力说明1多渠道扫码应用宝、腾讯电脑管家、腾讯手游助手、雷电模拟器、QQ 浏览器 5 条渠道,同一微信号可多渠道绑定后合并2取码小程序 wx.login code、公众号网页授权 code、以及 /wx/* 兼容接口(用户信息、手机号、云函数、加密密钥等)3账号管理扫码添加 / 重复扫码刷新、备注、状态与有效期、合账、账号 ID 压缩、按账号删除4保活后台按凭据剩余时间自动刷新,可配置检查间隔与提前量5代理每账号独立直连 / 静态代理 / SOCKS5 / 动态代理 API6面板联动青龙、呆呆、Arcadia 三套面板驱动:同步 YYB_SERVER、按账号建任务、启停、读隔离日志7脚本管理内置脚本集合与同步工具,可按账号运行、按目录放行可见范围8用户与权限独立登录注册、管理员与普通用户、账号归属、「脚本可读」开关9可观测性运行日志与调用记录视图、GET /api/system-logs、掉线通知(Server酱 / PushPlus / 企业微信机器人)10防封取码熔断、同账号限速、登录预算、网站应用 AppID 拒取与空码临时限制3. 项目地址与界面截图项目地址:隐藏内容,请前往内页查看详情界面截图:4. 快速开始4.1 Linux / macOS隐藏内容,请前往内页查看详情4.2 启动后访问访问:http://<你的服务器IP>:8088。容器部署完成会生成初始管理员账号:admin 和 16 位随机密码。密码在容器日志可查看,或者通过以下命令获取:docker logs <容器名> 2>&1 | grep 管理员账号名可用 YYB_ADMIN_USER 覆盖。5. 版本亮点:v175.1 多取码渠道取码渠道从 1 条(应用宝) 扩展至 5 条:序号渠道状态1应用宝✅ 稳定2腾讯电脑管家✅ 稳定3腾讯手游助手✅ 稳定4雷电模拟器🧪 实验5QQ 浏览器✅ 稳定渠道清单由服务端统一下发,扫码页 / 账号卡片 / 设置页共用同一份配置。同一微信号支持多渠道取码合并。账号新增「扫码渠道」标识与「账号矩阵主账号」。5.2 控制台界面重构全新外壳:横幅 + 分组侧栏 + 底部工具栏。一级入口调整为:工作台我的微信账号添加账号运行与日志代理设置管理分组:用户管理 / 运行日志。支持明暗主题切换。新增页面:账号矩阵账号级代理与代理档案已激活短链接系统日志多账号一次性短链接页5.3 安全与限流新增取码熔断 / 限速 / 登录预算。AppID 黑白名单:页面可在线调整,环境变量仅作默认值。新增 H5 取码链路、设备标识。桌面微信快速授权(默认关闭)。协议令牌与集成令牌。掉线通知。青龙脚本管理。5.4 规模升级序号指标变化1配置变量16 → 40 项2HTTP 接口57 → 95 条3新增接口/api/version、/static/version.json6. 目录挂载说明序号宿主机路径容器内路径用途1./data/db/app/resource/db数据库持久化2./data/avatars/app/resource/avatars头像缓存3./data/qr/app/resource/qr二维码缓存建议将 ./data 目录做定期备份。7. 环境变量序号变量默认值说明1TZAsia/Shanghai容器时区其余 39 项配置可在控制台内在线调整,环境变量仅作为默认值。8. 数据、备份与升级8.1 数据位置数据都在 DATA_DIR(默认 ./data):db/:SQLite 库。avatars/:头像。qr/:二维码。8.2 备份与恢复备份:停容器后拷走整个 data/ 目录。恢复:放回同一路径再启动。8.3 升级与回滚升级:docker compose pull && docker compose up -d(或重跑 deploy.sh)。数据目录与令牌都保留。回滚:.env 里把 IMAGE_TAG 固定成旧发布号,例如 v16,再 up -d。
2026年11月12日
3 阅读
0 评论
0 点赞
2026-11-11
【教程】飞牛 NAS 上用 Docker 部署 3x-ui:面板、节点与热点共享的完整配置记录
飞牛 NAS 上用 Docker 部署 3x-ui:面板、节点与热点共享的完整配置记录摘要:找一台能 24 小时开机的设备做容器宿主,NAS 是最省心的选择。本文以飞牛 fnOS 为例,用 Docker 部署 bigbugcc/3x-ui,完成面板访问、vmess+WS 入站、客户端导入,并把手机做成热点共享出口,全程配置逐项记录。适用环境:飞牛 fnOS(Docker 已启用)|3x-ui 容器版|Android(已 root)|阅读约 10 分钟|难度 ★★★☆☆一、为什么把容器放在 NAS 上跑这类服务,最核心的诉求不是性能,而是在线时长。一台常年开机、功耗十几瓦、还能顺带做存储与备份的设备,比任何云主机都划算。飞牛 fnOS 自带 Docker 可视化管理,容器参数在图形界面里填完即可,不必手写 compose 文件,对不熟悉命令行的用户更友好。开始之前,请先确认四件事:Docker 已安装并运行——飞牛「应用中心」安装 Docker 后,可在「Docker → 容器」看到管理界面。设备可以长期开机——建议接 UPS 或至少保证不断电,容器重启策略设为「除非手动停止」。存储目录已规划好——本文统一使用 /vol1/1000/01系统盘/docker/3x-ui,请先在「文件管理」里把目录建好。清楚自己的网络出口——家宽公网 IP 是动态还是固定、路由器能否放行端口,直接决定后面用 host 还是 bridge 网络。二、部署参数一览以下参数即为飞牛 Docker 界面中需要填写的内容,先整体过一遍,再逐项解释。项目值镜像bigbugcc/3x-ui网络模式host启动命令./x-ui重启策略除非手动停止面板端口2053(TCP)节点端口10001(TCP + UDP)端口映射(若采用 bridge 网络需全部填写;host 模式下见下文说明):宿主机端口容器端口协议20532053TCP20532053UDP1000110001TCP1000110001UDP目录挂载:本地路径装载路径权限/vol1/1000/01系统盘/docker/3x-ui/etc/xUi读写/vol1/1000/01系统盘/docker/3x-ui/etc/x-ui读写环境变量:变量名值TZAsia/ShanghaiXUI_IN_DOCKERtrueXUI_MAIN_FOLDER/appXUI_ENABLE_FAIL2BANtruePATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binXUI_DB_TYPE留空XUI_DB_DSN留空几个关键点的说明:XUI_IN_DOCKER=true 是容器化运行的开关,必须设置,否则面板可能按裸机路径去找资源而启动失败。XUI_MAIN_FOLDER=/app 与启动命令 ./x-ui 是配套的:程序位于 /app 目录下,命令用相对路径执行。两者对不上就会报“找不到文件”。XUI_DB_TYPE 与 XUI_DB_DSN 留空 表示使用容器内的默认 SQLite 数据库,数据文件落在挂载目录中,删容器不丢配置。两个挂载点大小写不同(/etc/xUi 与 /etc/x-ui)。社区镜像在不同版本里对路径的处理不一致,同时挂载可兼容历史版本;但如果发现改完配置不生效,建议只保留 /etc/x-ui 一个,避免两个目录各写一份造成混乱。三、关于网络模式的一处取舍这里有一个容易踩的坑:host 模式下,端口映射是不生效的。容器与宿主机共用同一网络命名空间后,容器内监听 2053、10001 就等于宿主机在监听这两个端口,界面上填的「2053→2053」这类映射会被忽略(填了也无害,只是不起作用)。这意味着:端口天然全部暴露,安全性依赖宿主机的防火墙,需要在飞牛或路由器层面确认 2053 与 10001 的放行规则;正常情况下不需要额外做端口转发,但路由器若开了 DMZ 或端口映射表,要保证这两个端口指向本机;XUI_ENABLE_FAIL2BAN=true 在 host 网络下才有意义,它依赖容器对 iptables 的操作权限。若日志里出现 fail2ban 相关报错,可在容器的高级设置里补上 NET_ADMIN 与 NET_RAW 两个能力,或先把该变量改为 false 让服务先跑起来。如果你更看重隔离性,也可以改用 bridge 网络:此时上面那四条端口映射才真正起作用,务必把 2053、10001 的 TCP 与 UDP 都映射上。虽然 vmess over WebSocket 的传输层本身是 TCP,但入站若开启 UDP 转发,或客户端产生 QUIC、DNS over UDP 之类的流量,只映射 TCP 会出现"连得上但部分功能异常"的现象,这正是需要同时映射 UDP 的原因。四、创建容器并登录面板按下图参数在飞牛 Docker 中新建容器,启动后浏览器访问:http://<NAS的IP>:2053首次进入会提示证书不受信任(面板自带自签证书),选择继续访问即可。默认账号密码均为 admin。安全提醒:登录后第一件事是改掉默认密码,并把面板路径从默认值改成自定义字符串。默认凭据与默认端口是扫描器的第一目标,这一步不能省。五、添加入站(vmess + WebSocket)进入「入站列表 → 添加」,在高级配置中选择「全部」,直接粘贴完整 JSON。这种写法比在表单里逐项点选更可靠,也不容易漏掉嵌套字段。{ "listen": "", "port": 10001, "protocol": "vmess", "tag": "in-10001-tcp", "settings": {}, "sniffing": { "enabled": false }, "streamSettings": { "network": "ws", "wsSettings": { "acceptProxyProtocol": false, "path": "/", "host": "这里填需要的host", "headers": {}, "heartbeatPeriod": 0 }, "security": "none" } }保存前记得设置备注名,例如 家宽——后面添加客户端时要靠这个备注关联入站。逐字段解释:字段含义与填写要点listen留空表示监听所有网卡,host 模式下即宿主机全部地址port与端口映射保持一致,此处为 10001protocolvmess,与客户端协议必须一致tag内部标识,建议按 in-端口-传输 命名,便于日后排查sniffing.enabled关闭流量嗅探,减少额外开销与误判streamSettings.networkws(WebSocket),比裸 TCP 更易与常规 Web 流量共存wsSettings.path"/"。必须与客户端填写完全一致,多一个斜杠都会握手失败wsSettings.host按需填写 Host 头,可与实际域名一致;留空则客户端也不要填wsSettings.acceptProxyProtocol前置无反代时保持 falsestreamSettings.securitynone 表示本入站不做 TLS,加密由 vmess 自身协议层提供六、添加客户端回到入站列表,找到刚建的 家宽,点击进入客户端管理 → 添加客户端:关联入站:选择 家宽;其余参数保持默认,直接创建。创建完成后,列表里会出现该客户端的 UUID、邮箱标识与流量统计,这些是后续导入设备时唯一需要依赖的凭据。七、在客户端导入节点点击客户端前方的二维码图标,会弹出两个二维码:第一个通常是订阅或分享信息;第二个才是可被客户端直接识别的节点链接,用需要上网的设备扫描这一个。经验项:原作者实测中曾遇到导入后无法握手、需要把客户端的 WebSocket「伪装类型 / header type」从 none 改为 http 才连通的情况。不同客户端版本对该项的默认值并不统一,若扫描后连接失败,可优先调整这一项再重试;判断标准只看实际握手结果,不必纠结默认值。八、手机热点共享(需 root)这一节的目的是把手机的代理出口分享给同一热点下的其他设备——平板、电视盒子、笔记本都可以直接借用手机的网络通道,无需在每台设备上单独装客户端。在已 root 的 Android 手机上安装 VPNHotspot,进入侧边栏的「Wi-Fi 共享」,按 root 权限授权,热点配置如下:上游:上游网络接口:自动检测系统 VPN(当前为 tun0)备用上游接口:自动检测系统默认网络(当前为 rmnet_data6)下游:IP 掩蔽模式:简易IPv6:模式 NAT(用户空间)网络共享硬件加速:关开关项:静态 IP:开wlan2:开监视重新连接:开WLAN 热点:开其余全部关闭几处需要留意的逻辑:上游必须选中 VPN 接口(tun0),共享出去的才是代理后的流量;若误选蜂窝接口 rmnet_data6,下游设备拿到的将是运营商直连出口。下游的 IPv6 使用 NAT 模式而非桥接,是为了避免热点侧分配出上游无法回程的地址。关闭硬件加速可规避部分机型上「设备能连上但无流量」的兼容性问题,代价是吞吐略有下降。静态 IP 与「监视重新连接」同时开启,能减少手机休眠或 VPN 重连后热点失效的概率。九、验证是否生效用手机和任一连接该热点的设备,各自打开浏览器访问 IP 查询站点,比对两处结果:手机显示的出口 IP;热点下设备的出口 IP。两者一致,且都是家里的公网 IP,说明整条链路成立:设备 → 手机热点 → VPN 上游 → NAS 节点 → 家庭出口。若不一致,通常是上游接口选错,或 VPN 未处于连接状态。十、常见问题清单现象排查方向面板打不开确认容器为 running;2053 是否被防火墙拦截;host 模式下无需端口映射,bridge 模式下必须映射面板能开但显示不安全正常现象,自签证书,浏览器放行即可;有条件可后续替换正式证书节点连接超时目标端口未放行;家宽公网 IP 已变更;path 或 host 与客户端不一致握手失败、日志报 404WebSocket 路径不匹配,检查 / 是否被漏写或多写能连上但无法打开网页客户端 WebSocket 伪装类型与入站不符;DNS 配置问题;入站 security 与客户端不一致vmess 校验失败系统时间偏差过大,NTP 未同步,误差超过 90 秒会直接拒绝重启容器后配置丢失挂载路径写错,数据没落到宿主机目录;检查 /etc/x-ui 下是否有 x-ui.dbfail2ban 启动报错host 网络下缺少 NET_ADMIN / NET_RAW 能力,或临时设 XUI_ENABLE_FAIL2BAN=false十一、小结整套流程可以压缩成四个动作:拉镜像 → 定网络模式 → 配入站 → 导客户端。真正决定成败的不是面板里填了多少项,而是三个一致性:端口一致:入站端口、映射端口、客户端端口三者对齐;路径一致:WebSocket 的 path 与 host 在服务端与客户端完全对应;网络模式一致:host 模式别再指望端口映射,bridge 模式别漏掉 UDP。再往上,就是出口侧的问题了——公网 IP 是否可达、防火墙是否放行、时间是否同步。把这三层依次排掉,绝大部分"连不上"都能定位到具体环节。十二、文件下载包含tiny客户端和wifi热点共享工具。隐藏内容,请前往内页查看详情本文配置基于飞牛 fnOS + Docker 实际部署整理 · 请遵守当地法律法规与网络服务条款,仅用于自有环境的技术实践 · 转载请注明出处
2026年11月11日
3 阅读
0 评论
0 点赞
2026-10-22
【教程】智能插座通电,电脑自启后远程只有 640×480分辨率?一招让主机恒定输出 1080p
tags:远程桌面向日葵虚拟显示驱动智能插座Windowscategories:实战排错description: 智能插座通电自启 + 向日葵远程,画面却只有 640×480。根因不是显示器没亮,而是显卡读不到 EDID。用虚拟显示驱动(VDD)让主机恒定输出 1080p 的完整实操记录。智能插座通电自启后远程只有 640×480?一招让主机恒定输出 1080p摘要:用向日葵 + 独显 + HDMI,靠"通电自启"实现无人值守远程,却被低分辨率卡住?根因不在显示器,一套虚拟显示驱动彻底解决。适用环境:Windows + 向日葵 16.5 + AMD Radeon RX 6650 XT(独显 / 核显均可)|阅读约 6 分钟|难度 ★★☆☆☆把台式机挂到智能插座上、BIOS 里开「断电恢复后自动开机」,本是为了人在外面也能随时远程唤醒。结果一连远程,画面糊成 640×480 —— 这个问题我踩过一次,把排查过程和最终方案完整记录下来。一、问题现象把台式机接到智能插座上,在 BIOS 里设置「断电恢复后自动开机(Restore on AC Power Loss = Power On)」。人在外面,用手机或另一台电脑远程开机,本意是无人值守也能用。但连上远程(向日葵 / ToDesk / TeamViewer 这类镜像物理桌面的软件)后,画面糊成一团——分辨率只有 640×480 甚至 800×600,根本没法正常操作。物理显示器明明接在 HDMI 上,为什么远程就"瞎"了?是显示器不自动亮屏,还是别的原因?二、根因分析(关键)核心结论:远程分辨率错乱,根因是「显卡没检测到任何显示器」,而不是显示器本身亮不亮。当主机被智能插座通电自启时,如果物理显示器:没接在同一个智能插座上(一直待机,主机先上电时它还没醒);或虽然接了智能插座,但上电时序比主机晚、没同步;那么在远程连接发起的瞬间,显卡读不到显示器的 EDID 信息,Windows 就回退到一个最低默认分辨率来跑桌面。这个兜底值甚至会被远程软件记下来——在向日葵的 config.ini 里就能看到:[18523252421] screen_width=640 screen_height=480物理显示器亮不亮、亮了切不切得对输入源,是另一回事;远程低分辨率的根因就是「无显示设备」。所以想根治,得让系统"永远以为接了一台 1080p 显示器"。三、三种解决方案对比方案类型原理优点缺点HDMI / DP 欺骗器硬件伪装成一台固定 1920×1080 的显示器,持续向显卡上报 EDID最稳、十几元、即插即用需买 / 等快递;占用一个视频口虚拟显示驱动(本文采用)软件系统凭空多出一块虚拟 1080p 屏,独立于物理显示器免费、断电重启常驻、不占物理口需确认驱动已正确安装启用双智能插座时序硬件接线主机先上电 → 延迟 → 显示器上电,避免时序错位让物理屏也能自动亮只解决"物理屏亮",不解决远程分辨率选型提示:HDMI 欺骗器最省心;而虚拟显示驱动适合不想等快递、或显卡接口已被占满的情况。本文实测走虚拟驱动路线,最终远程恒定 1080p。补充:RDP(Windows 自带远程桌面)是独立会话、自带分辨率协商,一般不会出现此问题。低分辨率错乱多见于向日葵 / ToDesk / TeamViewer 这类"镜像物理桌面"的软件。四、实操:启用虚拟显示驱动(VDD)锁定 1080p下面这套是在一台 AMD Radeon RX 6650 XT 独显 + HDMI + 向日葵 16.5 的机器上实测成功的流程。系统里其实常自带一个名为 Virtual Display Driver(MttVDD) 的间接显示(IddCx)驱动,只是默认没启用。把它打开即可。1. 确认当前「无显示器」状态以管理员身份打开 PowerShell,看现在有几块"显示器"在线:Get-PnpDevice -Class Monitor | Select-Object FriendlyName,Status,InstanceId若物理显示器显示 Unknown(未激活)、且没有虚拟屏,就印证了"无有效显示"的离屏状态——这正是远程掉到 640×480 的原因。2. 找到虚拟显示驱动并启用虚拟显示驱动通常通过 winget 安装包附带一个 VDD Control 控制台。它的配置文件 vdd_settings.xml 默认就是 <monitors><count>1</count></monitors>,且分辨率列表里已含 1920×1080,只是驱动没真正装上 / 启用。用管理员 PowerShell 安装并启用驱动(GUI 程序的静默安装 / 启用逻辑会把 amd64 驱动写入系统驱动库):# 以管理员运行,安装虚拟显示驱动到系统驱动库 # 启动 VDD Control 并执行 install / enable # 具体以你安装的 VDD 包为准(winget 安装的包在 # %LOCALAPPDATA%\Microsoft\WinGet\Packages\ 下)注意:若你机器上装的是向日葵自带的 OrayIddDriver,其启用开关在 config.ini 的 [local_security] 段加一行 enable_idd=1 即可;但不建议同时开两个虚拟显示驱动,否则会多出一块扩展屏、反而造成桌面扩展 / 分辨率错乱。3. 重启远程控制服务让配置生效Restart-Service -Name AweSunService -Force4. 验证结果重启后再次查看设备与分辨率:Get-CimInstance Win32_VideoController | Select-Object Name,CurrentHorizontalResolution,CurrentVerticalResolution,CurrentRefreshRate应能见到类似:Virtual Display Driver : 1920 x 1080 @ 60Hz同时 Generic Monitor (VDD by MTT) 状态为 OK 且 Active=True,说明虚拟屏已激活。实测环境:虚拟显示器已激活,分辨率稳定在 1920×1080 @ 60Hz五、为什么这样能「断电重启后依然有效」关键在于:驱动被真正写进了系统驱动库(DriverStore)。在本机确认到:mttvdd.inf_amd64_**** (已装入系统驱动库)✅ 已实测验证:虚拟显示器当前为 1920×1080 @ 60Hz,驱动在驱动库中、断电重启后依然常驻。以后智能插座通电 → 主机自启,无论物理显示器亮不亮、插没插,系统都恒定有一块 1080p 虚拟桌面,远程连接就是 1080p。六、注意事项本地接上物理屏时:会同时存在"虚拟 1080p + 物理屏"两块(扩展模式)。本地用机若不想多出那块虚拟屏,打开开始菜单的 VDD Control 关闭虚拟显示器,或把 vdd_settings.xml 的 <count> 改成 0。远程不受物理屏影响:向日葵镜像的是桌面,虚拟屏常驻后远程画质恒定 1080p,物理屏亮不亮都不影响。改动前先备份:若改过向日葵 config.ini,先复制一份 config.ini.bak;出问题直接覆盖还原。避免双虚拟屏:向日葵自带虚拟显示(enable_idd)与 VDD 二选一,不要同时开。想再加一块 / 调更高刷新率:用 VDD Control 即可增删虚拟屏数量或调整模式。七、总结「远程控制时分辨率不对」的本质,几乎都是显卡检测不到显示器导致系统回退到低分辨率。最稳的解法有两条:花十几块买个 HDMI / DP 欺骗器——插上即 1080p,零配置;启用系统 / 软件的虚拟显示驱动——免费、不占物理口、断电重启常驻(本文路线)。两者都让主机"永远以为接了一台 1080p 显示器",从根上解决远程分辨率错乱。「显示器不自启亮屏」对远程画质的影响,也就此消除。🔧 实测结论:本机启用虚拟显示驱动后,远程分辨率稳定 1920×1080 @ 60Hz,断电重启后依然有效。本文由一次真实排错整理而成 · 适用环境:Windows + 向日葵 + 独显 / 核显 · 转载请注明出处
2026年10月22日
8 阅读
0 评论
0 点赞
2026-10-13
【教程】微信4.1.12版本作为机器人对接无界(Bncr)
微信机器人对接无界(Bncr)完整教程用户微信发消息 → 无界匹配规则 → 业务插件处理 → 自动回复微信⚠️ 开始前必读本方案的技术路线:不 Hook、不逆向协议、封号风险低做法本方案逆向微信协议(iPad 协议 / Pad 协议)❌ 不采用注入(Hook)微信进程 / 修改微信 DLL❌ 不采用伪装异地设备登录❌ 不采用连接第三方授权服务器❌ 不采用只读微信本地加密数据库✅ 采用模拟真人操作本机微信界面✅ 采用关键点:微信看到的是你自己这台电脑上的微信客户端在正常使用 —— 没有异常登录、没有进程被改、没有 DLL 被注入。微信版本要求(必须严格满足)项要求微信版本4.1.12 及以上(作者在 4.1.15.13 实测验证)微信 3.x❌ 完全不支持(架构不同)微信 4.0.x❌ 不支持(低于 4.1.12)微信 4.1.12 ~ 4.1.15⚠️ 可用,但 UIA 布局可能需校准微信 4.1.15.13✅ 最佳,作者已适配查看版本:微信 → 设置 → 关于微信版本太旧会怎样:控件树热激活的 gate RVA 位置对不上,发送会退回到纯 OCR/坐标路径,慢且不准。版本太新会怎样:微信大版本升级后 UIA 布局可能漂移,作者需要跟进适配。环境要求项要求说明操作系统Windows 10/11 x64必须 Windows,Linux/Mac 不支持Python3.12(64 位)⚠️ 3.13+ 会因 winsdk 缺包安装失败桌面必须可见窗口最小化会失效微信状态已登录且运行中 目录原理与选型架构第一步:Windows PC 装 wechatauto第二步:云服务器部署无界适配器第三步:PC 部署桥接脚本第四步:端到端联调第五步:安全加固第六步:开机自启排查手册附录:文件清单风险声明一、原理与选型1.1 为什么不选协议端市面上让个人微信变机器人的方案,主流是「协议端」:方案原理封号风险第三方依赖WeChatPadPro / Gewechat逆向 iPad 协议,伪装异地设备登录🔴 高🔴 需连作者授权服务器WeChatFerry / ntchat注入(Hook)微信 DLL🔴 极高⚠️ 闭源网页版协议逆向网页微信🔴 高微信已关闭网页版本方案(wechatauto)读本地加密库 + 驱动本机界面🟡 低✅ 无为什么协议端和 Hook 风险高:协议端:微信服务器看到的是「一个新设备在异地登录」,与你的真实登录地/设备指纹不符 → 风控模型直接命中。号商自己都写「新号要挂机 3 天养号」「异地登录必须用同市 socks5 代理」。Hook:微信 4.x 有完整性校验,检测到进程被改会直接判定为外挂 → 秒封。1.2 本方案的技术原理wechatauto-replica 用两条互相独立的路线:┌─────────────────────────────────────────────────┐ │ 读路径 = 本地 SQLCipher-4 数据库解密 │ │ │ │ 微信把消息存在加密 SQLite 里: │ │ xwechat_files/<wxid>/db_storage/ │ │ ├── contact.db │ │ ├── message_0.db / message_1.db / ... │ │ └── media_0.db │ │ │ │ 密钥藏在 Weixin.exe 进程内存里,库用【只读扫描】 │ │ 取出,再用 SQLCipher HMAC 规则逐个校验。 │ │ │ │ ★ 只读本地文件,不产生任何网络请求 │ │ ★ 不修改微信任何文件 │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 发路径 = UIA 控件树 + 坐标/OCR 兜底 │ │ │ │ 微信 4.x 界面是自绘的,控件树默认隐藏。 │ │ 库会【热激活】Weixin.dll 里一个标志字节, │ │ 让 mmui::* 控件树物化,然后: │ │ · 激活窗口 → 搜索会话 → 点输入框 │ │ · 剪贴板 Ctrl+V 粘贴 → 回读校验 → 回车 │ │ │ │ ★ 走的是微信自己的 UI 流程,等同真人点击 │ │ ★ 不注入代码、不修改 DLL 内容(只翻一个标志位) │ └─────────────────────────────────────────────────┘1.3 为什么封号风险低风控维度协议端本方案登录设备❌ 伪装 iPad,与真实设备不符✅ 就是本机登录登录地点❌ 异地,需代理伪装✅ 本机 IP,无异常进程完整性❌ DLL 被注入/篡改✅ 进程未被修改行为特征⚠️ 可被识别为机器人✅ 见下方拟人节奏层数据流向⚠️ 经第三方服务器✅ 纯本地 + 你自己的服务器作者的真实风控记录(原文引用):本机账号在 2026-09-21 触发过一次风控(会话中途被要求重新登录),此后凡是驱动真实微信界面的动作都必须按真人节奏走,而且要做进库里。注意:作者触发风控的原因是「驱动界面太快」(模拟点击频率机器化),不是「读数据库」。所以他做了拟人节奏层 rhythm.py:拟人措施说明光标移动走二次贝塞尔曲线,不是瞬移落点在控件内随机取点,不打正中键入type_gap() / key_hold() 打破匀速写动作节流两次发送至少隔 2.5~6 秒突发上限120 秒窗口内第 7 次写动作 → 冷却 30~75 秒等待抖动所有 nap() 加随机抖动跨进程生效节流状态落盘 ~/.wechatauto/rhythm.json风控看到的是「动作的时间分布」而不是坐标 —— 固定间隔、光标瞬移、永远命中控件正中、逐字匀速键入、几秒内连发多条,这些特征才是风控的判据。拟人层正是针对这些。读路径完全不节流 —— 因为读本地文件不产生任何风控信号。1.4 本方案的代价约束说明必须 Windows依赖 UIA / pywin32,Linux 跑不了必须有可见桌面微信窗口最小化 → 发送会退回 OCR 路径发送会抢鼠标走剪贴板 + 模拟点击,这台机器别用于其他工作回复延迟 5~8 秒UIA 发送 + 拟人节奏的固有成本延迟构成:用户发消息 ↓ 约 1 秒 (监听轮询数据库) 上报无界 ↓ 约 0.01 秒(规则匹配 + 插件执行) PC 取回复 ↓ 约 0.8 秒 (轮询间隔,可调) UIA 发送 ↓ 2~6 秒 (激活窗口 + 打开会话 + 粘贴 + 回读校验 + 回车) ↓ 2.5~6 秒 (拟人节奏写动作间隔) 用户看到回复5~8 秒对大多数场景可接受(用户发「菜单」等几秒很正常)。想更快只能上协议端 —— 但要拿封号风险换。1.5 一句话总结本方案不 Hook、不逆向协议、不伪装登录。微信看到的是「本机微信在被真人缓慢使用」。代价是慢几秒、必须 Windows、必须有小号常开的机器。二、架构┌─────────────────────────────┐ ┌──────────────────────────────┐ │ Windows PC │ │ 云服务器 │ │ │ │ │ │ ┌───────────────────────┐ │ HTTP │ ┌────────────────────────┐ │ │ │ 微信 4.1.12+(已登录) │ │ │ │ 无界 Bncr 容器 (:9090) │ │ │ │ ★ 窗口必须可见 │ │ │ │ │ │ │ └───────────┬───────────┘ │ │ │ ├─ 无界本体 │ │ │ │ 读库 / UIA │ │ │ └─ WeChatBridge 适配器 │ │ │ ┌───────────▼───────────┐ │ │ │ (挂 router) │ │ │ │ wechat_bridge.py │──┼───────→│ └───────────┬────────────┘ │ │ │ · AddListenAll 监听 │ │ POST │ │ adapter.receive() │ │ · 上报新消息 │ │/incoming│ ↓ │ │ │ · 轮询取回复 │←─┼────────│ ┌────────────────────────┐ │ │ │ · chat.SendMsg() │ │ GET │ │ 无界规则匹配 @rule │ │ │ └───────────────────────┘ │ /pull │ └───────────┬────────────┘ │ │ │ │ ↓ │ │ 出网:只需访问云服务器 9090 │ │ ┌────────────────────────┐ │ │ ★ 无需公网 IP、无需穿透 │ │ │ 业务插件(YYB查询等) │ │ └─────────────────────────────┘ │ │ sender.reply(...) │ │ │ └────────────────────────┘ │ └──────────────────────────────┘穿透方向是「PC 主动连出去」 —— 所以 PC 在内网也能用,不需要公网 IP、不需要 frp。数据流(六步)#动作耗时1用户发微信消息—2AddListenAll 轮询数据库读到约 1 秒3POST /wechat/incoming 上报~0.1 秒4适配器 adapter.receive() 注入无界事件流⭐ 关键5无界匹配 @rule → 业务插件 sender.reply()~0.01 秒6PC 轮询 /wechat/pull → chat.SendMsg()0.8s + 发送耗时为什么桥接层必须是「适配器」不是「插件」无界的 @rule 只匹配框架自己的事件流。HTTP 收到外部消息后必须注入事件流,插件才会触发。官方适配器 API(develop.md):Ding.receive({ userId, userName, groupId, groupName, msg, msgId, type: 'Social', }); 适配器 Adapter/插件 plugins/能注入事件✅ receive()❌热重载❌ 需重启✅好处:业务插件零改动,照旧写 @rule。三、第一步:Windows PC 装 wechatauto3.1 装 Python 3.12(64 位)⚠️ 必须 3.12,不能用 3.13/3.14/3.15原因:winsdk 这个依赖没有新版本 Python 的预编译包,装到一半会报:error: Microsoft Visual C++ 14.0 or greater is required ERROR: Failed to build 'zstandard' when getting requirements to build wheel ResolutionImpossible: ...winsdk下载:https://www.python.org/ftp/python/3.12.10/python-3.12.10-amd64.exe安装时两个勾必须打:☑ Install launcher for all users (recommended) ☑ Add python.exe to PATH ← 关键💡 如果已装 3.13+,不用卸载 —— 多版本可共存,用 py -3.12 指定即可。验证:py -0期望输出包含 -V:3.12 Python 3.12 (64-bit)。💡 若 Win+R 被系统精简:用 Ctrl+Shift+Esc 打开任务管理器 → 文件 → 运行新任务。3.2 确认微信版本微信 → 设置 → 关于微信版本处理≥ 4.1.15.13✅ 直接用4.1.12 ~ 4.1.15⚠️ 可用,若发送异常可考虑升级到 4.1.15.13< 4.1.12❌ 必须先升级3.x❌ 完全不支持确认后登录微信,保持运行。3.3 装 wechatautopy -3.12 -m pip install wechatauto-replica requests -i https://pypi.tuna.tsinghua.edu.cn/simple成功标志:Successfully installed wechatauto-replica-1.2.6.1 winsdk-1.0.0b10 ...报错对照:报错原因解决Microsoft Visual C++ 14.0 is requiredPython 版本太新换 Python 3.12ResolutionImpossible: ...winsdk同上换 3.12'pip' 不是内部或外部命令PATH 问题用 py -3.12 -m pipRead timed out网络换镜像 -i3.4 体检py -3.12 -m wechatauto 体检期望输出:wechatauto 1.2.6.1 | Python 3.12.10 (64 位) | win32 账号:wxid_xxxxxxxx(wxid wxid_xxxxxxxx) 数据库密钥:17/17 个库可解密 图片密钥:已拿到(已缓存,之后离线可用) 控件树(发消息/下载原图要用):拿不到——微信需要热激活一次项期望说明数据库密钥全部可解密不全 = 读库有问题控件树"拿不到"正常实际发消息时会自动热激活3.5 功能测试# ① 列会话 py -3.12 -m wechatauto 会话 # ② 读消息 py -3.12 -m wechatauto 消息 文件传输助手 # ③ 发消息(⚠️ 会驱动微信窗口,抢鼠标) py -3.12 -m wechatauto 发 测试 --to 文件传输助手 --verify # ④ 监听(Ctrl+C 退出) py -3.12 -m wechatauto 听 文件传输助手④ 的测试方法:保持监听窗口开着,用手机给这个微信号发条消息。期望几秒内出现:[文件传输助手] 2026-10-13 09:22 wxid_xxx: 你好3.6 两个常见"假故障"WAL 合并警告[WARNING] [db.py:1467] WAL 合并失败(微信持续写入),改用仅主库快照(可能缺少最近消息)这是无害的降级行为。 微信正在写 WAL,合并失败就退回快照模式,消息照样能读到(只是可能滞后几秒)。--verify 报"数据库未确认"失败:消息已操作发送,但数据库未确认消息通常已经发出去了(去看微信确认),只是主库快照还没 checkpoint 到最新那条。四、第二步:云服务器部署无界适配器4.1 确认无界位置docker ps --format '{{.Names}}\t{{.Ports}}' | grep -i bncr docker inspect bncr --format '{{json .Mounts}}'记录三项:项本文假设值你的实际值容器名bncr 端口映射9090:9090 挂载路径/root/BncrData ⚠️ 关键:如果容器只有 9090 一个端口映射,适配器必须挂 router 复用 9090,不能自己起服务(否则外部访问不到)。4.2 放置适配器把包里的 云服务器/Adapter/WeChatBridge.js 上传到 /root/BncrData/Adapter/或者用命令行直接创建:# 用宝塔/文件管理器上传更简单 ls -la /root/BncrData/Adapter/4.3 ★ 必须修改 token打开 /root/BncrData/Adapter/WeChatBridge.js,找到:const DEFAULTS = { // ★★★ 鉴权 token —— 必须修改!★★★ token: 'CHANGE_ME_32位随机字符串',生成一个随机 token(在 PC 上跑):-join ((48..57)+(65..90)+(97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})把结果填进去: token: 'A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6', // ← 换成你自己生成的⚠️ 两处必须一致:云服务器这里 + PC 的 start_bridge.cmd 里 BNCR_TOKEN。不一致 → PC 上报时返回 401 unauthorized。4.4 重启无界docker restart bncr sleep 6 docker logs bncr 2>&1 | tail -40 | grep -i wechat期望看到:[WeChatBridge] ✓ 路由已挂载: /wechat/health | /wechat/incoming | /wechat/pull | /wechat/replies4.5 验证云服务器本机:curl http://127.0.0.1:9090/wechat/health期望:{"ok":true,"service":"bncr-wechatbridge-adapter","version":"1.1.0","platform":"wechatBridge","queue":0}验证鉴权生效:# 不带 token → 应 401 curl -s http://127.0.0.1:9090/wechat/pull; echo "" # 带 token → 应 200 curl -s -H "X-Auth-Token: 你的token" http://127.0.0.1:9090/wechat/pull; echo ""五、第三步:PC 部署桥接脚本5.1 建目录mkdir C:\wechat-bridge⚠️ 避开中文路径和空格。把包里的 Windows PC/wechat_bridge.py 放进 C:\wechat-bridge\。5.2 修改服务器地址打开 wechat_bridge.py,找到第 55 行附近:"bncr_base": env("BNCR_URL", "http://YOUR_SERVER_IP:9090").rstrip("/"),把 YOUR_SERVER_IP 换成你云服务器的实际 IP。5.3 连通性测试cd C:\wechat-bridge py -3.12 wechat_bridge.py --test期望:✓ 无界适配器可达: 200 {"ok":true,...} --test 模式,退出不通的排查:现象检查Connection refused云服务器上先 curl 127.0.0.1:9090/wechat/health 确认适配器活着超时云厂商安全组是否放行 9090401token 没设或与云服务器不一致5.4 正式运行cd C:\wechat-bridge $env:BNCR_TOKEN="你的token" py -3.12 wechat_bridge.py期望:✓ 无界适配器可达: 200 正在连接微信... ✓ 微信连接成功 ✓ 回复轮询已启动 ✓ 监听已启动 —— 私聊 + 群聊 + 自动发现新会话 桥接运行中。Ctrl+C 退出。六、第四步:端到端联调保持桥接窗口开着,用手机给这个微信号发 菜单。观察三处① 桥接窗口→ [私聊] 时间煮雨: 菜单 ✓ 已回复: 功能菜单 ━━━━━━━━━━━━ · 1 脚本 各类脚本与代挂 · 2 返利 商品转链与收益查询 · 3 提现② 云服务器无界日志docker logs -f bncr[WARN] > 收到[/wechat/incoming]请求~ [WeChatBridge] 注入 38 ㅤ时间煮雨ㅤ(私聊): 菜单 [INFO] [新] wechatBridge/0@ㅤ时间煮雨ㅤ: 菜单 [INFO] C:[\s\S]+ R:python.ts [INFO] C:^(菜单|主菜单|功能菜单|菜单列表)$ R:功能菜单.js ← 命中插件 [WeChatBridge] reply -> 38 : 功能菜单 [WARN] > 收到[/wechat/pull]请求~③ 手机:收到菜单。日志解读日志含义[新] wechatBridge/0@昵称✅ 注入成功,平台名与私聊判定(0@)正确C:^...$ R:你的插件.js✅ 规则命中[WeChatBridge] reply ->✅ 插件回复回传收到[/wechat/pull]请求✅ PC 取走回复关键:业务插件完全没改,靠 @rule 自动匹配。七、第五步:安全加固7.1 token 必须设置为什么:9090 通常对公网开放,不设 token 时任何人都能伪造微信消息注入你的无界。生成(PC 上):-join ((48..57)+(65..90)+(97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})设置位置:位置文件变量云服务器WeChatBridge.jstoken: '...'PCstart_bridge.cmdset BNCR_TOKEN=...验证(浏览器打开):http://YOUR_SERVER_IP:9090/wechat/pull → {"ok":false,"error":"unauthorized"} ✅ 鉴权生效 http://YOUR_SERVER_IP:9090/wechat/pull?token=你的token → {"ok":true,"count":0,"items":[]} ✅ 放行/wechat/health 故意不鉴权,方便排障。7.2 安全组白名单(推荐)云厂商控制台 → 安全组 → 9090 入站规则 → 来源限制为你的家宽出口 IP。7.3 加固清单项做法token✅ 32 位随机,两处一致安全组✅ 限制 9090 来源 IP专用小号✅ 绝不用主号数据库容器⚠️ 别把 MySQL/Redis 端口映射到公网日志⚠️ 避免把用户隐私打进日志八、第六步:开机自启8.1 建启动脚本创建 C:\wechat-bridge\start_bridge.cmd:@echo off chcp 65001 >nul cd /d C:\wechat-bridge set BNCR_URL=http://YOUR_SERVER_IP:9090 set BNCR_TOKEN=你的token set POLL_INTERVAL=0.8 set BRIDGE_QUIET=1 py -3.12 wechat_bridge.py >> bridge_stdout.log 2>&1⚠️ 编码必须选 ANSI(记事本 → 另存为 → 编码)。.cmd 带 UTF-8 BOM 会导致第一行报错。8.2 注册计划任务⚠️ 如果 Win+R 被精简:用 Ctrl+Shift+Esc → 文件 → 运行新任务 → 勾选「以系统管理权限创建此任务」。方式 A:图形界面打开 taskschd.msc右侧 → 「创建任务」(⚠️ 不是"创建基本任务")常规:名称 WeChatBridge选 「只在用户登录时运行」 ⭐勾 「使用最高权限运行」触发器 → 新建:开始任务 = 「登录时」勾 「延迟任务时间」 填 30 秒 ⭐(等微信启动)操作 → 新建:脚本 = C:\wechat-bridge\start_bridge.cmd起始于 = C:\wechat-bridge设置:勾 「如果任务失败,按以下频率重新启动」 → 1 分钟 / 3 次取消勾选 「如果任务运行时间超过以下时间,停止任务」 ⭐方式 B:一条命令powershell -ExecutionPolicy Bypass -File C:\wechat-bridge\add-autostart.ps18.3 重启后流程① 开机 → 登录 Windows(必须真实登录到桌面,不能只锁屏) ↓ ② 打开微信,确认已登录、窗口显示在桌面上 ↓ ③ 等 30 秒 → 桥接自动启动 ↓ ✅ 无需任何操作8.4 验证在跑方法操作最可靠手机发条消息,看是否自动回复任务计划taskschd.msc → 看「上次运行结果」= 0x0任务管理器看有没有 python.exe日志Get-Content C:\wechat-bridge\bridge_stdout.log -Tail 30九、排查手册9.1 桥接侧现象原因解决无界适配器不可达端口/地址错云服务器 curl 127.0.0.1:9090/wechat/health 先确认本机通鉴权token : 未设置 + HTTP 401PC 没设 token设 BNCR_TOKEN,与云服务器一致微信连接失败微信没登录 / 32 位 Python / 窗口最小化py -3.12 -m wechatauto 体检收不到消息微信窗口最小化恢复窗口,用 听 命令单独测回复重复msgId 不稳定检查 build_payload 的 id 生成回复超时队列 key 对不上curl :9090/wechat/replies 看队列9.2 无界侧现象原因解决日志无 [WeChatBridge]适配器没加载确认在 Adapter/ 下,docker restart bncr收到[/wechat/incoming] 但无 [新]receive() 失败看适配器后续日志有 [新] 但无 R:你的插件.js@rule 不匹配检查插件规则;确认 @admin/@public 都写了有 R:xxx.js 但无回复插件没走到 reply看插件自身日志404路由没挂上router 全局不存在?看启动日志9.3 常见误判(别被吓到)现象真相控件树:拿不到正常 —— 发消息时会自动热激活WAL 合并失败无害 —— 降级到快照模式,仍能读到消息--verify 报"数据库未确认"消息通常已发出,只是快照滞后;去微信确认文件传输助手 共 0 条你从没用过文件传输助手,换别的会话测9.4 延迟优化环节默认可调监听轮询1 秒❌ 库内部取回复轮询0.8 秒✅ POLL_INTERVAL(最低建议 0.5)UIA 发送2~6 秒❌ 固有拟人节奏2.5~6 秒间隔⚠️ WECHATAUTO_RHYTHM拟人节奏档位:档位说明natural(默认)✅ 推荐calm更慢,最安全fast更快,⚠️ 风险上升off🔴 无节流,别用⚠️ 强烈建议保持 natural。 这层就是作者为真实风控加的。慢几秒换号安全,值得。十、附录:文件清单本压缩包结构微信机器人对接无界/ ├── 微信机器人对接无界教程.md ← 本文档 ├── 云服务器/ │ └── Adapter/ │ └── WeChatBridge.js ← 放到无界 Adapter 目录 ├── Windows PC/ │ ├── wechat_bridge.py ← 桥接主程序 │ └── add-autostart.ps1 ← 自启注册脚本 └── 测试/ ├── WeChatBridge.test.js ← 适配器测试(node) └── test_log_filter.py ← 日志过滤测试(python)部署位置文件放到哪WeChatBridge.js云服务器 /root/BncrData/Adapter/wechat_bridge.pyPC C:\wechat-bridge\start_bridge.cmdPC C:\wechat-bridge\(需自建,见 8.1)add-autostart.ps1PC C:\wechat-bridge\必须先改的两处#文件改什么1WeChatBridge.jstoken: 'CHANGE_ME_...' → 你的 32 位随机串2wechat_bridge.pyYOUR_SERVER_IP → 你的云服务器 IP环境变量变量默认说明BNCR_URLhttp://YOUR_SERVER_IP:9090无界地址BNCR_TOKEN空鉴权 token(与云服务器一致)POLL_INTERVAL0.8取回复轮询间隔(秒)HANDLE_PRIVATE1是否处理私聊HANDLE_GROUP1是否处理群聊GROUP_WHITELIST空群白名单(逗号分隔)PRIVATE_WHITELIST空私聊白名单IGNORE_SELF1忽略自己发的消息BRIDGE_QUIET1压制 WAL 刷屏日志HTTP 接口方法路径鉴权说明GET/wechat/health❌健康检查POST/wechat/incoming✅上报消息 → 注入事件流GET/wechat/pull✅取回复队列(取走即清空)GET/wechat/replies✅查看队列(不清空,调试用)运行测试# 适配器测试(需 node) node 测试\WeChatBridge.test.js # 期望 53 项全绿 # 日志过滤测试(需 Python 3.12) py -3.12 测试\test_log_filter.py十一、风险声明技术层面:本方案做了什么、没做什么事项状态逆向微信通信协议❌ 完全没有注入微信进程 / Hook API❌ 完全没有修改微信 DLL / 程序文件❌ 完全没有伪装异地设备登录❌ 完全没有连接第三方授权服务器❌ 完全没有读取微信本地加密数据库✅ 只读模拟真人操作本机界面✅ 带拟人节奏数据出网✅ 只发到你自己的云服务器风险等级项评估封号风险🟡 低,但非零风险来源仅「自动化操作界面」这一项,已用拟人节奏层缓解作者实测2026-09-21 触发过一次风控(当时无节奏层),加层后持续使用数据安全✅ 无第三方服务器,消息不经他人之手合规⚠️ 自动化操作微信界面仍属非官方用途降低风险的建议✅ 用专用小号(绝不用主号)✅ 保持 natural 节奏(别调 fast/off)✅ 专用机器(不用于其他工作的 Windows,最好虚拟机)✅ 不群发、不批量加好友(这些是风控重灾区)✅ 微信窗口保持可见(最小化会退回不可靠的 OCR 路径)✅ 版本保持 4.1.15.13 附近(作者已适配)如果被封怎么办本方案不会导致设备封禁(未改微信程序)最坏情况是该微信号被限制,换小号重来即可不像协议端会连带同 IP 的其他号十二、参考资源链接wechatauto-replica 仓库https://github.com/fanyuantaier/wechatauto-replicaPyPIhttps://pypi.org/project/wechatauto-replica/无界 Bncr 开发文档https://anmours.github.io/Bncr/md/develop本项目开发速查docs/Bncr插件开发速查.md十三、文件下载隐藏内容,请前往内页查看详情文档版本:2026-10-13技术路线:不 Hook、不逆向协议、本地只读 + 拟人化 UI 自动化
2026年10月13日
36 阅读
0 评论
0 点赞
2026-10-12
【教程】从零做一个 Edge 机场分流扩展:轻松访问Google / YouTube
Edge 机场分流扩展 · 使用教程让浏览器按规则分流:访问 Google / YouTube 走机场节点,访问百度 / B站走直连。不需要启动 Clash Verge、v2rayN 等客户端界面,代理在后台静默运行,开机自启。一、效果预览配置完成后:访问走向google.com、youtube.com、github.com 等机场节点baidu.com、bilibili.com、taobao.com直连(不消耗流量)你没添加过的任意网站直连内网地址(192.168.x.x / 10.x.x.x / localhost)直连二、文件说明整个方案是两层:浏览器扩展负责「哪些网站走代理」,本地内核负责「真正的连接加密」。airport-proxy-router/ │ ├─ manifest.json 扩展清单(Edge 加载时读取) ├─ autostart.vbs 开机自启入口(静默,无窗口) ├─ start.bat 手动启动代理 ├─ stop.bat 手动停止代理 ├─ README.md 简要说明 │ ├─ src/ 【扩展本体】 │ ├─ background.js 后台:拉订阅、生成 PAC、下发代理设置 │ ├─ options.html / .js 设置页(配置出口、订阅、分流规则) │ ├─ popup.html / .js 工具栏弹窗(开关、切换节点) │ ├─ ui.css 样式 │ └─ lib/ │ ├─ storage.js 配置读写 │ ├─ subscription.js 订阅拉取(自动处理客户端识别) │ ├─ parser.js 订阅解析(Clash YAML / base64 / sing-box) │ ├─ rules.js 分流决策 │ ├─ matcher.js 规则匹配 │ └─ outbound.js 本地代理端口探测 │ ├─ tools/ 【本地代理】 │ ├─ gen-config.mjs 订阅 → 内核配置 │ ├─ start-proxy.ps1 启动内核(后台运行) │ ├─ stop-proxy.ps1 停止内核 │ └─ runtime/ 运行数据(约 28MB) │ ├─ config.yaml 内核配置(订阅内容) │ ├─ geoip.metadb 地理数据库(分流用) │ ├─ geosite.dat 域名数据库(分流用) │ ├─ geoip.dat 地理数据库 │ └─ mihomo.log 运行日志(排查问题看这里) │ ├─ icons/ 扩展图标 └─ test/ 回归测试(105 项,普通使用可忽略)你需要关心的只有 3 个文件:文件用途start.bat双击启动代理stop.bat双击停止代理扩展目录本身加载到 Edge三、准备工作3.1 检查 mihomo 内核需要一个 mihomo.exe(Clash Meta 内核)。如果你装过 v2rayN / Clash Verge 之类的客户端,它通常自带,位置例如:F:\v2rayN-windows-64-SelfContained\bin\mihomo\mihomo-windows-amd64-compatible.exe C:\Users\<你>\AppData\Local\Programs\clash-verge\resources\mihomo.exe如果路径和上面不同:打开 tools\start-proxy.ps1,改文件开头的 $Mihomo 参数即可。没有内核的话,去 mihomo 的 GitHub Releases 下载 mihomo-windows-amd64 即可。3.2 检查 Node.js生成配置需要 Node.js(18 以上):node -v # 输出 v18.x.x 或更高即可四、安装步骤第 1 步:拉订阅并启动代理把整个 airport-proxy-router 文件夹放好(建议放纯英文路径,例如 D:\edge-ext\)。然后打开命令行,执行:cd /d D:\edge-ext\airport-proxy-router\tools # 把 <订阅链接> 换成你自己的机场订阅地址 start-proxy.ps1 -SubUrl "https://你的机场/api/v1/client/subscribe?token=xxxx"提示:如果提示「禁止运行脚本」,改用:powershell -ExecutionPolicy Bypass -File .\start-proxy.ps1 -SubUrl "你的订阅链接"正常输出:拉取订阅中... UA=clash-verge/v1.5.11 -> 70 个节点,其中 68 个真实 已生成 config.yaml 节点数: 70 本地端口: 7890 启动 mihomo(后台运行,无窗口)... 代理已就绪 本地端口 127.0.0.1:7890 (SOCKS5 + HTTP 混合) 控制接口 127.0.0.1:9090 进程 PID 12345 测试节点连通性... Google 连通性: 204 OK看到 204 OK 就说明代理通了。以后启动(已经生成过配置)直接双击 start.bat 就行,不用带参数。第 2 步:设置开机自启让代理在你登录后自动在后台启动,无需任何操作。打开 PowerShell,执行(复制整段):$startup = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" $ws = New-Object -ComObject WScript.Shell $sc = $ws.CreateShortcut("$startup\AirportProxy.lnk") $sc.TargetPath = 'wscript.exe' $sc.Arguments = '"D:\edge-ext\airport-proxy-router\autostart.vbs"' $sc.WorkingDirectory = 'D:\edge-ext\airport-proxy-router' $sc.WindowStyle = 7 $sc.Save() Write-Host '开机自启已设置'路径要和你的实际位置一致。用 autostart.vbs 而不是直接指向脚本,是为了完全静默,不会弹黑框。验证:按 Win+R 输入 shell:startup,应该能看到 AirportProxy.lnk。取消自启:把那个快捷方式删掉即可。第 3 步:加载浏览器扩展打开 Edge,地址栏输入 edge://extensions/打开左下角「开发人员模式」开关点「加载解压缩的扩展」选择 airport-proxy-router 文件夹扩展出现在列表中,确认没有「错误」标记Chrome 用户:地址改成 chrome://extensions/,步骤一样。第 4 步:配置扩展点扩展图标 → 「高级设置」,按下面设置:① 代理出口项值出站地址127.0.0.1端口7890类型SOCKS5点「自动探测本机代理端口」会自动填好。然后点「保存并应用」。② 订阅节点如果第 1 步已经拉过订阅,这里会显示节点列表;否则在这里粘贴订阅链接,点「添加并更新」。③ 分流模式选「智能分流」(默认,推荐)。模式行为智能分流国外站点走代理,国内站点和未匹配的走直连仅规则只有你自己写的规则走代理,其余全部直连全局所有站点都走代理④ 保存点「保存并应用」,状态栏应显示:分流已生效 · 出口 SOCKS5 127.0.0.1:7890五、验证是否成功方法 1:直接访问打开 https://www.google.com,能正常显示就成功了。方法 2:命令行验证# 走代理访问 Google(应返回 204) curl.exe -s -x socks5h://127.0.0.1:7890 -o NUL -w "%{http_code}" https://www.google.com/generate_204 # 走代理访问百度(应返回 200) curl.exe -s -x socks5h://127.0.0.1:7890 -o NUL -w "%{http_code}" https://www.baidu.com/方法 3:看日志Get-Content D:\edge-ext\airport-proxy-router\tools\runtime\mihomo.log -Tail 20正常的话能看到浏览器进程名(msedge.exe):level=info msg="[TCP] 127.0.0.1:57932(msedge.exe) --> www.google.com:443 match DomainKeyword(google) using 节点选择[新加坡01]" level=info msg="[TCP] 127.0.0.1:57934(msedge.exe) --> www.gstatic.com:443 match DomainSuffix(gstatic.com) using 节点选择[新加坡01]" level=info msg="[TCP] 127.0.0.1:57940(msedge.exe) --> www.baidu.com:443 match DomainSuffix(baidu.com) using DIRECT"最后一行 DIRECT 说明百度走了直连 —— 分流正常工作。六、日常使用操作方法启动电脑后自动运行,无需操作临时关闭分流点扩展图标 → 关闭「启用代理分流」开关完全停止代理双击 stop.bat手动启动代理双击 start.bat更新节点扩展设置页 → 订阅行 → 点「更新」切换出口节点扩展弹窗 → 选择节点(需在内核侧配置)自定义分流规则设置页 → 「分流模式」下方 → 「自定义规则」:想做的事填法让某网站走代理匹配 *.example.com,动作选「走代理」让某网站永远直连匹配 *.example.com,动作选「直连」还支持这些写法:*.example.com 该域名及其所有子域 example.com 只匹配这个域名 https://site.com/api/* 只匹配该路径下的请求「强制直连域名」里可以加内网域名,例如 *.corp.internal。七、常见问题浏览器打不开 Google按顺序检查:① 代理本身通不通curl.exe -s -x socks5h://127.0.0.1:7890 -o NUL -w "%{http_code}" https://www.google.com/generate_204返回 204 → 代理正常,问题在扩展(继续 ②)返回 000 → 代理本身不通(跳到 ④)② 扩展设置对不对设置页确认:出口端口是 7890、类型 SOCKS5、模式「智能分流」、开关已打开。③ 扩展是否真的在控制代理设置页按 F12 打开控制台,粘贴:chrome.proxy.settings.get({}).then(p => console.log(p.levelOfControl, p.value.mode))应该输出 controlled_by_this_extension pac_script。如果是 system,说明被其他代理扩展抢占了 —— 关掉 ZeroOmega / SwitchyOmega 之类的扩展。④ 代理不通怎么办看日志:Get-Content D:\edge-ext\airport-proxy-router\tools\runtime\mihomo.log -Tail 30日志里出现原因处理failed to get the second response节点不通换个节点重试全是 error 没有 using节点全挂更新订阅空文件内核没启动双击 start.bat 重新启动订阅更新失败设置页会显示错误信息。常见原因:提示原因HTTP 404 / HTTP 403订阅链接失效或流量用尽所有客户端标识都未取到真实节点机场限制了客户端类型长时间无响应订阅域名被墙打开百度变慢了说明百度也在走代理。检查分流模式是否为「智能分流」,以及有没有误加规则。关掉命令行窗口后代理还在吗在的。 代理是独立后台进程,与窗口无关。只有这几种情况会停止:重启电脑(自启会自动拉起)、手动双击 stop.bat、任务管理器结束 mihomo 进程。怎么彻底卸载删除启动文件夹里的 AirportProxy.lnk双击 stop.bat 停止代理edge://extensions/ 里删除扩展删除 airport-proxy-router 文件夹八、进阶:换机场 / 换节点换机场订阅重新执行一次带 -SubUrl 的命令即可覆盖配置:cd /d D:\edge-ext\airport-proxy-router\tools start-proxy.ps1 -SubUrl "新的订阅链接"指定使用某个节点编辑 tools\runtime\config.yaml,找到 proxy-groups 里的 🚀 节点选择,把 proxies 列表顺序调整为你想优先用的节点,然后重启代理。或者打开 http://127.0.0.1:9090(内核的 Web 控制面板地址)在界面里切换。九、命令速查# 启动代理(首次需带订阅链接) cd /d D:\edge-ext\airport-proxy-router\tools start-proxy.ps1 -SubUrl "订阅链接" # 之后启动 start-proxy.ps1 # 停止 stop-proxy.ps1 # 查看运行状态 curl.exe -s http://127.0.0.1:9090/version # 查看日志 Get-Content .\runtime\mihomo.log -Tail 30 # 测试代理连通性 curl.exe -s -x socks5h://127.0.0.1:7890 -o NUL -w "%{http_code}" https://www.google.com/generate_204十、运行要求项要求系统Windows 10 / 11浏览器Edge 或 Chrome(Chromium 116+)Node.js18 以上(仅生成配置时用,不常驻)代理内核mihomo(约 30MB)磁盘占用约 30MB(主要是 geo 数据库)内存占用约 50–100MB(内核运行时)十一、项目文件(蓝奏云盘,提示需要会员,请把浏览器改成电脑模式)隐藏内容,请前往内页查看详情本教程基于 Edge 154 / Node 24 实测。
2026年10月12日
8 阅读
0 评论
0 点赞
2026-09-28
【教程】【AI】给 AI Agent 装上完整联网与浏览器能力:web-access 实战教程
前言现在的 AI Agent(Claude Code、Cursor、Gemini CLI、Codex CLI 等)自带的联网能力(WebSearch / WebFetch)大多只能"搜"和"取文本",遇到登录态页面、动态渲染、需要点击交互的场景就无能为力了。今天给大家介绍一个开源 Agent Skill:web-access。它给 AI Agent 补上了联网策略 + CDP 浏览器操作 + 站点经验积累三块能力,让 Agent 真正像人一样"用浏览器上网"。本文基于其官方设计详解与 GitHub 项目整理而成。一、web-access 是什么web-access 是一个兼容所有支持 SKILL.md 的 Agent 的通用 Skill。它解决的核心问题是:AI Agent 原本的联网能力缺少"调度策略"和"浏览器自动化能力"。这个 Skill 补上的是:联网策略 + CDP 浏览器操作 + 站点经验积累。它兼容 Claude Code、Cursor、Gemini CLI、Codex CLI 等主流 Agent 框架,开箱即用。二、核心能力(v2.5.4) 能力说明 联网工具自动选择WebSearch / WebFetch / curl / Jina / CDP,按场景自主判断,可任意组合 CDP Proxy 浏览器操作直连你日常用的浏览器(Chrome / Edge / Chromium 系),天然携带登录态,支持动态页面、交互操作、视频截帧 三种点击方式/click(JS click)、/clickAt(CDP 真实鼠标事件)、/setFiles(文件上传) 本地书签/历史检索find-url.mjs 跨 Chrome / Edge 查询公网搜不到的内部系统或你访问过的页面 并行分治多目标时分发子 Agent 并行执行,共享一个 Proxy,tab 级隔离 站点经验积累按域名存储操作经验(URL 模式、平台特征、已知陷阱),跨 session 复用 三、安装方式隐藏内容,请前往内页查看详情四、它的设计哲学(重点)作者把 Skill 的本质总结为一句话,非常值得做 Agent 工程的同学记下来:Skill = Agent 策略哲学 + 最小完备工具集 + 必要的事实说明展开来说有三点实践心得: 验证惰性知识边界,补充事实说明:模型知道很多知识,但不一定在任务中第一时间被调用。要在 Skill 中针对容易遗忘的边界直接补充事实与方法。 有最优路径的事,直接指定:哪怕是再通用的任务,也常存在唯一可直接执行的最优方式,用脚本/文件减少模型试错。 强调安全风险边界:CDP 模式直接操纵用户自用浏览器,Agent 可能误关或交叉使用原有标签。不想让它做的高危事,必须明确强调。 另外关于子 Agent 分治:联网任务常涉及多个独立目标(同时查 5 个竞品、调研 50 个网页)。主 Agent 串行处理不仅慢,中间内容还会涌入上下文导致 token 膨胀、推理质量下降。正确做法是写"目标"而不是写"步骤",让子 Agent 自主分治。五、一个实战玩法装好 Skill 后,把下面这个任务发给你的 Agent,就能见识到并行浏览器操作的威力:开 10 个 sub agent,分别调研小红书、微博、B站、Boss直聘、github、知乎、即刻、豆瓣、36kr、虎嗅的首页,每个 sub agent 分别开 10 个 tab,并行调研今天内容、趋势、值得找的工作情况,汇总为更新报告。⚠️ 这个任务非常吃内存,运行前请确保文件均已保存完毕。作者纪录是 Chrome 占用 38.6GB、Claude Code 14GB 然后……卡死了。你的电脑配得上你的 Agent 吗?😏六、结语web-access 用通用模型 + Agent 框架,做出了体验丝滑的 Browser Use 效果,而且 MIT 协议开源。如果你也在折腾 AI Agent 的联网与自动化能力,强烈建议试一试。隐藏内容,请前往内页查看详情更新快乐,也欢迎 Star 与分享 😊
2026年09月28日
15 阅读
0 评论
0 点赞
2026-09-25
【教程】frps 0.71.0 Docker 部署教程-对接飞牛FRPC应用
公网服务器用 Docker 跑 frps,内网机器原生跑 frpc。服务端用 host 网络,所以客户端想用哪个端口都行——你只需要管一件事:在云厂商安全组放行端口。一、拓扑外网 ──► <服务器公网IP>:6000 / 6001 / 任意远程端口 │ ┌───────▼────────┐ │ 云服务器 │ │ frps (Docker) │ │ network_mode:host│ └───────▲────────┘ │ frpc 主动外连 bindPort │(出方向,客户端不需要公网 IP,也不用路由器端口映射) ┌───────┴────────┐ │ 内网机器 │ │ frpc 原生运行 │ └────────────────┘二、服务端:4 步搞定1. 装 Dockercurl -fsSL https://get.docker.com | sh systemctl enable --now docker国内拉镜像慢可配加速(以腾讯云为例):echo '{ "registry-mirrors": ["https://mirror.ccs.tencentyun.com"] }' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker2. 改配置编辑 .env,把两个 CHANGE_ME_* 换成你自己的随机值:openssl rand -hex 16 # 用它生成 FRP_TOKENFRP_TOKEN=你的32位随机串 FRPS_BIND_PORT=7000 FRPS_DASHBOARD_PORT=7500 FRPS_DASHBOARD_USER=admin FRPS_DASHBOARD_PASSWORD=你的强密码3. 构建并启动bash deploy.shdeploy.sh 会先做 9 步预检再构建。不想上传 20MB 的 frps 二进制的话:DOCKERFILE=Dockerfile.download bash deploy.sh # 构建时自动下载 frp4. 安全组放行协议端口源用途TCP70000.0.0.0/0frpc 接入TCP6000-60100.0.0.0/0各服务对外访问TCP7500只填你自己的 IP管理面板host 网络下安全组是唯一开关。 客户端新增代理时,只加一条安全组规则即可,不用改配置、不用重建容器。三、客户端:一份配置文件把 fnos-frpc.toml 拷到内网机器上改名 frpc.toml,改三处:serverAddr = "你的服务器公网IP" auth.token = "与服务端 FRP_TOKEN 完全一致" [[proxies]] name = "web" type = "tcp" localIP = "127.0.0.1" localPort = 8080 remotePort = 6000 # 随便填,只要在安全组放行启动:./frpc -c frpc.toml开机自启用 frpc.service(记得改里面的路径)。飞牛 fnOS 用户:默认 Web 端口是 5666(HTTPS 5667),SSH 需在设置里开启。四、验证服务端日志出现 new proxy [xxx] type [tcp] success 即成功。外网访问 <服务器公网IP>:6000 测试。五、三个必看的坑坑 1:注释里的大括号会让 frp 启动失败template: frp:5: missing value for commandfrp 会把整份配置文件当 Go 模板渲染,连注释也会被解析。注释里写一对孤立的大括号(比如想说明语法),就会被当成"空动作"直接报错。合法写法只有一种:{{ .Envs.变量名 }}。deploy.sh 的模板自检会提前拦下并报出行号。坑 2:frps 必须用 host 网络frps 的职责是"按客户端要求随时开端口",而 Docker 的 ports: 是启动时写死的——两者天然矛盾。症状最迷惑人:日志显示 new proxy success、tcp proxy listen port [...] 一切正常,外网却连不上。因为那句日志说的是容器里监听了,而端口没被发布到宿主机。解法就是 network_mode: host——frps 直接使用宿主机网络栈,这个矛盾彻底消失。代价是容器失去网络隔离,别让别的服务占用 7000 / 7500 及各远程端口。坑 3:用三分法定位问题,别瞎猜做一次 TCP 连通性探测,三种结果对应三种原因:结果含义处理TIMEOUT包被无声丢弃安全组没放行REFUSED网络到达了主机,但没人监听该端口服务没起来 / 客户端离线OPEN正常—nc -vz <服务器公网IP> 7000 # Linux Test-NetConnection <IP> -Port 7000 # Windows PowerShell⚠️ TIMEOUT 时你无法判断服务有没有在跑——过滤层把状态掩盖了。必须先放行,才能验证服务;放行后若变成 REFUSED,才说明服务没起。六、新增一个穿透服务:两步安全组加一条规则(放行新的远程端口)客户端改配置、重启 frpc不用碰服务端、不用重建容器。七、安全清单别用默认端口:FRPS_BIND_PORT 换成不常见的高位端口,能挡掉大量扫描面板别全公网开:7500 只放行自己的 IP,或把 conf/frps.toml 的 webServer.addr 改成 127.0.0.1 走 SSH 隧道开 TLS 加密:服务端 transport.tls.force = true,客户端 transport.tls.enable = truetoken 定期轮换:改 .env 和客户端配置,两边重启(可选)限制端口范围:conf/frps.toml 启用 allowPorts——⚠️ 这会禁止客户端用区间外的端口,与"任意端口"互斥,二选一八、文件清单Dockerfile / Dockerfile.download 两种构建方式 docker-compose.yml host 网络 docker/entrypoint.sh 容器入口 conf/frps.toml 服务端配置(模板) .env 所有可调参数 deploy.sh 一键部署 + 9 步预检 fnos-frpc.toml 客户端配置样例 fnos-frpc.service 客户端开机自启(可选) .dockerignore 构建上下文裁剪 frps linux/amd64 二进制 LICENSE Apache-2.0八、文件下载{cloud title="" type="lz" url="https://wwbkm.lanzoue.com/iiOpL49u4zng" password=""/}改配置后怎么生效改了什么执行.env(端口 / token / 密码)docker compose up -dconf/frps.toml(加功能)docker compose restart两种都不需要重新 build 镜像。
2026年09月25日
17 阅读
0 评论
0 点赞
2026-09-22
【教程】wxMP — 微信公众号适配器(让公众号当机器人)
把微信公众号接到无界(Bncr),如何部署无界(Bncr)请看本教程 无界部署教程 ,用户在公众号里发消息后,根据系统设定自动回复。适配器文件:wxMP.js,见最底部。部署位置:BncrData/Adapter/wxMP.js(Adapter 根目录,二级目录不会被加载)回调地址:http(s)://你的域名/api/bot/wxMP版本:2.0.0(针对官方 1.0.3 的四处实质缺陷做了修复,见文末对比表)一、先说最关心的问题:凭据获取入口搬迁AppSecret / EncodingAESKey / Token ,3个必要的凭证。微信把这块入口迁移到了「微信开发者平台」。官方文档现在的原文是:可在「微信开发者平台 - 我的业务 - 公众号 - 消息与事件推送」处进行配置。即,填写服务器地址(URL)、Token 和 EncodingAESKey……而旧路径「设置与开发 → 开发接口管理」自 2025-12-01 起开始迁移到微信开发者平台。(部分账号在旧后台仍能看到残留下的入口,但新账号/已迁移账号就只剩跳转提示了。)三样东西分别在哪拿凭据位置备注AppID微信开发者平台 → 我的业务与服务 → 公众号 → 接口管理 / 开发配置直接可见AppSecret同上⚠️ 只在生成/重置时显示一次,需管理员手机验证码。忘了就只能「重置」,重置后旧值立刻失效Token微信开发者平台 → 我的业务 → 公众号 → 消息与事件推送由你自己填写(3–32 字符),不是微信发你的。所以是「你先定一个,再填进适配器」EncodingAESKey同上点「随机生成」,43 位。选「安全模式」必填消息加解密方式同上明文 / 兼容 / 安全,三选一一句话:Token 是你自己定的;EncodingAESKey 是随机生成的;AppSecret 只在重置时露一次脸。这三样都不在「基本配置」那个老页面里了。二、开工前的三个硬前提账号类型未认证订阅号:可以接入,但只能被动回复——用户发一句、你回一句,必须在 5 秒内应答;没有客服消息接口。认证订阅号 / 服务号:多一个有「客服消息」权限(48 小时内可主动推送),本适配器已支持(Bridge.sendCustomText / push)。注意:公众号一旦启用服务器配置,后台自带的自动回复和自定义菜单会失效,后续都由代码接管。一个公网可达的地址微信要求回调 URL 是 http://(80 端口)或 https://(443 端口),不支持自定义端口。无界默认监听 9090,所以必须做一层反向代理或端口映射:有域名(推荐):Nginx/Caddy 把 https://your.domain/api/bot/wxMP 反代到 http://127.0.0.1:9090/api/bot/wxMP没域名:用 http://你的公网IP/api/bot/wxMP(微信允许 IP,但不推荐)域名建议上 HTTPS,否则部分场景会被拦。无界能被打通回调地址必须能从公网访问到无界;无界响应地址校验要在 1 秒内(GET 校验是纯计算,本适配器是秒回)。用到 access_token 的功能(图片/语音回复、客服消息)才需要把无界的出口公网 IP 加进公众号的 IP 白名单。纯文本被动回复不需要白名单。三、部署步骤1. 放文件BncrData/ └── Adapter/ └── wxMP.js ← 本项目 adapters/wxMP.js 直接复制过来如果你的 Adapter/ 里已经有官方那份 wxMP.js,直接覆盖。两者 @name 都是 wxMP,同时存在会因同名适配器冲突而出问题。2. 重启无界适配器没有热重载,改完必须完整重启 Bncr 进程(不是热加载插件):docker restart bncr3. 依赖不需要手动 npm i。 本适配器只依赖 Node 内置的 crypto、fs;axios 是可选依赖,适配器启动时会通过 sysMethod.testModule(['axios'], {install:true}) 自动装。装不上也不影响纯文本被动回复(只是图片/语音回复和客服消息推送不可用)。对比:官方那份必须手动 npm i got form-data express-xml-bodyparser。4. 填配置进入无界 Web 后台 → 配置 → 适配器 → wxMP,逐项填:配置项填什么是否开启适配器开AppID公众号 AppIDAppSecret公众号 AppSecret(可留空,仅影响图片/语音回复与客服消息)Token你自己定的那个字符串,必须与微信后台完全一致(区分大小写)EncodingAESKey (43位)微信后台生成的 43 位密钥;只用明文模式可留空等待插件回复秒数默认 4(微信限 5 秒,别填满)合并多条回复默认开:返利助手回多条时合并成一条发出拉取消息指令默认「拉取消息」关注欢迎语用户关注时自动回的内容非文本消息提示用户发图片/语音时的提示语单条回复最大字节数默认 1800,超出部分转入拉取队列本机地址默认 http://127.0.0.1:9090,用于把 /public/xxx.jpg 拼成完整 URL5. 开服务器配置(顺序很重要)先在无界里把配置填好并重启,再去微信后台点保存,否则微信发来的校验请求没人应答。微信开发者平台 → 我的业务 → 公众号 → 消息与事件推送:URL:https://your.domain/api/bot/wxMPToken:与你填进适配器的一致EncodingAESKey:点随机生成,复制到适配器配置里消息加解密方式:建议第一次先选「明文模式」 —— 只用 Token 校验,链路最短,最容易跑通跑通后再改「安全模式」并在适配器里填 EncodingAESKey(本适配器支持真实的 AES 收发)点保存 → 微信会往 URL 发 GET 校验成功:后台显示配置成功,无界控制台出现 [wxMP] URL 校验通过失败:控制台会打印 [wxMP] URL 校验失败:Token 与微信后台不一致?6. 设管理员(可选)在已授权的平台对机器人发:set wxMP admin 你的openidopenid 从无界控制台日志里拿:用户给公众号发消息时会打印[wxMP] 收到公众号消息 <oXXXX...>:...四、宝塔面板反代实操(把 9090 暴露成 443)微信只认 80(http) 或 443(https),且 URL 里不能带端口号。无界跑在 9090,所以必须做反代。下面以「宝塔 Linux 面板 + Nginx」为例,全程约 5 分钟。第 0 步:先确认无界本机可达(关键,别跳过)curl -s http://127.0.0.1:9090/api/bot/wxMP应该看到这句:这是 Bncr wxMP 适配器接口(微信公众号)。GET 用于微信服务器校验,POST 用于接收消息。看到了 → 继续下一步。看不到 / Connection refused → 先解决无界本身:确认容器起了:docker ps | grep bncr确认端口映射了:启动命令里要有 -p 9090:9090(或 --network=host)没映射的话重建容器补上,否则反代怎么配都是 502。第 1 步:域名解析到域名商处加一条 A 记录,例如 wx.你的域名.com → 服务器公网 IP。没有域名也能做:直接用 http://公网IP/api/bot/wxMP(80 端口)。但下面第 2 步「添加站点」时把域名填成公网 IP 即可,其余步骤一样。第 2 步:宝塔建站(纯静态即可)网站 → 添加站点:项填什么域名wx.你的域名.com根目录默认就行(反代用不到目录内容)FTP / 数据库 / PHP全部「不创建」网站类型建议选 纯静态这一步的作用只是给宝塔一个挂 nginx 配置的地方并让它能签 SSL 证书,站点里不需要放任何文件。第 3 步:申请 SSL(强烈建议,但不是必须)站点 → 设置 → SSL → Let's Encrypt → 勾选域名 → 申请。成功后打开 「强制 HTTPS」。⚠️ Let's Encrypt 走 HTTP-01 验证,需要 80 端口能被公网访问。若 80 被占用或套了 CDN,改用 DNS 验证。想先用 http 跑通也完全可以(微信同样接受 80 端口 http),跑通后再上 https。二选一,不要两个都配一半。第 4 步:加反向代理方案 A:手写配置(推荐,精确可控)站点 → 设置 → 配置文件,在 server { ... } 里(#SSL-START 之后任意位置)加入:# ===== wxMP 微信公众号适配器 ===== location ^~ /api/bot/wxMP { proxy_pass http://127.0.0.1:9090; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Connection ""; proxy_connect_timeout 5s; proxy_send_timeout 10s; proxy_read_timeout 10s; proxy_buffering off; }保存(宝塔会自动 reload;没生效就点一下「重载配置」)。三个必须理解的点,配错了必失败:location ^~ /api/bot/wxMP 结尾不加斜杠。微信请求的路径就是 /api/bot/wxMP(不带尾斜杠)。如果写成 location /api/bot/wxMP/,这条最常见的请求匹配不上,会落到静态站点 → 404。^~ 表示命中后不再尝试正则 location,避免被别的规则抢走。proxy_pass http://127.0.0.1:9090; 结尾也绝对不能加 /。不加 /:原样透传路径 → 无界收到 /api/bot/wxMP ✅加了 /:nginx 会把 location 匹配的那段替换成 /,无界收到 / → 404 ❌不要加任何 rewrite。 微信的 signature / timestamp / nonce / echostr 全在 query 上,保持原样透传最稳。方案 B:可视化反代(更简单,但有个坑)站点 → 反向代理 → 添加反向代理:项填什么代理名称wxMP代理目录/api/bot/wxMP目标 URLhttp://127.0.0.1:9090发送域名$host缓存关闭⚠️ 宝塔很可能在「代理目录」后面自动补一个尾斜杠,生成location /api/bot/wxMP/ { ... } —— 于是又踩上面第 1 个坑。所以保存后一定要点「配置文件」确认一眼:如果生成的是带斜杠的版本,手动改成location ^~ /api/bot/wxMP {(或额外补一条 location = /api/bot/wxMP { proxy_pass http://127.0.0.1:9090; })。结论:会看 nginx 配置就用方案 A;用方案 B 就务必回头确认尾斜杠。第 5 步:验证(三层,逐层排查)# ① 无界本机 curl -s http://127.0.0.1:9090/api/bot/wxMP # ② 经过 nginx curl -s https://wx.你的域名.com/api/bot/wxMP # ③ 看响应头,确认真的到了 nginx(能看到 Content-Type: text/xml 就是适配器回的) curl -si https://wx.你的域名.com/api/bot/wxMP | head -8最直观的方式是直接用浏览器打开 https://wx.你的域名.com/api/bot/wxMP:看到「这是 Bncr wxMP 适配器接口(微信公众号)…」→ ✅ 反代通了看到宝塔默认页 / 404 / 502 → ❌ 对照下面的表排查三层都通之后,再回微信后台点保存,然后看无界控制台有没有:[wxMP] URL 校验通过第 6 步:宝塔/中间层特有的坑现象原因处理curl 域名能通,但微信提示校验失败宝塔「Nginx 防火墙」/「堡塔云WAF」把 signature、echostr 这种长十六进制参数当成攻击拦了防火墙里给 /api/bot/wxMP 加 URL 白名单,或先临时关掉防火墙验证502 Bad Gateway无界没起 / 9090 未监听 / docker 没映射端口回到第 0 步 curl http://127.0.0.1:9090 自查404反代 location 没命中(十有八九是尾斜杠)或配置没重载按方案 A 手写;保存后点「重载配置」校验偶发失败、时好时坏反代开了缓冲或超时太短,无界来不及在 1 秒内应答加 proxy_buffering off;、proxy_read_timeout 10s;套了 CDN / 云加速后失败中间层改写 Content-Type、不转发原始 body,或缓存了 GET 校验结果给该子域名关闭缓存与内容改写,或让它直接回源浏览器能打开、微信却连不上域名解析了但只有 IPv6 记录,或服务器只放行了 IPv6确认 A 记录(IPv4)存在域名必须备案吗用国内服务器 + 80/443 域名访问,通常需要已备案域名,未备案可能被拦用已备案域名,或改用非大陆服务器关于安全不要为了图省事把 9090 直接暴露到公网(微信也不接受 9090)。9090 是无界面板端口,暴露出去等于把管理后台交出去。正确的做法就是本文这套:只开 443,让 nginx 转发。八、接口速查用途方法微信服务器校验GET /api/bot/wxMP?signature=×tamp=&nonce=&echostr=接收消息与事件POST /api/bot/wxMP(明文或加密 XML)浏览器自检直接 GET /api/bot/wxMP,会返回接口说明插件侧主动发消息sysMethod.push({ platform:'wxMP', userId, msg })插件侧扩展能力sender.Bridge.getAccessToken() / sender.Bridge.sendCustomText(openid, text) / sender.Bridge.status()撤回消息不支持(公众号无此能力),delMsg 恒返回 false九、脚本文件wxMP.js隐藏内容,请前往内页查看详情
2026年09月22日
32 阅读
0 评论
0 点赞
1
2
...
8