HuoNiu Credits System - 积分系统

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

欢迎客人!

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

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

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

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

修改的模板:
  • hn_withdrawal_list (提现记录列表页面)
  • hn_withdrawal_apply (提现申请页面)
主要改进:
  • ✅ 两栏布局设计,左右栏中间使用1px渐变分隔线
  • ✅ 优化间距和对齐方式(gap: 1em)
  • ✅ 余额信息区域整合到黄色提示框内
  • ✅ 提现规则使用后台动态配置(调用 phrase 系统)
  • ✅ 添加"全部提现"按钮
  • ✅ 简化预览区域(只显示手续费和实际到账)

2.​

新增文件: withdrawal.js

功能:
  • ✅ 实时计算提现手续费和实际到账金额
  • ✅ 支持用户输入时动态更新预览
  • ✅ "全部提现"按钮自动填充可用余额
  • ✅ 使用 XenForo Element Handler 架构,与购买积分页面一致

3.​

文件: templates.xml (hn_withdrawal_apply)

改进:
  • ✅ 余额不足时不显示提现表单,改为显示友好的错误提示
  • ✅ 检查条件: $availableBalance < $minAmount
  • ✅ 避免用户填写完整表单后才发现余额不足被拒绝

4.​

文件: templates.xml

修复:
  • ✅ 添加缺失的邮件模板 payment_received_receipt_hn_credits
  • ✅ 修复支付宝/PayPal充值成功后发送收据邮件的错误
  • ✅ 解决 Template email😛ayment_received_receipt_hn_credits is unknown 错误
🔒 安全性修复 (已完成):
  1. ✅ SQL注入防护 - Currency.php删除操作使用验证过的列名
  2. ✅ 输入验证增强 - Event/Trigger.php添加全面的参数验证
  3. ✅ Race condition防护 - Transfer/Handler.php使用FOR UPDATE锁定
  4. ✅ CSRF保护 - 所有POST操作都有assertValidCsrfToken
  5. ✅ XSS防护 - 用户输入使用stringFormatter()->censorText()
💰 精度问题修复 (已完成):
  1. ✅ Credit.php - Exchange功能全面使用bcmath
  2. ✅ Handler.php - Fee计算使用bcmath
  3. ✅ Transaction.php - updateUserCredit格式化金额
  4. ✅ 除零错误检查 - 汇率计算前验证
⚡ 性能优化 (已完成):
  1. ✅ Credit Repository - validateCurrencyColumn缓存机制
  2. ✅ Transfer Handler - 数据库事务锁定优化
  3. ✅ ResourceItem购买 - 双重余额检查在事务内
删除了重复的 fastUpdate 扣款代码,只保留 triggerEvent 来正确扣除积分,同时优化了余额检查逻辑:
  • ❌ 删除:$visitor->fastUpdate($buyCurrency['column'], $visitor->get($buyCurrency['column']) - $sendAmount);
  • ✅ 修改:余额检查从 < 0 改为 < $sendAmount(更合理的预检查)

🔧 修复 (Bug Fixes)​

✅ 修复 PayPal 支付无法购买真实货币文件的严重问题
  • 问题: 用户通过 PayPal 支付后无法获得资源下载权限
  • 原因: 缺少 XenForo 2.3+ 必需的 validatePurchasable() 回调验证方法
  • 修复:
    • 添加完整的 validatePurchasable() 方法到 Purchasable\ResourceMoney 类
    • 删除冗余的旧版 Payment\ResourceMoney 代码
    • 完善支付回调验证链
影响:
  • ✅ PayPal 支付现已完全正常(CNY/USD 自动转换)
  • ✅ 支付宝支付更加稳定可靠
  • ✅ 所有支付网关回调验证完整

🎯 技术细节​

修改文件:
  • ResourceMoney.php - 添加验证方法
  • ResourceMoney.php - 已删除(src\addons\HuoNiu\Credits\Payment\ResourceMoney.php 冗余)
兼容性:

  • XenForo 2.3.0+
  • PHP 8.0+
  • XFRM 2.3.0+ (可选)

本次修复文件清单​

