Files
thebet365/docs/手动充值功能说明.md
Mars 10485ecfaf feat: 手动充值、邀请码注册与后台管理增强
新增玩家手动充值全流程(收款方式配置、充值下单/审核、钱包上分),
支持邀请码注册、邀请历史与专属返水率;完善后台代理/玩家管理与响应式操作栏,
并补充前台注册、充值页及多语言错误码。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-11 12:20:11 +08:00

9.8 KiB
Raw Blame History

手动充值功能说明文档


一、功能概述

手动充值功能允许玩家通过银行转账或USDT方式进行充值管理员在后台审核并确认充值后系统自动为玩家上分。

核心流程

管理员配置收款方式(银行/USDT
        ↓
玩家选择充值方式,输入金额,上传转账截图
        ↓
生成充值订单状态PENDING 审核中)
        ↓
管理员审核充值记录
   ├─ 批准 → 自动给玩家钱包上分(可调整金额)
   └─ 拒绝 → 记录拒绝原因

二、数据库表结构

payment_methods — 收款方式配置表

字段 类型 说明
id BigInt 主键
method_type VARCHAR(20) 类型:BANK(银行)/ USDT
bank_name VARCHAR(128) 银行名称BANK 类型使用)
account_holder VARCHAR(128) 银行账户名BANK 类型使用)
account_number VARCHAR(128) 银行账号BANK 类型使用)
usdt_address VARCHAR(256) USDT 地址USDT 类型使用)
qr_code_url VARCHAR(500) USDT 二维码图片 URLUSDT 类型使用)
display_name VARCHAR(128) 展示名称
sort_order INT 排序序号,越小越靠前
is_active BOOLEAN 是否启用(管理员可见性)
show_on_player BOOLEAN 是否对玩家展示
created_by BigInt 创建者 ID
created_at / updated_at DateTime 创建/更新时间

deposit_orders — 充值订单表

字段 类型 说明
id BigInt 主键
order_no VARCHAR(64) 订单号(唯一),格式:DEP{timestamp}{random}
player_id BigInt 玩家 ID
payment_method_id BigInt 关联的收款方式 ID
method_type VARCHAR(20) 冗余的类型BANK/USDT便于筛选
amount DECIMAL(18,4) 玩家申报的充值金额
screenshot_url VARCHAR(500) 转账截图 URL
status VARCHAR(20) 状态:PENDING / APPROVED / REJECTED
approved_amount DECIMAL(18,4) 实际批准的金额(批准时写入,可能与申报金额不同)
reviewer_id BigInt 审核人 ID
reviewed_at DateTime 审核时间
reject_reason VARCHAR(500) 拒绝原因
remark VARCHAR(500) 备注
created_at / updated_at DateTime 创建/更新时间

三、管理后台操作

3.1 配置收款方式

入口:管理后台左侧菜单 → 「收款方式」

支持两种类型:

银行转账

  • 填写银行名称(如:工商银行)
  • 填写账户持有人姓名
  • 填写银行账号
  • 设置展示名称(可选)
  • 设置排序、是否启用、是否展示给玩家

