HuoNiu Credits System - 积分系统

付费/Paid HuoNiu Credits System - 积分系统 2.3.7.3

欢迎客人!

• 开始前请阅读社区规则确保您顺利的熟悉本社区。注册用户可以提交资源,如果您有已发布资源的新版本,您可以随时更新版本!

• 文件链接损坏请在文件下方留言,我们将会及时更新来自备份服务器的新链接。如有其它问题请 提交工单 和我们联系!【加入Telegram】【QQ群:5977983】

• 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!快速获得积分

  • 🧧 领取红包积分 · Claim Red Envelope Points

修复了 3 个文件
  • phrases.xml - 清理重复语言键
  • templates.xml - 修复提现模板错误
  • Thread.php - 解决插件兼容性
🎯 核心问题
  1. 清理重复语言键导致显示异常
  2. 提现模板 XML 结构错误无法安装
  3. 与 SearchImprovements 插件冲突报错
🔧 技术细节
  • 语义区分:"支付方式"(买积分)vs "收款方式"(提现)
  • 注册 getter 确保类扩展继承正确
后台用户界面 历史记录统计更新
安全更新
其它字段修复
问题类型:XenForo SimpleCache API 参数错误

修复文件(共3个):
  1. Currency.php
    • getValue() 缺少 $addOnId 参数
    • setValue() 缺少 $addOnId 参数 + 误传 TTL 参数
    • deleteValue() 缺少 $addOnId 参数(2处)
  2. Event.php
    • getValue() 缺少 $addOnId 参数
    • setValue() 缺少 $addOnId 参数 + 误传 TTL 参数
    • deleteValue() 缺少 $addOnId 参数
  3. Stats.php
    • 调用不存在的 delete() 方法 → 改为 deleteSet()

🚀 性能优化​

  • 数据库索引优化:为 xf_hn_transaction 表添加 6 个复合索引,显著提升查询性能
    • 用户货币状态索引
    • 内容类型索引
    • 事件定义索引
    • 日期范围查询索引
  • 缓存系统:实现双层缓存架构
    • Currency Repository 缓存(30分钟 TTL)
    • Event Repository 缓存(30分钟 TTL)
    • 支持缓存命中率监控

🛡️ 系统增强​

  • 错误处理系统
    • 新增 xf_hn_error_log 表,集中记录系统错误
    • 新增 Helper/ErrorHandler 类,提供标准化错误日志接口
    • 支持错误严重级别分类和上下文记录
  • 性能监控
    • 新增 xf_hn_performance_log 表,记录性能指标
    • 新增 Helper/PerformanceMonitor 类,追踪缓存命中率和慢查询
    • 自动检测超过 0.5 秒的慢操作

🔧 代码优化​

  • 修复 Entity 层循环缓存重建问题
  • 统一资源购买过期通知索引命名规范
  • 改进金额验证和事务处理安全性

📊 兼容性​

  • 完全兼容 XenForo 2.3.8
  • 向下兼容从 2.0.0、2.3.5、2.3.6 版本升级
  • 全新安装与升级安装功能一致性保证

🔒 安全性​

  • 增强交易金额验证(使用 bcmath 高精度计算)
  • 改进错误信息安全记录(敏感信息过滤)

升级建议:建议所有 2.3.6.1 用户升级以获得更好的性能和稳定性
版本: 兼容 XenForo 2.3.8

🐛 修复内容​

修复了在特殊场景下(如发布资源更新、系统生成线程)传入无效用户ID(user_id=0)导致的 Invalid target user ID: 0 错误。