修改的文件(2个)​

  1. Listener.php
    • 路径:Listener.php
    • 添加:paymentHandlerInfo() 方法
  2. code_event_listeners.xml
    • 路径:code_event_listeners.xml
    • 添加:payment_handler_info 监听器配置

修复目标​

PayPal支付回调失败问题

更新内容​

🐛 Bug 修复​

1.​

文件: ResourceItem.php

问题:
  • 用户组设置了"绕过资源购买(XFRM)"权限后,前台仍显示购买按钮
  • 代码中使用了错误的权限ID 'bypassPurchase'
修复:
  • ✅ 第106行:checkRequirePurchase() 方法 - 权限ID改为 'hnBypassPurchase'
  • ✅ 第538行:canDownload() 方法 - 权限ID改为 'hnBypassPurchase'
影响:
  • 拥有"绕过资源购买"权限的用户现在可以直接下载付费资源
  • 无需购买即可访问

🧹 代码优化​

2.​

文件: permissions.xml

删除的权限:
  • ❌ viewOthers - 查看他人交易(实际通过管理员权限控制)
  • ❌ viewHidden - 查看隐藏交易(未实现)
原因:
  • 避免用户困惑(设置了但不生效)
  • 保持代码和配置的一致性
保留的权限:
  • ✅ useCredits - 使用积分系统
  • ✅ bypassChargeTag - 免费查看收费内容
  • ✅ canFine - 罚款其他用户
  • ✅ hnBypassPurchase - 绕过资源购买(XFRM)

📝 更新说明​

升级方式:
  1. 后台 → 插件 → HuoNiu Credits System
  2. 点击"升级"或重新安装
版本兼容: 适用于 XenForo 2.3.0+ 和 XFRM 2.3.0+
建议操作: 升级后重建权限缓存(后台 → 工具 → 重建缓存 → 权限组合)

🐛 Bug 修复​

  • 修复 XFRM 资源页面崩溃问题
    • 修复错误:InvalidArgumentException: Accessed unknown getter 'hn_payment_type' on XFRM:ResourceItem
    • 添加升级步骤自动创建缺失的数据库字段
    • 影响范围:使用资源管理器(XFRM)的所有站点
  • 修复插件安装失败问题
    • 修复模板语法错误:hn_resource_purchase_money 模板第54行 explain 标签使用不当
    • 更新模板结构以符合 XenForo 2.3+ 规范
    • 影响范围:全新安装或重新安装插件时

🔧 技术改进​

  • 新增 upgrade2031116Step1() 升级步骤,自动处理数据库结构更新
  • 完善 XFRM 资源表扩展字段的向后兼容性检查
  • 优化模板结构,提升与 XenForo 核心的兼容性

📊 涉及字段​

自动添加/检查以下 XFRM 资源表字段:
  • hn_payment_type, hn_money_price, hn_money_currency, hn_money_purchase_count
  • hn_price, hn_currency_id, hn_discount, hn_discount_date
  • hn_purchase_count, hn_purchase_count_visible
  • hn_expiration_days, hn_expiration_unit, hn_renewal_discount

📝 升级说明​

从旧版本升级至 v2.1.1 RC 7:
  1. 上传文件覆盖
  2. 后台执行插件升级(自动运行数据库更新)
  3. 重建缓存
注意: 升级过程会自动检测并添加缺失字段,无需手动操作数据库。

解决无法使用 PAYPAL 进行支付购买积分和文件的问题。​

1.​

  • 新增功能:资源购买页面现在显示完整的费用明细(基础金额、支付手续费、总费用)
  • 文件修改
    • ResourceItem.php:新增 actionCalculatePurchaseCost() AJAX接口
    • templates.xml:hn_resource_purchase_money 模板添加手续费明细显示区域
    • resource-payment.js:重写为调用AJAX获取实时计算的手续费

2.​

  • 问题:PayPal不支持接收CNY,导致CNY定价的资源无法通过PayPal购买
  • 解决方案:自动将CNY转换为USD后提交给PayPal
  • 文件修改
    • ResourceMoney.php:
      • getCurrencyForPaymentProvider():PayPal强制使用USD
      • convertCurrencyAmount():添加CNY→USD转换逻辑(CNY ÷ 汇率 = USD)
      • getActualExchangeRate():正确返回CNY→USD的汇率