USDT 充值

  • 填写 USDT 收款地址
  • 上传 USDT 二维码图片(通过后台媒体库上传,类别为 payments
  • 设置展示名称(可选)
  • 设置排序、是否启用、是否展示给玩家

操作说明

  • Active 开关:控制该收款方式是否启用(管理员可见)
  • Show Player 开关:控制是否在前台展示给玩家
  • 一个收款方式可以同时启用但不展示给玩家(用于暂停充值)
  • 支持创建多个同类型的收款方式

3.2 审核充值订单

入口:管理后台左侧菜单 → 「充值审核」

列表功能

  • 显示所有充值订单,包含:订单号、玩家、收款方式类型、金额、截图、状态、批准金额、审核人、时间
  • 支持按状态筛选(全部/待审核/已批准/已拒绝)
  • 支持按类型筛选(全部/银行/USDT
  • 支持按玩家用户名搜索
  • 点击截图缩略图可放大查看

批准操作

  1. 点击订单行的「Approve」按钮
  2. 在弹窗中查看截图
  3. 系统默认填入玩家申报的金额,管理员可根据截图实际情况调整金额
  4. 可选填写备注
  5. 点击「Confirm Approve」确认

批准后自动执行

  • 订单状态变为 APPROVED
  • 系统自动调用钱包充值服务,将批准金额添加到玩家可用余额
  • 生成一条钱包交易记录,类型为 PLAYER_DEPOSIT
  • 记录审核人和审核时间

拒绝操作

  1. 点击订单行的「Reject」按钮
  2. 在弹窗中必须填写拒绝原因
  3. 点击「Confirm Reject」确认

拒绝后

  • 订单状态变为 REJECTED
  • 记录拒绝原因和审核人
  • 玩家不会收到任何资金

四、玩家端操作

4.1 充值入口

  • 玩家登录后,进入「账单」页面
  • 顶部有一个「+ 充值」按钮,点击进入充值页面
  • 或直接访问 /wallet/recharge

4.2 充值流程

  1. 选择充值方式顶部有「银行转账」和「USDT」两个标签切换
  2. 选择收款账户:系统展示管理员配置的可用收款方式列表,点击选中
  3. 查看收款信息
    • 银行转账:显示银行名称、账户持有人、银行账号(支持点击复制)
    • USDT显示 USDT 地址(支持点击复制)和二维码图片
  4. 输入充值金额:输入实际转账的金额
  5. 上传转账截图
    • 点击上传区域选择图片
    • 前端自动压缩图片(目标大小 ≤1MB最大分辨率 1920px
    • 原文件限制 10MB压缩后限制 5MB
    • 支持预览和删除已选截图
  6. 提交充值:点击提交按钮,系统创建充值订单
  7. 成功提示:显示订单号,提示等待管理员审核

4.3 查看充值记录

  • 充值页面右上角有「记录」链接,或访问 /wallet/recharge/history
  • 显示所有充值订单列表,每条订单显示:
    • 收款方式类型标签
    • 充值金额
    • 状态(审核中/已通过/已拒绝)
    • 收款方式名称、提交时间
    • 如果批准金额与申报金额不同,显示「实际到账」金额
    • 如果被拒绝,显示拒绝原因
  • 支持下拉刷新

五、API 接口列表

管理后台接口

方法 路径 权限 说明
POST /admin/payment-methods deposit.manage 创建收款方式
GET /admin/payment-methods deposit.manage 查看所有收款方式
PUT /admin/payment-methods/:id deposit.manage 更新收款方式
DELETE /admin/payment-methods/:id deposit.manage 停用收款方式(软删除)
GET /admin/deposit-orders deposit.review 分页查看充值订单
POST /admin/deposit-orders/:id/approve deposit.review 批准充值订单
POST /admin/deposit-orders/:id/reject deposit.review 拒绝充值订单

充值订单列表查询参数

  • page — 页码(默认 1
  • pageSize — 每页数量(默认 20最大 100
  • status — 状态筛选:PENDING / APPROVED / REJECTED
  • keyword — 玩家用户名关键词
  • methodType — 类型筛选:BANK / USDT
  • dateFrom / dateTo — 日期范围ISO 格式)

批准充值订单请求体

{
  "approvedAmount": 100.00,  // 可选,不传则使用玩家申报金额
  "remark": "备注信息"        // 可选
}

拒绝充值订单请求体

{
  "reason": "截图金额与申报金额不符"  // 必填
}

玩家端接口

方法 路径 认证 说明
GET /player/payment-methods 需要 查看可用的收款方式列表
POST /player/deposit-orders 需要 提交充值订单multipart/form-data
GET /player/deposit-orders 需要 查看自己的充值记录

提交充值订单multipart/form-data

  • paymentMethodId — 收款方式 ID
  • amount — 充值金额
  • screenshot — 转账截图图片文件(最大 5MB仅接受图片类型

查看收款方式请求参数

  • methodType — 可选,筛选类型:BANK / USDT

六、文件存储

充值相关截图存储在 uploads/deposits/ 目录下,文件命名格式:{timestamp}-{random8}.{ext}

USDT 二维码图片通过管理员上传接口上传,存储在 uploads/payments/ 目录下。

上传大小限制

  • 管理员上传USDT 二维码5MB
  • 玩家上传充值截图5MB前端压缩后原文件 10MB

七、错误码

错误码 说明
INVALID_METHOD_TYPE 无效的收款方式类型
PAYMENT_METHOD_NOT_FOUND 收款方式不存在或已停用
ORDER_NOT_FOUND 充值订单不存在
ORDER_NOT_PENDING 订单不是待审核状态
REASON_REQUIRED 拒绝原因为必填项
SCREENSHOT_REQUIRED 转账截图为必填项
FILE_MUST_BE_IMAGE 必须上传图片文件
INVALID_AMOUNT 金额无效
PAYMENT_METHOD_REQUIRED 未选择收款方式

八、权限配置

新增两个后台权限码,需要在数据库中通过种子数据或手动添加到 permissions 表:

权限码 说明
deposit.manage 管理收款方式
deposit.review 审核充值订单

并将这些权限分配给需要操作充值功能的管理员角色(通过 role_permissions 表关联)。


九、注意事项

  1. 金额调整:批准充值时,管理员可以调整实际充值金额。当玩家输入的金额与截图显示的不一致时,以截图为准进行调整。
  2. 并发审核:批准操作在数据库事务中执行,会检查订单状态是否为 PENDING,防止多人同时审核同一笔订单。
  3. 停用收款方式:删除操作为软删除(设置 isActive=falseshowOnPlayer=false),不会删除历史记录。
  4. 截图审核:管理员应仔细核对截图中的转账金额、时间、收款账户是否与配置的收款方式一致。
  5. 前端图片压缩:使用 browser-image-compression 库在浏览器端压缩图片,减少上传时间和服务器存储压力。