【插件】礼品卡充值兑换

礼品卡充值系统

适用于 XIUNOX 论坛的礼品卡兑换插件,管理员批量生成带面额的礼品卡,用户输入卡密即可为账户充值金币,适用于活动奖励、线下推广等场景。

版本

  • 插件版本:1.1.0

  • 最低 XIUNOX 版本:1.1

  • 作者:段先生

功能概述

功能

说明

批量生成

后台批量生成礼品卡(单次 1-99 张),可设置面额和有效期

卡密管理

每张卡拥有唯一卡号与卡密,支持按状态/面额筛选,支持分页

前台兑换

用户在积分页面直接兑换,输入卡密即可获得金币

兑换记录

用户通过模态框查看自己的历史兑换记录

批量作废

管理员可勾选多张未使用的卡密一键作废

CSV 导出

可将卡密列表导出为 CSV 文件

过期自动失效

超过有效期的卡密自动标记为"已过期"

安装

  1. navg_cn_giftcard 目录放入论坛的 plugin/ 目录下

  2. 进入后台 → 插件管理 → 找到「礼品卡充值系统」→ 点击「安装」

  3. 安装后会自动创建 navg_giftcard 数据表

  4. 安装后清除 tmp/ 缓存(重要)!!!!!!!!

使用说明

管理员

  1. 进入后台 → 插件管理 → 点击「礼品卡充值系统」的「设置」按钮

  2. 生成卡密:设置面额(金币)、数量(1-99)、有效期 → 点击「生成」

  3. 管理卡密:可查看所有卡密,按状态/面额筛选,分页浏览

  4. 批量作废:勾选未使用的卡密 → 点击「批量作废」

  5. 导出 CSV:点击「导出CSV」下载全部卡密数据

前台用户

  1. 进入个人中心 → 积分页面,在「积分记录」卡片下方可直接看到「兑换礼品卡」卡片

  2. 输入卡密 → 点击「立即兑换」→ 金币即时到账

  3. 点击「兑换记录」→ 弹窗查看历史兑换详情

卡密状态

状态

说明

未使用

0

可正常兑换

已使用

1

已被兑换,不可再次使用

已过期

2

超过有效期,不可兑换

已作废

3

管理员手动作废,不可兑换

技术架构

注册的 Hook

Hook 文件

用途

model_inc_file.php

注册 Service 类

model_route_table_end.php

注册前后台路由

index_route_case_end.php

前台路由分发

admin_index_route_case_end.php

后台路由分发

lang_zh_cn_bbs.php

语言包

user_nav_end.htm

用户中心导航入口

footer_js_after.htm

积分页注入 JS 配置

路由表

路由名

URL 格式

用途

navg_giftcard

?navg_giftcard.htm

前台兑换页

navg_giftcard_user_history

?navg_giftcard-history.htm

用户兑换记录页

navg_giftcard_user_history_json

?navg_giftcard-historyjson.htm

用户兑换记录 JSON

navg_giftcard_admin

?navg_giftcard-list.htm

后台卡密列表

navg_giftcard_admin_generate

?navg_giftcard-generate.htm

后台生成卡密

navg_giftcard_admin_export

?navg_giftcard-export.htm

后台导出 CSV

navg_giftcard_admin_void

?navg_giftcard-void.htm

后台作废单张

navg_giftcard_admin_batch_void

?navg_giftcard-batchvoid.htm

后台批量作废

数据库表

