免认证微信登录

免认证微信登录运维管控

版本 v1.0.04· 胡思乱想 · 8 次获取 · 运维管控
面向网站前台的公众号扫码登录插件。**不申请微信认证、不调用网页授权**,使用「固定关注二维码 + 一次性配对码 + 公众号回复验证码」的方案,适用于个人订阅号与未认证公众号。
5.00原价
一次购买,永久使用

详情介绍

未认证微信登录(WechatUnauthLogin)

面向网站前台的公众号扫码登录插件。不申请微信认证、不调用网页授权,使用「固定关注二维码 + 一次性配对码 + 公众号回复验证码」的方案,适用于个人订阅号与未认证公众号。

方案参考:未认证微信公众号扫码登录思路。未认证公众号无法获取网页授权与参数二维码权限(常见报错 48001),因此改用公众号消息完成身份校验。

功能特性

  • 支持未认证微信公众号、个人订阅号
  • 使用固定关注二维码,不依赖参数二维码接口
  • 登录框内直接展示「微信扫码登录」入口,弹窗完成全部操作
  • 6 位配对码与当前浏览器 Session 绑定,一次性使用
  • 公众号回复 6 位登录验证码,网页端校验后写入真实登录态
  • 验证码默认 5 分钟过期、一次性使用,连续输错自动作废
  • 同一个配对码不能被两个微信号绑定
  • 首次登录可自动创建站点账号,可接入注册限制插件
  • 兼容明文模式,也支持安全 / 兼容模式的 EncodingAESKey 加解密
  • 支持登录后跳回原页面(仅允许站内相对路径)

登录流程

  1. 用户点击登录框中的「微信扫码登录」;
  2. 插件为当前浏览器生成一次性 6 位配对码,并展示公众号关注二维码;
  3. 用户扫码关注公众号,把配对码直接发送给公众号(无需发送“登录”二字);
  4. 公众号回调校验配对码,绑定浏览器与微信 OpenID,并回复 6 位登录验证码;
  5. 用户在网页输入验证码,插件校验通过后写入站点登录态;
  6. 首次登录自动创建站点账号,再次登录复用已绑定的账号。

环境要求

  • Zsens Admin 3.x(PHP 8.2+)
  • 前台主题需包含登录弹窗与 {:plugin_assets()} 输出(社区模板默认支持)
  • 服务器可被微信服务器访问(HTTPS 域名)
  • PHP 需启用 openssl 扩展(安全模式必需,明文模式也会加载但不会调用)

安装与启用

  1. 后台「应用中心」安装并启用「未认证微信登录」插件;
  2. 进入插件配置,填写公众号关注二维码、消息校验 Token 等信息;
  3. 在公众号后台配置服务器回调地址,并确保服务器配置处于「已启用」状态。

公众号后台配置

进入「微信公众平台 → 设置与开发 → 基本配置 → 服务器配置」:

配置项填写内容
URLhttps://你的域名/wechat-unauth-login/callback
Token与插件配置中的「消息校验 Token」完全一致
EncodingAESKey明文模式可随机生成;安全 / 兼容模式需与插件配置一致
消息加解密方式建议「明文模式」;也可使用「安全模式」,需同时填写 AppID 与 EncodingAESKey

注意事项:

  • 如果站点前面有宝塔防火墙、1Panel WAF、CDN 安全组等,请把 /wechat-unauth-login/callback 加入 URL 白名单,否则微信发送的 XML 可能被拦截。
  • 回调地址默认不带 .html 后缀;如果站点启用了强制后缀,可在后台「路由」中确认实际可访问地址,必要时尝试追加 .html。
  • 保存服务器配置后,一定要点击「启用」。未启用时公众号不会把消息推送到站点。

插件配置说明