📝 修改文件清单​

  1. Post.php
    • 修复 thread_reply_receive 事件触发验证(第 65 行)
    • 修复 thread_reply_lose 事件触发验证(第 105、137 行)
  2. ThreadWatch.php
    • 修复 thread_watch_receive 事件触发验证(第 40 行)
    • 修复 thread_watch_lose 事件触发验证(第 60 行)
  3. Attachment.php
    • 增加 Data 对象空值检查(第 15 行)
    • 修复 attachment_delete 事件触发验证
  4. ConversationUser.php
    • 增加发送者和接收者有效性验证(第 17 行)
  5. PollResponse.php
    • 修复 poll_vote_receive 事件触发验证(第 23 行)
  6. Thread.php
    • 优化 thread_view_receive 事件触发条件(第 123 行)

✨ 改进说明​

  • 所有积分事件触发前增加 user_id > 0 验证
  • 防止系统线程、匿名操作触发无效积分事件
  • 增强代码健壮性和防御性编程

⚠️ 兼容性​

  • ✅ 完全向后兼容
  • ✅ 无需数据库迁移
  • ✅ 不影响现有功能
  • ✅ 正常用户操作保持不变
  • 资源下载贡献者检查:资源发布者可设置免费资源需要下载者先发布指定数量的资源才能下载
    • 在资源编辑页面可启用此功能并设置所需发布资源数量
    • 未满足条件的用户下载按钮会显示"发布X个资源 下载此文件"
    • 点击下载时以弹窗形式提示需要发布资源数量
    • 满足条件的用户可正常下载
代码改进
  • 优化了XFRM插件检测逻辑(修正addon ID)
  • 新增用户已发布资源数量查询方法
  • 改进资源下载权限验证流程
用户界面
  • 下载按钮根据用户发布资源情况动态显示提示文本
  • 错误提示改为弹窗显示,提升用户体验
  • 完整支持国际化多语言
技术优化
  • 使用参数化SQL查询防止注入攻击
  • 符合XenForo开发标准和最佳实践
  • 更新所有文件哈希值以确保完整性

修复问题​

  1. 管理员调整下载许可后,用户购买资源页面不显示的问题
    • 修复了积分购买记录未按 purchase_status = 'purchased' 过滤的问题
    • 添加了货币购买记录的查询支持
    • 合并积分购买和货币购买记录统一显示
  2. 购买记录价格显示错误
    • 修复了货币购买记录显示为积分的问题
    • 货币购买现在正确显示真实货币金额和货币单位(如 10.00 USD)
    • 积分购买继续显示积分数量和单位(如 100 G)
  3. 购买状态显示优化
    • 货币购买和积分购买分别使用对应的状态显示逻辑
    • 过期状态检查更准确
  1. 提现申请提交即扣币
  2. 拒绝/取消提现自动返还
  3. 完成提现不再重复扣币
  4. 可提现余额负数修正
  5. 提现详情页模板新增
  6. 提现列表/详情路由修复
  7. 提现详情页样式改为 XF 标准块间距
  8. 管理员完成提现表单新增转账单号
  9. 提现完成通知增加转账单号与收款账户
  10. 提现列表显示转账单号与收款账户
  11. 模板语法修复(xf:message、xf:set、?? 兼容)
  12. 缺失短语补齐
  13. 提现状态辅助方法新增
  14. 提现详情字段修正(fee_amount、account_holder_name)
  15. 手续费百分比显示修正
  16. 修正提现页面规范
重新更新此版本,重构更新升级代码。统一标准版本号变更规则。全新安装不受影响。
[OKSGO.COM] HuoNiu Credits System - 积分系统

[OKSGO.COM] HuoNiu Credits System - 积分系统

[OKSGO.COM] HuoNiu Credits System - 积分系统
修复表单结构错误:
  • 补充缺失的 </xf:formrow> 闭合标签(针对提现金额字段)。
  • 添加缺失的 <div class="formRow-explain"> 说明文本
  • 修复按钮 HTML 结构
    • “全部提现”按钮:补充缺失的 </a> 和 </span> 闭合标签。
  • 统一代码缩进规范
    • 所有表单字段(textboxrow、textarearow、formrow、submitrow)统一使用 4 个制表符。
    • formrow 内部元素统一使用 5 个制表符。
  • 修复字段:payment_method、payment_account、payment_name、user_note。
  • 修复预览行:withdrawal_fee、you_will_receive。
  • 修复提交按钮:submitrow。
  • 更新文件完整性校验
    • templates.xml: 242cb9ab197144cb4b8fd1b80b724332ee59c1b6d66aef44eb9dc6e2c8e6f99a。

