零成本免备案:给我的 ZBlog 博客加上微信扫码登录(个人小程序中转方案实录)

admin admin
2026-09-18 发布 | 2667 字 | 预计 7 分钟 | 16 次阅读 | 0 条评论
一个没有营业执照、域名没备案的个人站长,是怎么给博客接上"微信扫码一键登录/注册"的。全程不花一分钱,不用备案,不用企业资质。

一、我遇到的问题

博客用的是 ZBlogPHP(1.7.5),想让读者用微信扫码就能登录、评论、下载,而不是填邮箱密码注册。
听起来很简单,实际一问才知道,微信官方的"网站应用扫码登录"门槛极高
要求
说明
我能不能满足
企业/个体工商户资质
需要营业执照,个人主体办不了
域名 ICP 备案
未备案域名不支持
微信认证 300 元/年
认证费年年交
个人站长三座大山全踩中。于是开始调研替代方案。

二、三条路线对比

方案
原理
成本
优点
结论
① 微信官方网站应用登录
微信开放平台 OAuth 授权
300元/年+企业资质+备案
官方正规
排除
② 第三方聚合登录(如彩虹等)
第三方中间站代接微信登录
免费/付费
接入最快
排除
个人小程序中转扫码登录
网站出小程序码→微信扫码进小程序→确认→网站拿 openid 登录
0 元
自己的小程序、自己的数据、完全正规
✅ 采用
方案③是我最终选的:个人本来就有一个不用的小程序,捡起来复用即可。它的本质是——微信允许小程序免费获取用户 openid,那就让"扫码确认"这一步发生在自己的小程序里,网站再通过云函数拿到 openid,完成登录。

三、整体流程

读者在网站点「微信扫码登录」│▼网站调用云函数 createLoginQr 生成会话 uuid│▼网站服务器用 uuid 调用微信接口生成小程序码(图片)显示给读者│▼读者用微信扫码 → 打开小程序确认登录页 → 点「确认」│▼小程序调用云函数 bindLogin:把 openid 和 uuid 绑定│▼网站轮询 queryLogin?uuid=xxx → 拿到 openid│▼网站按 openid 查找用户(没有就自动注册一个)→ 写入登录态 → 读者自动登录
整条链路的关键设计:openid 从不下发给浏览器,只在网站服务器和云函数之间流转;浏览器只持有一次性 uuid,扫完即废。

四、各部分组成

4.1 需要准备的东西

说明
费用
微信小程序
个人主体即可(微信公众平台注册)
免费
微信云开发
小程序里开通 CloudBase,用免费额度
免费
ZBlog 插件
自己写的一个小插件(出码、轮询、登录)
免费
云函数 ×3
部署在云开发环境
免费额度内

4.2 云函数(3 个)

云函数
作用
对外接口
createLoginQr
在数据库集合 login_sessions 建一条会话,返回 uuid
GET /createLoginQr → {uuid}
bindLogin
小程序端调用,把 openid 绑到指定 uuid
小程序内部调用
queryLogin
网站轮询,返回会话状态 + openid
GET /queryLogin?uuid=xxx → pending/confirmed/expired
数据库集合 login_sessions 权限设为"所有用户不可读写",只能靠云函数访问。

4.3 网站插件做了什么

ZBlog 插件只有一个入口做三件事:
接口(ajax.php)
作用
?do=qr
调云函数拿 uuid → 服务器端调微信 getwxacodeunlimit 生成小程序码,base64 返回给前端
?do=check&uuid=xxx
轮询云函数;confirmed 时按 openid 自动注册用户并写入登录态 cookie
?do=selfcheck
自检诊断(开发时用)
为什么小程序码要由网站服务器生成? 这是踩过的坑:腾讯云函数的出口 IP 是共享的,调微信接口容易被风控(返回 412);而网站服务器有固定公网 IP,调微信接口稳定。

五、最大的坑:ZBlog 1.7.5 改了登录机制

前面几版插件一直显示"登录成功",但刷新后根本没登录上。最后翻官方源码才发现——1.7.5 版本换了整套登录机制

旧版(1.7.0 之前)
1.7.5(现在)
登录 cookie
username + password(密码值)
username_<hash> + token_<hash>(hash 由站点 GUID 算出)
密码存储
md5 或简单哈希
md5(md5(明文) + 用户 GUID) 双重加密加盐
登录验证
比对 cookie 里的密码
用官方 CreateWebToken 签发 token,VerifyWebToken 校验
所以正确的"免密登录"写法是调用官方方法:
$token = $zbp->GenerateUserToken($member, time() + 3600*24*30);$k = hash('crc32b', $zbp->guid);setcookie('username_' . $k, $member->Name, $expire, $zbp->cookiespath);setcookie('token_' . $k,    $token,          $expire, $zbp->cookiespath);

这一段耗了最多时间,记在这里供同样升级到 1.7.5 的站长参考。


六、最终效果

前台登录弹窗(主题 footer)里,密码框下方多了一个绿色「微信扫码登录」按钮,点开即出小程序码;读者扫码确认后页面自动刷新完成登录。整个过程不到 5 秒,新读者自动注册、无需填资料。

后台登录页也通过 ZBlog 官方钩子 Filter_Plugin_Login_Header 内嵌了同样的扫码面板。


七、小结

环节
结论
个人能不能做
能,只要有一个闲置的小程序
花了多少钱
0 元(云开发免费额度足够)
需要备案吗
不需要
需要营业执照吗
不需要
隐私安全
openid 只在服务器间流转,不经过浏览器,也不经过第三方
完整代码(ZBlog 插件 + 云函数 + 小程序前端 + 主题改动)已打包,文末附获取方式。


附件下载

付费 ¥99
其他ZBlog微信登录(小程序
全文完
全站文章均为原创,转载请保留署名和出处。
阅读 16 次