配置项说明
启用未认证微信登录总开关,关闭后前台不显示入口,接口与回调也不可用
公众号关注二维码公众号后台下载的固定二维码图片,建议高清原图
弹窗标题 / 扫码提示扫码弹窗的展示文案
消息校验 Token必填,必须与公众号服务器配置一致
公众号 AppID选填;安全 / 兼容模式建议填写,用于校验消息 AppID
EncodingAESKey明文模式留空;安全 / 兼容模式填写 43 位密钥
配对码有效期(分钟)浏览器配对码有效时间,默认 10 分钟
登录验证码有效期(分钟)公众号回复的验证码有效时间,默认 5 分钟
验证码最大尝试次数连续输错次数上限,达到后本次配对码作废,默认 5 次
未绑定微信自动注册开启后首次登录自动创建站点账号;关闭后仅允许已绑定账号登录
帮助关键词用户直接发送该文字时回复帮助提示,默认「登录」
配对成功回复支持 {code}、{minutes}、{pair} 占位符
关注欢迎语 / 已关注扫码回复关注事件与扫码事件的自动回复
未找到配对码提示 / 配对码失效提示 / 配对码被占用提示异常场景回复,支持 {pair} 占位符
微信要求被动回复在 5 秒内完成,本插件只做数据库读写,正常响应远低于该限制。

安全设计

  • 配对码绑定浏览器 Session,验证时必须使用同一浏览器会话;
  • 配对码与微信 OpenID 一对一绑定,先到先得,不能被第二个微信号占用;
  • 登录验证码在数据库仅保存 SHA-256 哈希,不保存明文;
  • 验证码一次性使用,超过有效期自动失效;
  • 连续输错达到上限后本次配对码立即作废;
  • 回调校验微信签名,安全模式额外校验 msg_signature 与 AppID;
  • 登录跳转仅允许站内相对路径,防止开放重定向;
  • 未认证公众号无法获取昵称与头像,插件不会伪造微信资料,仅以 OpenID 建立账号关联。

数据表

安装后自动创建两张表(实际表名带站点前缀):

  • wechatunauthpairing:配对码、验证码哈希、绑定 OpenID、状态与过期时间;
  • wechatunauthaccount:公众号 OpenID、绑定用户、关注状态与最近消息时间。

常见问题

扫码后公众号没有回复验证码?

  1. 确认公众号后台服务器配置已启用,URL 与 Token 与插件配置一致;
  2. 确认用户发送的是网页上显示的最新 6 位配对码,且未超过有效期;
  3. 检查防火墙 / WAF 是否拦截了回调地址;
  4. 查看站点日志中是否出现 [WechatUnauthLogin] 相关错误。

回调返回 403?

插件会校验 signature。使用微信公众平台的「服务器配置」保存时的校验请求测试,不要直接用浏览器访问回调地址。

安全模式收不到回复?

安全模式需要填写正确的 EncodingAESKey,建议同时填写 AppID;AppID 为空时会自动采用解密消息中的 AppID 进行回复加密。如果仍失败,可先切换为明文模式排查。

提示“该微信尚未绑定网站账号”?

说明后台关闭了「未绑定微信自动注册」,且该 OpenID 尚未关联站点账号。可开启自动注册,或由管理员在数据库中手工关联 wechatunauthaccount.user_id。

关闭自动注册后如何绑定已有账号?

当前版本以扫码登录为主,建议保持自动注册开启;如需严格的账号绑定流程,可在此基础上扩展「登录后绑定」页面。

目录结构

WechatUnauthLogin/
├── plugin.json                    插件元信息
├── WechatUnauthLoginPlugin.php    入口:配置、插槽、资源注入、安装卸载
├── routes.php                     前台接口与公众号回调路由
├── install.sql                    数据表结构
├── controller/
│   ├── Login.php                  获取配对码 / 轮询状态 / 验证登录
│   └── Callback.php               公众号消息回调(明文 + 安全模式)
├── service/
│   ├── Pairing.php                配对、验证码、账号绑定与登录
│   ├── WxCrypt.php                微信签名与 AES 加解密
│   └── WxMessage.php              XML 解析与被动回复
├── static/                        弹窗样式与脚本(安装时复制到 public/static)
├── icon.svg                       插件图标
└── README.md                      使用文档

版本

  • 1.0.0:实现未认证公众号扫码登录完整链路(配对码、验证码、自动注册、明文/安全模式回调)。


更新记录 (4)

  • v1.0.04 2026-11-07
    修复bug
  • v1.0.02 2026-11-06
    新增微信绑定、解绑
  • v1.0.01 2026-11-06
    修复配对码不显示
  • v1.0.0 2026-11-05
    正式发布
微信客服 微信客服 QQ官方交流群 QQ官方交流群