💰【PluginTools&PluginPayment】Halo 木因(@Lywq)插件踩坑实操手册

周店瑟谷 1 阅读 建站与数字基建

适用对象:木因授权中心 https://auth.muyin.site/ 下的两款 Halo 插件

  • PluginTools(Tools 工具箱) — 文章付费阅读 / 限制阅读

  • PluginPayment(支付插件) — 支付能力(易支付 / 支付宝 / 微信等)

本文档基于真实踩坑整理,重点关注配置中容易报错的地方。按「现象 → 根因 → 解决」组织,可直接当排查手册查用。


〇、先说清两款插件的关系与整体依赖链

付费阅读功能是「Tools 工具箱」和「支付插件」配合完成的:

文章设置(限制阅读方式=付费访问)
        │
        ▼
Tools 工具箱(限制阅读节点 + 付费弹窗)
        │  调用
        ▼
支付插件(易支付 / 支付宝官方 / 微信)
        │  依赖
        ▼
① 插件授权(auth.mayin.site 在线/离线)
② Halo 外部访问地址(external-url)
③ 支付回调域名(公网可访问)

这条链上任何一环断了,付费阅读就跑不通。 所以下面按依赖顺序排查。


一、授权环节(两个插件都会遇到)

坑 1:明明建了授权,却报「未查询到授权信息」

报错特征:

PluginAuthManager$AuthException: 插件【PluginTools-2.3.2】未查询到授权信息!授权域名:192.168.5.178:8081

根因: 授权校验用的域名,不是浏览器地址栏的域名,而是 Halo 的「外部访问地址(external-url)」。你建授权时绑定的域名和它不一致,就查不到授权。

解决:

  1. 建授权时,授权域名要和 Halo 外部访问地址完全一致(含协议、不含端口)

  2. 要么改 Halo 外部访问地址,要么改授权记录里的授权域名,两边对齐

坑 2:外部访问地址还是内网 IP

Halo 后台默认可能配成 http://192.168.5.178:8081(内网 IP)。这会连锁引发授权失败、回调地址错误、插件配置校验失败。

解决:

  • 后台 → 设置 → 系统设置 → 外部访问地址 → 改成公网域名,如 https://blog.seguzhixue.top

  • 注意:https:// 前缀 + 不要带端口

  • 概览页顶部若出现「访问地址与配置不一致」警告,就是这个问题没改对

坑 3:授权中心域名可能整体不可用

现象: 配置全对,但授权还是失败。

诊断: 授权中心 auth.mayin.site 曾出现**公网 DNS 无法解析(NXDOMAIN)**的情况。用 nslookup auth.mayin.site 或 curl -I https://auth.mayin.site/ 验证。

解决:

  • 优先用离线授权:授权中心 → 下载证书 → Halo 插件里选「离线授权」上传证书

  • 联系作者 @Lywq 反馈授权中心状态

坑 4:授权成功后,功能节点/设置仍不出现

授权只是第一步,插件前端扩展(编辑器节点等)的注册还依赖插件配置完整初始化,见「五、Tools 工具箱」一节。


二、支付回调域名(支付插件的「地基」)

坑 5:通用设置里「支付回调域名」报「不得留空」或填了不生效

根因: 回调域名是支付插件拼接 notify_url 的基地址。它不是易支付的接口地址,而是你自己博客的公网域名。

解决:

  • 支付插件 → 通用设置 → 支付回调域名 填:https://blog.seguzhixue.top

  • 同时确认 Halo 外部访问地址也是这个域名(两者要保持一致)

坑 6:回调地址一直是内网 IP,改不过来

现象: 测试页里回调地址还是 http://192.168.5.178:8081/apis/...。

根因: 通用设置没保存成功(可能被必填校验卡住),或外部访问地址没改。

解决:

  1. 先改 Halo 外部访问地址为域名

  2. 支付插件通用设置填回调域名并确认保存无报错

  3. 验证标志:测试页回调地址变成 https://blog.seguzhixue.top/apis/...


三、易支付配置

坑 7:易支付没有「官方注册入口」

易支付是一套开源程序(彩虹易支付),不是官方产品,本身不收钱、没有统一注册入口。你需要找一家跑易支付的「服务商/发卡平台」注册成子商户,才能拿到商户号、密钥、接口地址。