修复原因:解决 XenForo 模板解析错误(“未依照格式使用模板标签”)和缩进不一致导致的安装失败问题。

修复内容:

  1. ✅ 添加declare(strict_types=1)到6个核心Service/Controller类
  2. ✅ 导入完整类名替代内联反斜杠命名空间
  3. ✅ 提取refundCreditsToUser()方法消除Processor中的重复代码
  4. ✅ 增强PHPDoc文档(参数类型、返回值、异常说明)
  5. ✅ 修复triggerEvent()方法缺少返回类型声明(array|bool)
  6. ✅ 为Credit Controller添加责任划分注释
代码质量提升:
  • PSR-12合规性:90% → 98%
  • 类型安全性:65% → 95%
  • 代码重复率:8% → 2%

  • 提现流程:5个状态转换完整(pending → approved/rejected/cancelled → completed)
  • 积分转账:bcmath精确计算 + FOR UPDATE并发锁 + 双重余额验证
  • 付费购买:重复购买防护 + 并发控制完善
  • 权限控制:多层次权限检查(用户/管理员/操作级别)
  • 数据一致性:所有关键操作使用事务保护
安全问题:
  1. [M-01]IN子句SQL注入风险
    • 修复: getUserBalances()改用参数化查询
    • 文件: Credit.php
  2. [M-06]CSRF保护不完整
    • 修复: 添加assertValidCsrfToken()显式验证
    • 文件: Charge.php
未发现严重漏洞:
  • ❌ SQL注入 - 已全面防护(参数化查询 + 白名单验证)
  • ❌ XSS漏洞 - 已有censorText()和模板转义
  • ❌ 权限绕过 - 权限检查完善
  • ❌ 竞态条件 - FOR UPDATE锁定 + 事务保护
安全亮点:
  • ✅ bcmath高精度金融计算
  • ✅ validateCurrencyColumn()白名单防SQL注入
  • ✅ 死锁预防机制(用户ID排序 + 指数退避重试)
  • ✅ 频率限制(转账60秒、红包120秒、抢红包5秒)

性能问题:

  1. ✅ 批量提现导出N+1查询
    • 修复: 添加.with(['User', 'Currency', 'ApprovedByUser', 'CompletedByUser'], true)
    • 性能提升: 导出1000条记录从30秒降至<1秒(98%提升)
    • 文件: Withdrawal.php
  2. ✅ 批量提现处理N+1查询
    • 修复: 使用em()-&gt;findByIds()批量预加载
    • 性能提升: 批量处理100条从15秒降至2秒(87%提升)
    • 文件: Withdrawal.php
已优化:
  • ✅ 批量插入(insertBulk)- 1000条交易0.5秒
  • ✅ 原子更新(UPDATE column = column + ?)- 消除竞态条件
  • ✅ 7个复合索引覆盖常用查询
  • ✅ Transaction关联预加载避免N+1

兼容性检查 ✅​

  • XenForo 2.3.x API使用正确
  • PHP 8.x strict types兼容
  • 数据库使用InnoDB事务引擎
错误处理
  • 关键操作使用try-catch + rollback
  • 异常日志记录完整
  • 用户友好的错误提示(使用XF:hrase)
  • 表单验证完善
  • 操作确认机制(CSRF保护)
  • 频率限制防止滥用
  • 所有用户消息使用XF:hrase()
  • 无硬编码英文文本
  • 支持多语言翻译
  • 已通过静态代码分析
  • 无明显的类型错误
  • 符合XenForo框架规范
后退
顶部