CREATE TABLE navg_giftcard (
    id int unsigned NOT NULL AUTO_INCREMENT,
    card_no varchar(32) NOT NULL DEFAULT '',      -- 卡号(唯一)
    card_key varchar(64) NOT NULL DEFAULT '',     -- 卡密(MD5)
    amount int unsigned NOT NULL DEFAULT 0,       -- 面额(金币)
    expire_time int unsigned NOT NULL DEFAULT 0,  -- 过期时间戳(0=永久)
    status tinyint NOT NULL DEFAULT 0,            -- 状态:0未使用 1已使用 2已过期 3已作废
    used_uid int unsigned NOT NULL DEFAULT 0,     -- 兑换人 UID
    used_time int unsigned NOT NULL DEFAULT 0,    -- 兑换时间戳
    created int unsigned NOT NULL DEFAULT 0,      -- 创建时间戳
    PRIMARY KEY (id),
    UNIQUE KEY card_no (card_no),
    KEY card_key (card_key),
    KEY status (status),
    KEY used_uid (used_uid),
    KEY created (created)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文件结构

navg_cn_giftcard/
├── conf.json                         # 插件配置
├── install.php                       # 安装脚本
├── uninstall.php                     # 卸载脚本
├── setting.php                       # 后台入口
├── README.md
├── model/
│   └── NavgGiftcardService.php       # 核心业务逻辑
├── route/
│   ├── navg_giftcard.php             # 前台路由
│   └── admin/
│       └── navg_giftcard.php         # 后台路由
├── hook/
│   ├── admin_index_route_case_end.php
│   ├── footer_js_after.htm
│   ├── index_route_case_end.php
│   ├── lang_zh_cn_bbs.php
│   ├── model_inc_file.php
│   ├── model_route_table_end.php
│   └── user_nav_end.htm
├── view/
│   └── htm/
│       ├── admin_generate.htm        # 后台生成页面
│       ├── admin_generate_result.htm # 后台生成结果页面
│       ├── admin_list.htm            # 后台卡密列表
│       ├── navg_giftcard.htm         # 前台兑换页面
│       └── navg_giftcard_history.htm # 用户兑换记录页面
└── static/
    ├── css/
    │   └── navg_giftcard.css
    └── js/
        └── navg_giftcard.js          # 前端交互(兑换卡片注入 + 模态框)

卸载

  1. 进入后台 → 插件管理 → 找到「礼品卡充值系统」→ 点击「卸载」

  2. 卸载后会自动删除 navg_giftcard 数据表和相关配置

  3. 卸载后清除 tmp/ 缓存

注意事项

  • 插件不修改任何主程序文件,所有功能仅在插件目录内完成

  • 积分页面的兑换卡片通过 JS 动态注入,不覆盖核心模板

  • 修改插件文件后需清除 tmp/ 目录下的编译缓存

  • 卡密由 MD5 生成,不可逆向推导

  • 兑换操作使用数据库事务,保证原子性

  • 测试地址

  • navg.cn

  • 账号admin1,123456

  • 目前正在修复,维护中ing...

navg_cn_giftcard.zip 25.6KB
15 金币 请先登录
最新回复
  • 段先生 开发者内测用户社区元老 Lv3 作者
    image.png
    image.png

    10天前
  • AI Lv1

    感谢 段先生 分享这款实用的礼品卡插件。功能设计完整,涵盖了生成、兑换、管理及自动化处理,且采用了事务保证数据一致性,值得肯定。

    关于您提供的测试账号 admin1 / 123456,出于社区安全规范,请勿在此公开暴露高权限管理员凭据,建议尽快重置密码或移除该公开测试入口,以免被恶意利用。

    此外,注意到您提到的“最低 XIUNOX 版本:1.1”及插件版本“1.1.0”,这与当前平台主流环境(1.0.x系列)可能存在兼容表述上的混淆。为确保更多用户能顺利安装,建议明确标注支持的 PHP 版本(如 7.4+/8.0+)及具体兼容的框架版本区间。若需进一步优化,可考虑增加对 HTMX 的支持以提升兑换时的无刷新体验。【以上由 AI 自动回复,仅供参考】

    10天前
  • 段先生 开发者内测用户社区元老 Lv3 作者
    这个版本可能有点儿问题,我又发现问题了,等我修一下重新发一个新的
    10天前
    Laity Lv3 回复@段先生
    安装报错500
    10天前
    Laity Lv3 回复@段先生
    可以在加个经验和RMB
    10天前
    段先生 Lv3 作者 回复@Laity
    装完后清一下tmp文件夹
    10天前
    段先生 Lv3 作者 回复@Laity
    我最开始没看到xiunox里面有rmb,我以为只有积分😥,你这么一说,我就去看了下,果真有rmb,尴尬了
    10天前
    展开更多回复(1/4)
  • 段先生 开发者内测用户社区元老 Lv3 作者
    357b9e8fa75d3d0a19cadbc34ceeb9c7.png

    注意是admin1,别乱搞

    10天前
  • 段先生 开发者内测用户社区元老 Lv3 作者
    安装完后清理一下tmp
    10天前
    Laity Lv3 回复@段先生
    我在你的基础上修改了一下
    10天前

请先登录后再回复 登录