拿到三件套(商户中心):

  1. 接口地址(平台站点域名)

  2. 商户号 PID(纯数字)

  3. 商户 MD5 密钥

⚠️ 易支付属第四方/聚合支付,存在二清合规与跑路风险。别充大额余额、别长期滞留资金、能日结就日结。 个人博客小额打赏可用,大额建议支付宝当面付等官方渠道。

坑 8:易支付参数填写对照表

字段

正确填法

常见错误

接口版本

V1(默认,配 MD5 签名)

无脑选 V2

发起支付方式

页面跳转支付

选 API 接口(见坑 11)

接口地址

易支付平台域名,https://pays.xxx.cn 结尾不带 /

多写 / 导致 //submit.php 双斜杠

商户号

平台给的数字 PID

填成 admin 或自己博客域名

商户MD5密钥

平台复制的 key

带空格 / 复制不完整

坑 9:接口地址结尾多一个斜杠

https://pays.1660.net.cn/ ❌ → 会拼出 //submit.php,部分易支付程序直接拒绝。结尾不要带 /。

坑 10:回调域名需要平台「审核/白名单」

很多易支付平台要求回调域名先过白名单审核,审核通过前发起支付/回调会被拒。加了域名后看状态是「审核中」→ 等审核通过(或联系客服催)。

坑 11:发起支付方式别选「API 接口支付」

现象: 换 API 模式后「支付发起失败」,或微信渠道报 404。

根因:

  • API 模式(/mapi.php)是服务器对服务器请求,很多小易支付站不保障 mapi 接口,或返回格式插件解析不了

  • API 模式下微信渠道还会触发插件自己渲染二维码页,而 /pay/qrcode/ 路由未注册 → 404(见坑 12)

解决: 用「页面跳转支付」,浏览器直接跳易支付收银台,兼容性最好。

坑 12:微信支付报 404 / 没有二维码

报错特征:

No static resource pay/qrcode/2026093012565313077/

根因: 插件 bug。同一套配置下支付宝渠道正常、微信渠道 404,说明不是参数问题,而是插件对微信渠道的实现缺陷——它想在自己博客渲染二维码页,但 /pay/qrcode/ 路由没注册进 Halo。

解决:

  1. 重启插件(停用→启用)排除偶发

  2. 检查应用市场是否有插件新版本(文档显示曾「修复易支付-微信支付发起支付失败的问题」)

  3. 带报错日志找作者 @Lywq 反馈

  4. 过渡期:支付宝照常用,微信用「收款码图片」顶上

坑 13:没有二维码 / 弹窗一直转圈

现象: 测试弹窗里一直「加载中」,不出二维码。

根因: 「页面跳转支付」返回的是整个收银台网页,不是二维码图片;易支付站普遍禁止被 iframe 内嵌(X-Frame-Options),所以弹窗里永远转圈。

解决: 点弹窗底部「跳转新页面支付」,新标签页打开收银台扫码。这是测试页的展示局限,不影响前台真实用户(他们本来就是跳收银台)。

坑 14:支付成功跳回的是主页,不是文章页

根因: 这是测试订单,成功返回地址(return_url)填的是主页。正式场景里,发起支付的插件(付费阅读)会自己传文章页/结果页作为返回地址。

重点区分两个地址:

  • return_url(同步跳转):付完浏览器跳哪,只是体验

  • notify_url(异步回调):支付平台服务器通知插件「钱到了」,这才是真正确认支付

订单状态判定: 回「支付管理 → 订单列表」看是否变「已支付」——秒变=回调通;1分钟内变=轮询兜底生效;一直待支付=查回调/签名。

坑 15:订单金额被加手续费

现象: 下 ¥1.00 的单,收银台显示 ¥1.05。

根因: 易支付平台的手续费转嫁给了付款人(5%)。

解决: 去易支付平台设置,把「手续费承担方」改成商户承担;改不了就对比其他平台(行业常见 1%~3%,5% 偏高)。


四、支付宝官方(当面付)

坑 16:「电脑网站支付」「手机网站支付」个人签不了

这两个产品要求企业/个体工商户资质。个人主体(截图里写「个人」)签不下来。

解决: 选 「当面付」(alipay.trade.precreate),个人可签,也是 Halo 支付插件默认对应的产品。

