HuoNiu Credits System - 积分系统

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

欢迎客人!

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

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

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

  • 中国新年将至,本站推出优惠活动。所有用户组都将获得由 HuoNiu 开发的 付费插件 优惠20%活动!如果购买多个插件,将在优惠基础上继续实施5%优惠。本活动将持续一个月!
  1. 撤销许可时 BIGINT 溢出报错修复
  2. 资源到期后购买记录状态自动更新为 expired
  3. 已过期记录在购买列表中正确显示
  4. 永久购买(无到期时间)可被管理员正常撤销
  5. 撤销后彻底禁止下载,不再走过期策略分支(积分 & 真实货币两种购买类型)
  6. 自然过期后后台配置的下载策略正常生效
  7. 多条购买记录时始终返回最新一条
修复:货币编辑页“最大持有量”标签显示异常
货币编辑页面中“最大持有量”标签显示为原始 phrase 键名。原因是模板错误引用了通用键 max_amount,与 XenForo 核心 phrase 冲突。现已改为使用插件专属 phrase:hn_currency_max_amount 与 hn_currency_max_amount_explain。

优化:转账手续费显示格式
转账记录中的手续费数值此前直接使用 bcmath 原始字符串显示,例如 0.06000000。现已改为通过 Money::format() 方法进行格式化处理,自动去除尾部多余的零,显示为 0.06。

修复:撤销授权后购买记录仍显示为有效
撤销授权时仅写入 expire_date,未同步更新 purchase_status,导致数据库记录仍保持 purchased 状态。同时购买记录列表查询仅过滤 purchased 状态,导致已撤销记录无法显示。现已修复:撤销授权时同步写入 revoked 状态,并更新查询逻辑,使列表同时显示 purchased 与 revoked 记录。

修复:交易记录 AUTO_INCREMENT ID 异常跳跃
升级脚本与管理员手动迁移同时执行批量 INSERT,InnoDB 在执行 INSERT IGNORE 前会预分配 AUTO_INCREMENT 值,即使未实际插入数据也会推进计数器,导致 ID 从约 4600 跳跃到 8200 以上。现已在批量插入前加入幂等性检查(transaction_hash LIKE 'mj_migration_%'),防止重复执行迁移。

架构调整:升级脚本不再执行数据迁移
原升级脚本 upgrade2000000Step1–4 同时包含 Schema 修改与数据迁移逻辑,导致每次升级都会重复迁移数据。现已重构为仅执行数据库结构变更(ALTER TABLE),所有数据迁移统一由 migrateMJCredits() 方法负责。

完善:手动迁移功能覆盖完整数据范围
此前管理员手动执行 migrateMJCredits() 时,仅迁移部分数据。现已将原升级脚本中的迁移逻辑统一整合到该方法中,确保一次迁移即可完整处理所有数据,包括:
  • 用户积分余额与每日签到时间
  • 资源定价与货币信息
  • 资源购买记录
  • 交易历史记录
  • 货币配置与积分事件规则
  • 帖子悬赏数据
  • 充值购买记录
  • 资源支付类型标记
  • 红包与红包领取记录
  • 权限前缀(mjCredits → hnCredits)迁移
  • 相关缓存重建
升级脚本现在仅负责 数据库结构变更,所有业务数据迁移统一通过 后台迁移工具 执行。

修复 — 系统性修复所有使用 金额 8 位小数显示​

  1. 购买记录价格列显示 65.00000000 → 正确格式化(如 65)
  2. 批量操作预览页积分价格未格式化 → 使用货币格式化
  3. 批量操作预览页真实货币价格未格式化 → 保留 2 位小数
  4. 奖池领取成功消息中金额未格式化 → 使用货币格式化
  5. 红包领取成功消息中金额未格式化 → 使用货币格式化
  6. 资源销售佣金交易记录中金额未格式化 → 保留 2 位小数
  7. 转账 JSON 响应中金额和余额未格式化 → 使用标准格式化
  1. 修复积分交易列表 $conditions 为 null 导致的 TypeError
  2. 修复真实货币导出 $this->response() 未定义错误,改为标准 XF View 模式
  3. 修复模板中使用不存在的 | merge 过滤器
  4. 新增缺失短语 hn_title
  5. 修复 seller/buyer 短语未定义,改用 hn_user/hn_trigger_user
  6. 导出按钮改为标准 <xf😛ageaction> + <xf:button>
  7. 提现管理列表/详情页按钮改为标准 <xf:button>
  8. 迁移选项模板按钮改为标准 <xf:button>
  1. 修复真实货币购买按钮不显示的问题 — 登录用户现在能正常看到付费资源的购买按钮
  2. 精简后台侧边栏 — ACP 侧边栏从三个入口合并为一个"HuoNiu积分系统"
  3. 修复编辑器工具栏付费内容按钮失效的问题 — 解决因加载不存在的 JS 文件导致编辑器按钮无法显示的问题
  • 增加积分购买升级用户组
  • 多货币设置升级用户组
  • 支付网关货币由固定列表升级为动态下拉,自动按系统可用货币与已启用支付方式联动展示。
  • 优化支付货币选择逻辑,支持保留历史已保存值,避免升级后配置项丢失或不可选。
  • 修复支付方式勾选变更时的校验时机问题,解决“首次保存报不支持、再次保存又通过”的不一致现象。
  • 增强货币兼容校验:仅变更支付方式时也会立即执行货币支持检查,结果更稳定一致。
  • 增强循环订阅兼容校验:仅变更支付方式时也会同步检查是否支持 recurring 与周期长度。
  • 后台保存校验行为统一,减少因配置顺序不同导致的误判与绕过。
  • 兼容现有支付流程与购买逻辑,不改变实际扣费/结算路径,仅强化配置阶段校验与可用性。