3.​

  • 问题:资源购买手续费为0,无法读取后台配置
  • 原因:匹配方式错误(按provider名称而非payment_profile_id)
  • 修复
    • ResourceMoney.php:calculateTransactionFee() 改为按 payment_profile_id 匹配配置
    • 与积分购买保持一致的配置读取逻辑

4.​

  • 修改:ResourceMoney.php 中以下方法从 protected 改为 public
    • getCurrencyForPaymentProvider()
    • convertCurrencyAmount()
    • calculateTransactionFee()
    • getActualExchangeRate()
  • 目的:允许controller调用这些方法进行实时计算

5.​

  • 删除:resource-payment.js 中所有 console.log() 和 console.error() 调试代码

主要修改文件列表​

  1. PHP后端
    • ResourceMoney.php
    • ResourceItem.php
  2. 前端模板
    • templates.xml(hn_resource_purchase_money 模板)
  3. JavaScript
    • resource-payment.js

用户体验改进​

✅ 资源购买页面显示透明的费用明细
✅ CNY定价资源可通过PayPal购买(自动转换为USD)
✅ 正确计算并显示支付手续费
✅ 货币转换提示显示实际支付金额和汇率
✅ 与积分购买页面保持一致的UI体验

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

🐛​

1.​

  • 问题描述:用户购买过期后,尝试下载过期日期前发布的旧版本时提示"下载权限已过期"错误
  • 根本原因:版本ID传递错误,URL请求 version/5/download 但权限检查使用了 current_version_id(如version 9)
  • 解决方案
    • 重写 ResourceVersion Controller 的 actionDownload() 方法
    • 直接使用请求的版本ID进行权限验证
    • 绕过父类的错误版本检查逻辑
    • 完整实现文件下载流程(外链重定向/单文件/多文件选择)
影响范围
  • ✅ 积分购买用户
  • ✅ 货币购买用户
  • ✅ 混合支付模式
  • ✅ 所有过期策略(永久旧版本访问、宽限期、完全禁止)

2.​

  • 未购买用户:显示静态配置信息(如"购买后 5 天过期")
  • 已购买用户:动态显示倒计时(如"⏰ 还有 4 天到期")
  • 每日自动递减,实时更新剩余天数

3.​

  • 移除"许可状态"中的重复倒计时文本
  • 仅显示状态标签:"✓ 激活中"、"⚠ 已过期(可下载旧版本)"等
  • 删除下载按钮下方的冗余倒计时提示

4.​

  • 所有动态倒计时统一在"访问时长"行显示
  • 避免信息重复,界面更简洁清晰

✅​

  • 过期用户可下载旧版本(版本发布日期 ≤ 过期日期)
  • 过期用户无法下载新版本(版本发布日期 > 过期日期)
  • 积分购买支持旧版下载
  • 货币购买支持旧版下载
  • 混合支付模式支持旧版下载
  • 宽限期用户显示动态倒计时
  • 动态倒计时每日递减
  • 续费逻辑不受影响

📌​

  1. 此更新不影响现有购买记录和数据结构
  2. 续费功能完全兼容,续费后自动延长过期时间
  3. 适用于所有XenForo 2.x + XFRM环境
  4. 建议更新后清除模板缓存

🎯​

  • ✨ 购买过期后仍可下载购买期内的版本
  • ✨ 界面显示更直观,倒计时实时更新
  • ✨ 减少冗余信息,布局更简洁
  • ✨ 三种支付方式体验完全一致
  • 修复事件导出报错:导出查询表名 xf_hn_credits_event → xf_hn_event
  • 修复兑换页面 404:新增 Pub/Controller/Credit.php::actionExchange(),实现兑换入口与处理逻辑
  • 完善兑换页:更新 hn_exchange 模板(余额展示 + 使用说明 + JS 预览计算)
  • 补齐语言包:新增/补全兑换相关 phrases(含 option.hnUsdToCnyRate)
  • 修复安装 XML 报错:清理 phrases.xml 多行 CDATA 为单行;修复 templates.xml 中误插入的重复代码
  • 修复短语 key 非法字符:hn_available: → hn_available
  • 最终校验:_data 下所有 XML 均可正常解析通过
后退
顶部