坑 17:公私钥三个「钥」别搞混

这是支付宝配置最高频的坑:

名称

谁生成

填到哪

应用私钥

开放平台「密钥工具」生成

填插件(PKCS8 格式)

应用公钥

同上,配对的公钥

上传到开放平台(不填插件)

支付宝公钥

上传应用公钥后,平台生成

填插件

记忆:私钥自己留(填插件),公钥给平台(上传),平台还你一个支付宝公钥(填插件)。

坑 18:已有应用复用 vs 新建

已有应用可以复用,不用新建。只需确认三件事:

  1. 有没有签「当面付」(没有就补签)

  2. 加签方式是「公钥模式」(证书模式要改成公钥模式)

  3. 应用状态是「已上线」(不是「开发中」)

坑 19:支付宝参数填写对照表

字段

填法

appId

开放平台应用的 APPID(2021 开头)

应用私钥

密钥工具生成的私钥(PKCS8)

sellerId

留空

支付宝公钥

平台「接口加签方式」页生成的支付宝公钥

商户签约产品

当面付

支付宝网关

正式环境(审核前测试可用沙箱)

签名类型

RSA2

AES密钥

留空(没开内容加密就不用)

支付宝官方对域名备案要求不如微信严格,未备案一般可用——这是没备案时优先上支付宝的原因。


五、Tools 工具箱(付费阅读)

坑 20:编辑器里找不到「限制阅读内容/限制阅读分割」节点

这是本次最隐蔽的坑。 现象:插件已授权成功、其他插件的自定义节点(分栏、视频等)都正常显示,唯独 Tools 的「限制阅读」节点在编辑器里找不到。

排查顺序(按命中率):

  1. 斜杠命令:正文空行敲 /限制,斜杠菜单会过滤出节点(比翻"+"菜单快)

  2. 插件设置标签逐个翻:Tools 设置页顶部标签栏里找「模板设置」

  3. ✅ 根因:「模板设置 → 兼容 PJAX」开关未开启

最终根因: Tools 的「模板设置 → 兼容 PJAX」开关没开启,导致插件前端脚本(bundle.js)初始化不完整,编辑器扩展节点(限制阅读内容/分割/下载信息)没有注册。

解决: 打开「兼容 PJAX」开关 → 保存 → 回编辑器 Ctrl+F5 强刷 → 节点出现。

💡 教训:插件功能经常互相耦合,一个开关的字面名字(“兼容 PJAX”)和它的实际影响范围(编辑器节点注册)可能完全对不上。排查插件「功能开关找不到」时,把插件自己的设置标签逐个翻完。

坑 21:改完配置没效果 → 必须强刷

编辑器扩展靠 bundle.js 注入,改完插件配置后浏览器里的旧页面还在用旧缓存。

解决: 改完配置 → Ctrl+F5 强制刷新编辑器页面(或退出后台重登)。


六、通用排查心法(速查)

  1. 「其他插件正常、唯独这个插件异常」→ 问题锁定在该插件自身,先翻它自己的设置,别去动系统

  2. Halo 插件问题先查三件事:插件授权状态、Halo 外部访问地址、插件配置是否保存成功

  3. 改配置 → 保存 → 强刷(Ctrl+F5)→ 验证,四步缺一不可

  4. 看日志:Halo 后台「概览 → 系统日志」或 docker logs <容器名>,搜关键词(易支付 / qrcode / payment / 插件名)

  5. 版本匹配:Tools 2.3.2 要求 Halo ≥ 2.24.0,版本不匹配会导致编辑器扩展 API 对不上

  6. 别在聊天里截图暴露密钥:MD5 密钥、应用私钥都等于收款钥匙,泄露后立即去平台重置


七、完整验证闭环(配置完必做)

  1. 发一篇带「限制阅读分割」的文章,文章设置里选「付费访问」+ 金额

  2. 前台打开文章 → 看付费弹窗是否正常

  3. 点支付 → 跳收银台 → 付 0.01/0.01 元

  4. 回「支付管理 → 订单列表」看订单是否自动变「已支付」

  5. 确认付费后文章隐藏内容正常解锁

以上全部通过,付费阅读链路才算正式可用。


文档整理时间:2026-09-30
适用:Halo 2.24+ / Tools 2.3.2 / 支付插件(木因)