多货币定价功能(新功能)
  • 资源支持同时设置多种货币价格,用户访问时自动展示对应货币
  • 新增货币优先级规则:用户手动选择 > 管理员语言包映射 > 默认货币
  • 新增管理后台选项:语言包 → 货币映射配置表
  • 支付方式将根据货币自动选择付款网关,缺失网关将会自动增加退回机制
  • 用户也可手动选择相关支付方式
货币单位将跟随系统语言切换自动显示。具体测试可变更底部语言显示,价格及单位将同步变更。

P1 WARNING 修复(13项)
  1. SQL注入修复 + 游标分页
  2. 管理员提现控制器添加权限验证
  3. 数据迁移控制器添加权限验证
  4. 诊断控制器添加权限验证
  5. 全额退款方法修复错误列名
  6. 退款逻辑覆盖 pending+approved 两种状态
  7. 反应内容实体添加空值安全链 ?->
  8. 资源付费记录实体添加默认 return false
  9. 支付处理器修复不存在的方法调用
  10. 红包抢夺加数据库事务+行锁,mt_rand → random_int
  11. 货币相关列类型 FLOAT → STR
  12. 帖子付费查询子查询改 JOIN + 补 content_type 过滤
  13. 数据导入仓库 3处SQL注入修复
P2 WARNING 修复(10项)
  1. 统计仓库列名白名单验证
  2. 积分转账金额 float → bcmath 精度安全
  3. 奖励实体空值检查
  4. 红包实体空值检查
  5. 交易清理任务 DELETE 加 LIMIT 防超时
  6. 转账服务传入正确用户对象而非 null
  7. 频率限制检查移入 POST 分支
  8. 管理后台清除操作添加 CSRF 验证
  9. 收费BB代码静态缓存 + 保存后更新缓存
  10. 货币仓库移除读取路径的写操作副作用

新增功能​

  1. 资源拒绝与反馈 — 管理员在审批队列中可选择"拒绝并反馈",向资源作者发送私信说明拒绝原因和修改建议
  2. 资源版本拒绝与反馈 — 同上,支持对资源新版本的拒绝操作
  3. 拒绝时可选删除资源 — 拒绝时可勾选是否软删除资源,不勾选则保留资源供作者修改后重新提交
  4. 拒绝时可选发送私信 — 拒绝时可勾选是否发送包含拒绝原因和修改建议的私信通知
  5. 独立拒绝页面 — 在资源详情页提供单独的拒绝表单入口(非审批队列场景)
  6. 购买列表权限控制 — 新增 canViewPurchaseList() 权限判断,仅资源作者、管理员、版主可查看购买记录
  7. 审批队列拒绝字段动态显示 — 选中"拒绝"单选按钮时自动展开原因和建议输入框,选其他操作时自动隐藏

修复​

  1. 已过期购买记录不可见 — 移除了 isActive() 过滤器,现在显示所有购买记录并附带 is_active / is_expired 状态标识
  2. 拒绝不删除时审批队列条目残留 — 拒绝资源但不删除时,resource_state 保持 'moderated' 不变,不触发实体状态变更钩子,导致队列条目永不移除。修复为显式删除 ApprovalQueue 条目
  1. 修复模板 link 函数参数类型错误 - 真实货币交易列表搜索菜单
  2. 优化事件错误检测逻辑 - 使用语言短语键替代硬编码字符串
  3. 扩展错误白名单 - 将正常的频率限制错误加入白名单,避免误记录
修复错误
  • 将 \XF::app()->schemaManager() 改为 $db->getSchemaManager()
后退
顶部