[virtual_card]积分兑换虚拟卡热
108214
插件质量报告
插件:
virtual_cardHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 topic.after_render 首页/版块列表/主题查看逐条渲染 是(列表跳过) 5 - - app_users 读 plugin_virtual_card_orders, plugin_virtual_card_sales topic.after_save 主题保存后 回调内 3 - - app_topics 写 plugin_virtual_card_items, plugin_virtual_card_sales 修正❗️ topic.before_save 主题发布/编辑表单提交 否 3 - - - 读 plugin_virtual_card_sales content.before_delete 内容删除操作 否 2 - - - 读 plugin_virtual_card_sales topic.before_delete 主题删除操作 否 2 - - - 写 plugin_virtual_card_items, plugin_virtual_card_sales topic.form_extra 主题发布/编辑表单 否 2 - - - 读 plugin_virtual_card_items, plugin_virtual_card_sales 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。只有操作实际处于可执行的循环路径时,才会标记“修正❗️”。
数据字典
plugin_virtual_card_sales字段 类型 可空 默认值 约束 id $id 是 - - topic_id $uint 否 - 唯一 seller_id $uint 否 - - card_name $string 否 - - price $uint 否 - - limit_one INTEGER 否 0 - total_count $uint 否 0 - sold_count $uint 否 0 - created_at $uint 否 - - updated_at $uint 否 - - plugin_virtual_card_items字段 类型 可空 默认值 约束 id $id 是 - - sale_id $uint 否 - - card_value $text 否 - - buyer_id $uint 否 0 - purchased_at $uint 否 0 - plugin_virtual_card_orders字段 类型 可空 默认值 约束 id $id 是 - - sale_id $uint 否 - - topic_id $uint 否 - - seller_id $uint 否 - - buyer_id $uint 否 - - item_id $uint 否 - - card_name $string 否 - - card_value $text 否 - - price $uint 否 - - created_at $uint 否 - - - bbs1org2026-08-06
我去 这就发布上线了 我还在优化呢
演示地址:https://www.nodeloc.cn/topic/11- bbs1org2026-08-06
- Maser2026-08-06
功能越来越强大了
已经积分不够了,我都不敢把全部插件下下来,因为不够,我就下了目前要用的一个。
- bbs1org2026-08-06
作者和插件作者都得奖励
V1.5.0 更新日志
增加了自动回帖的开关 可以设置自定义回帖内容。购买成功后会自动回帖。
增加了购买记录翻页
增加了限购数量设置🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
未发现明显问题(SQL 均参数化、输出经 h() 转义、兑换路由有 need_login/require_post 与 CSRF,无硬编码密钥)。
⚡ 性能问题
- 红区 Hook 内查库:
topic.after_render回调virtual_card_topic_after_render在渲染链中执行one()(L181 查销售)、val()(L190 查购买次数)及virtual_card_order_data()的 COUNT+联表查询(L185),违反“渲染循环零 DB 读”。建议在app.boot或topic.replies预加载到内存,渲染钩子只做内存读取。
🐛 功能/规范缺陷
- 卸载无法删表:
virtual_card_uninstall(array $plugin, bool $keep_data = true)(L38)核心只传$plugin单参,$keep_data恒为 true,删表逻辑永不执行。建议去掉第二参,回调仅在“不保留数据”时被调用,直接删表。 tx()内调用err()(L233/L236/L238 等)会直接终止脚本,事务未显式提交/回滚。建议先校验再进事务,或用异常统一回滚。- 积分扣减(L242)与卖家加分(L244)直接用 UPDATE 改
app_users.points,绕过user_points_change(),无积分流水、不触发user.points_changed。建议移出事务改用user_points_change()。 - CSS 写死字号(12px/15px/11px/20px)与圆角(6px),应改用
var(--font-size-*)与var(--radius)(L301)。
✅ 修复优先级
红区查库 → 卸载删表 → 积分统一落账 → 事务内 err → CSS 变量。
- 红区 Hook 内查库:
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:积分兑换虚拟卡(virtual_card)v1.5.0
结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。