最近我给自己的 Halo 站点做了一款插件:未认证微信登录插件。
它解决的问题很具体:不少个人博客使用的是没有微信认证的订阅号或公众号,而 Halo 常见的微信登录方案通常依赖微信开放平台、网站应用授权或已认证服务号。对个人站长来说,这些方案要么资质门槛高,要么会增加一笔持续支出。
【需要的可以下方留言“我想要这个插件”】
这款插件换了一个思路:不申请微信认证,也不调用网页授权,而是用公众号消息完成身份验证。
微信认证费用以腾讯官方当期收费标准为准。对个人站长而言,通常可以省下约 300 元/年的认证费用。
为什么做这个插件
微信认证服务号可以做网页 OAuth,但个人订阅号往往没有对应接口权限。之前测试参数二维码时,微信会直接返回:
48001:该公众号未获得生成二维码所需接口权限
所以这款插件没有继续依赖参数二维码,而是采用更适合未认证账号的方案:
- 在 Halo 登录页展示一个固定的公众号关注二维码;
- 页面为当前浏览器生成一次性 6 位配对码;
- 用户扫码关注公众号,把配对码直接发送给公众号;
- 公众号后台通过消息回调把配对码和当前浏览器会话绑定;
- 插件回复 6 位登录验证码;
- 用户在 Halo 登录页输入验证码,完成真实 Halo 登录。
整个过程不需要公众号认证,也不需要微信网页授权。

实际登录体验
安装插件后,Halo 登录页会增加一个绿色的“微信扫码登录”入口。
点击后仍然留在同一个登录卡内,不会跳到一个风格完全不同的外部页面。页面会展示公众号二维码、当前浏览器的配对码和验证码输入框。

用户只需要把页面上的 6 位配对码发送给公众号,不需要额外输入“登录”两个字。公众号回复验证码后,再回到网页输入即可。
插件主要特性
- 支持未认证微信公众号、个人订阅号;
- 使用固定关注二维码,不依赖参数二维码接口;
- 扫码入口直接集成在 Halo 登录页;
- 6 位配对码绑定当前浏览器,避免只凭公共验证码登录;
- 公众号回复 6 位登录验证码;
- 验证码一次性使用,默认 5 分钟过期;
- 连续输错会临时锁定,降低暴力尝试风险;
- 登录成功后写入真实 Halo 会话;
- 支持首次登录自动创建 Halo 用户;
- 可指定新用户默认角色;
- 支持明文模式,也兼容安全模式所需的 EncodingAESKey;
- 登录入口、扫码页和设置页都使用统一的 idindoo 品牌视觉。
安装与配置
插件适用于 Halo 2.22 及以上版本。安装步骤并不复杂,主要分为 Halo 插件配置和公众号后台配置两部分。
1. 安装并启用插件
在 Halo 后台进入“插件”,上传 plugin-wechat-unauth-login 的 JAR 文件,然后启用“未认证微信登录插件”。
随后进入“用户 → 身份认证”,找到“微信扫码登录”并开启。
2. 配置公众号信息
在插件设置中填写:
- 公众号 AppID;
- 公众号 AppSecret;
- 消息校验 Token;
- EncodingAESKey(明文模式可以留空,安全或兼容模式需要填写);
- 二维码模式选择“静态关注二维码”;
- 上传公众号关注二维码,并填写图片的 HTTPS 地址;
- 登录回复关键词、验证码回复模板和新关注消息模板可按需修改。
验证码模板支持:
{code}:6 位登录验证码;{minutes}:验证码有效分钟数。
3. 配置公众号服务器回调
进入公众号后台的“设置与开发 → 基本配置 → 服务器配置”,填写:
URL:https://你的域名/wechat/mp/callback
Token:与 Halo 插件中填写的 Token 完全一致
消息加解密方式:明文模式
提交后,一定要确认服务器配置处于“已启用”状态。
如果站点前面使用了 1Panel WAF、宝塔防火墙或类似安全设备,需要把 /wechat/mp/callback 加入 URL 白名单,否则微信发送的 XML 消息可能被当成异常参数拦截。
4. 开始使用
打开 Halo 登录页,点击“微信扫码登录”:
- 扫描公众号二维码并关注;
- 返回网页复制 6 位配对码;
- 把配对码直接发送给公众号;
- 收到公众号回复的 6 位验证码;
- 在网页中输入验证码并登录。
安全设计
未认证公众号无法直接读取用户的昵称和头像,因此插件不会假装获得了微信用户资料,而是使用公众号 OpenID 建立长期账号关联。
同时加入了几个必要的保护:
- 配对码与当前浏览器登录票据绑定;
- 同一个配对码不能绑定两个不同的微信账号;
- 登录验证码一次性使用;
- 验证码有独立有效期;
- 错误次数过多会自动锁定;
- 登录成功后在 Halo 侧创建标准用户连接和登录会话。
适合哪些 Halo 用户
这款插件更适合:
- 使用个人订阅号的站长;
- 不想申请微信开放平台网站应用的个人博客;
- 希望降低认证和资质成本的 Halo 用户;
- 已经有公众号二维码,希望增加微信快捷登录入口的站点。
如果你追求的是微信开放平台那种完全静默的 OAuth 登录,仍然需要对应的平台资质。但对于“未认证公众号 + Halo 用户登录”这个场景,这套消息验证码方案已经可以稳定完成完整流程。
项目作者:idindoo
站点:idindoo.com


