游戏陪玩点单下单系统-陪玩类系统-h5和app端均支持

游戏陪玩点单下单系统-陪玩类系统-h5和app端均支持-青狐资源网
游戏陪玩点单下单系统-陪玩类系统-h5和app端均支持
此内容为付费资源,请付费后查看
会员专属资源
您暂无购买权限,请先开通会员
付费资源
已售 365

视频说明及搭建教程:

目前系统内置的模板是游戏行业陪玩,也可以自己改下成其他行业也可以。

陪玩点单系统(原生 PHP + MySQL)

一套可直接部署上线的游戏陪玩点单平台:用户点单 → 陪玩接单 → 服务完成 → 平台抽成分账,带钱包资金体系(充值 / 提现 / 流水 / 冻结)与完整管理后台。

  • 后端:原生 PHP(PDO 预处理,无 Composer 依赖,虚拟主机/宝塔直接跑)
  • 数据库:MySQL 5.7+ / 8.0(InnoDB、utf8mb4)
  • 前端:服务端渲染 HTML + 原生 CSS/JS(无框架、无构建步骤)
  • 路由:index.php?r=控制器/方法(不需要 URL 重写,兼容所有主机)

快速验收(三步,约 5 分钟)

步骤做什么期望结果
1上传代码 → 运行目录指向 public/ → 访问 /install.php环境自检全绿 → 填数据库、站点名称、管理员账号 + 强密码、自定义后台入口 → 建 20 张表并写入初始游戏与设置
2用安装时设置的后台入口登录(默认 /admin/index.php;改了名字就是 /你的名字/index.php),再访问 /check.php语法、SQL 占位符、路由三项显示 PASS;数据库 20 张表齐全;安全项只剩”删除自检文件”类提示
3同一后台登录状态下访问 /selftest.php → 点「开始自检」30+ 条资金链路断言全部「通过」(下单→支付→接单→完成→分账→评价→退款→后台代客下单(自定义金额/立即支付/余额不足回滚)→提现→打款/驳回→调账 + 防护类断言),跑完自动清理临时数据

可选:访问 /demo.php 一键生成演示数据(3 位陪玩、待审核陪玩、2 位买家、4 笔不同状态订单、待确认充值单、待审核提现单),用来逐个体验后台审核流程;同页可一键清除。

安装向导的安全设计(针对”默认入口 + 弱密码被爆破”)

  • 管理员密码强制强度:至少 8 位、必须同时包含字母与数字,并挡掉 123456/admin123/password 等常见弱口令(也不允许与账号相同);向导里可一键「随机生成强密码」并自动复制到剪贴板
  • 后台入口可改名:向导里填 manage8x 之类的名字,安装时会自动把 public/admin 改名为 public/manage8x,并把 security.admin_path 写入 config/config.php;此后默认的 /admin/ 直接返回 404(public/admin/index.php 里有校验,所以以后更新时误传回来的 admin/ 目录也不会变成绕过入口)
  • 改名失败不会把站搞挂:只有确认 config 可写才动目录;目录改名或配置写入失败都会自动回滚到原入口,并在向导结果页用黄条说明原因
  • 事后想换入口:把 public/旧名字 改名为 public/新名字,再把 config/config.php 里 security.admin_path 改成同一个名字(两处必须一致)
  • 安装完请删除或重命名 install.php(向导结果页也会提醒)

上线前务必:删除 install.php / check.php / selftest.php / demo.php,并把 config/config.php 的 app.debug 保持为 false(安装向导默认写入 false)。


一、功能清单

前台(用户端)

模块说明
注册登录账号/手机号登录、注册、退出;可选邮箱验证码注册、邮箱找回密码;CSRF 防护、密码 password_hash 加密
找陪玩瀑布流列表 + 无限下滑加载,显示头像、简介、评分、在线/离线标记(在线排最前),支持按游戏、性别、价格区间、关键词、只看接单中筛选,综合/接单量/评分/价格排序;审核通过的陪玩即使还没上架服务也会显示(价格显示「面议」)
底部导航首页 / 陪玩 / 接单 / 订单 / 我的 五个 Tab;「接单」只对陪玩身份显示,手机上固定底部、桌面端为居中悬浮条
接单大厅陪玩在此抢单:任务卡片含配图、标题、需求、预计收入,一键「立即接单」后订单归属自己并进入服务中
个人中心头像/身份/信用分、钱包余额与冻结、订单四宫格、陪玩收益卡、快捷入口九宫格(编辑资料/钱包/流水/我的工单/陪玩中心/接单大厅/我的接单/成为陪玩/后台/退出);编辑资料里可改密码(需填写当前密码);陪玩可在「接单状态」自助上线/下线;底部「成为陪玩能做什么」文案由后台维护
首页广告位顶部轮播广告(后台按排序取启用中的图,最多 10 张):自动轮播(间隔后台可配)、圆点切换、桌面悬停暂停、手机可左右滑
直接点单后台预置的一口价套餐列表:点「立即下单」即从余额扣款建单,付款后订单进接单大厅等陪玩抢单;余额不足会引导先充值
订单内聊天接单后下单方与陪玩在订单详情页对话;未读红点、自动刷新;后台订单详情可查看完整交流记录并以「客服」身份介入
公告栏(走马灯)顶部公告栏按后台设定的间隔上下滚动一条,可带跳转链接、悬停暂停;没有公告时回落到「平台设置 → 站点公告」的文案
在线咨询(工单)右下角悬浮按钮点开即卡片:售前咨询 / 售后问题 / 投诉建议;AJAX 提交后进「我的工单」与客服对话追问、可自行关闭;订单详情页也有「遇到问题?提交工单」并自动带上订单
陪玩主页资料、标签、评分好评率、服务项目列表、用户评价,直接选择服务下单
下单选择数量(小时/局/天/一口价)自动算价、填写备注、生成订单
支付钱包余额支付,金额由平台托管(未结算给陪玩)
我的订单全部/待支付/待接单/服务中/待确认/已完成/退款/已关闭,状态操作:支付、取消、退款、确认完成
评价订单完成后 1~5 星评分 + 标签 + 内容,支持匿名
钱包余额、冻结金额、累计充值/收入/提现/消费、资金流水明细
充值金额快捷选择、上传转账凭证;支持在线支付(易支付)或人工审核入账
提现申请提现(先冻结)、手续费试算、支付宝/微信/银行卡收款信息
陪玩入驻提交实名/手机/城市/标签/介绍,等待平台审核
陪玩中心收益统计(今日/累计)、待处理订单、一键上下线、技能管理(增删改/上下架)、我的接单

后台(管理端,/admin/)

模块说明
数据概览成交额、平台收入(订单抽成 + 提现手续费)、订单数、用户/陪玩数、今日充值提现、待处理事项、订单状态分布
订单管理多条件筛选、订单详情、状态流转时间线、同意/驳回退款、强制完成结算、关闭并退款、手动执行自动任务、代客下单(可自定义单价与金额、可选立即余额支付)、按筛选导出 CSV 对账、订单交流记录审查(可发「客服」消息介入)
用户管理检索、禁用/启用、详情、一键设为陪玩、设为/取消管理员(防锁死:不能取消自己与最后一个管理员)、重置任意账号的登录密码(含管理员,带随机生成)、人工调整余额(写流水与日志)
账号设置管理员改自己的登录账号、昵称、邮箱、手机号与密码;改账号或改密码都需先验证当前密码。入口在后台右上角「账号设置」与侧边栏
陪玩管理入驻审核(通过/拒绝+备注)、设为推荐、取消陪玩资格(下架全部技能)
充值审核确认到账(自动加余额)、驳回、关闭,凭证查看
提现审核已打款(扣减冻结 + 累计提现)、驳回(自动解冻回余额)、导出打款清单 CSV(含收款账号,方便批量转账)
评价管理显示/隐藏评价,隐藏后自动重算陪玩评分与好评率
游戏管理游戏分类增删改、热门标记、启用停用
技能管理全站陪玩技能列表(按游戏/状态筛选),后台可代任意陪玩新增/编辑服务项目并设定价格,上架/下架、删除(已被订单引用的技能只能下架,保留历史可追溯)
平台设置站点名称/公告/客服、抽成比例、最低提现、提现手续费、支付超时、自动确认时长、入驻是否需审核、验证方式(邮箱/短信)+ SMTP + 阿里云短信配置(含测试邮件/测试短信)、运营展示(公告走马灯与广告轮播间隔、成为陪玩的说明文案)
支付设置人工转账 / 易支付 / 支付宝官方(电脑网站支付 · 手机网站支付 · 当面付);回调地址可一键复制,支持本地检测支付宝密钥,资金入账只认验签通过的回调
工单管理售前 / 售后 / 投诉三类,按状态与关键词筛选,详情页回复用户并可变更状态(待处理/处理中/已解决/已关闭);侧边栏显示待处理红点
公告管理公告的新增/编辑/删除/启停与排序,前台顶部走马灯滚动;可给公告配跳转链接;滚动间隔在「平台设置 → 运营展示」里改
广告管理首页轮播广告图的上传/编辑/删除/启停与排序(删除时同时清理图片文件);跳转链接选填(不填就是纯展示图,只填域名会自动补 https);轮播间隔同样在「运营展示」里改
点单套餐后台预置一口价单子(如「王者荣耀 陪玩 5 小时」150 元、「三角洲行动 保 100 万」80 元),含配图与说明;普通用户在前台「直接点单」一键下单,付款后订单自动进接单大厅由陪玩抢单
操作日志所有后台操作留痕(操作人、详情、IP、时间)

二、目录结构

项目根目录/
├── app/                        应用代码(HTTP 不可访问)
│   ├── bootstrap.php           引导:配置、自动加载、异常兜底
│   ├── helpers.php             全局函数(url/e/view/pager 等)
│   ├── Router.php              路由
│   ├── View.php                视图渲染
│   ├── Db.php                  PDO 封装 + 事务
│   ├── Expr.php                SQL 原子表达式(字段自增)
│   ├── Auth.php                登录态/权限
│   ├── Csrf.php                CSRF
│   ├── Setting.php             平台设置
│   ├── Wallet.php              钱包(收入/支出/冻结/解冻/流水)
│   ├── OrderService.php        订单状态机 + 分账
│   ├── CompanionService.php    陪玩检索/入驻/技能/评分
│   ├── Upload.php              图片上传
│   ├── Epay.php                易支付适配器(可扩展微信/支付宝)
│   ├── Controllers/            前台控制器
│   │   └── Admin/              后台控制器
│   └── views/                  视图
│       ├── layouts/            layout.php(前台)/ admin.php(后台)
│       ├── partials/           分页、订单操作按钮
│       ├── admin/              后台视图
│       └── ...                 前台视图
├── config/
│   ├── config.php              实际配置(install.php 会写入)
│   └── config.sample.php       配置示例
├── public/                     ★ 站点根目录(Web 运行目录指向这里)
│   ├── index.php               前台入口
│   ├── admin/index.php         后台入口
│   ├── install.php             安装向导(装完请删除)
│   ├── assets/css|js           样式与脚本
│   └── uploads/                上传文件(头像、凭证)
├── cron/auto.php               定时任务:关闭超时订单 + 自动确认
└── sql/schema.sql              数据表结构 + 初始数据

三、部署步骤

环境要求

  • PHP ≥ 7.4(推荐 8.0/8.1),扩展:pdo_mysql、mbstring、(上传图片建议)fileinfo
  • MySQL ≥ 5.7(推荐 8.0)
  • Apache / Nginx / IIS 均可

方式 A:宝塔面板(推荐)

  1. 新建站点 → PHP 选 7.4+ → 创建数据库(记住库名/用户/密码)
  2. 上传整个目录到站点根目录,例如 /www/wwwroot/peiwang
  3. 站点设置 → 网站目录 → 运行目录 改为 /public(必须,否则源码可被下载)
  4. 目录权限:config/ 需可写(安装时写入配置),public/uploads/ 需可写
  5. 浏览器访问 http://你的域名/install.php,按向导填写数据库与管理员信息

方式 B:虚拟主机

  1. 上传全部文件
  2. 若无法修改运行目录,可把 public/ 里的文件移到网站根目录,并同步修改:
    • public/index.php 中 require dirname(__DIR__) . '/app/bootstrap.php' → 改成 require __DIR__ . '/../app/bootstrap.php' 前请保持 app 在网站根目录上一级;
    • 更简单的做法:把 app/、config/、sql/、cron/ 放在根目录,public/* 内容也放到根目录,并把 public/admin/index.php 里的 dirname(__DIR__, 2) 改为 dirname(__DIR__)。
  3. 访问 /install.php 安装

Nginx 配置

直接抄 deploy/nginx.conf.example(含 HTTPS 版本、上传目录禁执行脚本、后台限制来源 IP 等注释开关)。核心是一句话:root 指向项目的 public 目录。

方式 C:本地开发(PHP 内置服务器)

cd public
php -S 127.0.0.1:8080
# 浏览器打开 http://127.0.0.1:8080/install.php

装完先跑一次自检(强烈建议)

浏览器访问 http://你的域名/check.php,它会做四件事:

  1. 用 PHP 内置语法解析器检查全部 PHP 文件(等价于 php -l,不需要命令行权限)
  2. 逐个提取 Db::one/all/value/query 的 SQL 与绑定参数,核对 ? 占位符个数与参数个数是否一致
  3. 扫描全项目 url('控制器/方法'),核对是否都有对应的控制器方法
  4. 检查 PHP 版本/扩展/目录可写、数据库连接与 20 张表结构、列出上线前必须处理的安全项;与 sql/schema.sql 对比后缺表/缺字段会直接告诉你(升级时到 install.php 会自动补齐)

权限:系统装好后本页只对已登录的管理员显示完整报告;未安装(或未登录)时只显示语法与环境检查,不会泄露数据库名、表结构与服务器路径。所以请先登录后台再访问。

确认无误后请删除 public/check.php 和 public/install.php。

想先看看有数据的样子?(可选)

管理员登录后台后访问 http://你的域名/demo.php,一键生成 3 位陪玩(含技能)、1 位待审核陪玩、2 位有余额的买家、4 笔不同状态的订单、1 笔待确认充值单、1 笔待审核提现单,方便逐个体验后台审核流程。演示账号用户名都以 demo_ 开头(统一密码 demo123456),同页面可一键清除。

再跑一次业务自检(验证资金链路)

用管理员登录后台后,浏览器访问 http://你的域名/selftest.php。它会自动创建两个临时账号,把
下单 → 余额支付 → 接单 → 提交完成 → 确认 → 平台抽成分账 → 评价与评分重算 → 取消退款 → 提现申请(冻结) → 后台打款 → 驳回解冻 → 人工调账 → 非法流转拦截
全流程跑一遍,逐条输出「通过/失败」和实际金额,结束后自动删除自己创建的全部数据。全部显示「通过」就说明资金逻辑正确。

目录权限(Linux)

chmod -R 755 /www/wwwroot/peiwang
chmod -R 775 /www/wwwroot/peiwang/config /www/wwwroot/peiwang/public/uploads
chown -R www:www /www/wwwroot/peiwang

四、安装后的首次测试流程

  1. 访问安装向导,创建管理员(例如 admin / admin123456)
  2. 前台注册一个普通用户(买家)和一个陪玩账号(卖家)
  3. 陪玩账号登录 → 「成为陪玩」提交入驻资料
  4. 管理员登录 /admin/index.php → 陪玩管理 → 审核通过
  5. 陪玩进入「陪玩中心 → 技能管理」上架服务(选游戏、服务类型、价格)
  6. 买家在前台找到该陪玩 → 选服务 → 下单 → 我的订单 → 立即支付
    (余额不足先到「钱包 → 充值」,人工渠道时由管理员在后台「充值审核 → 确认到账」)
  7. 陪玩「我的接单 → 立即接单 → 提交完成」
  8. 买家「确认完成」→ 系统按抽成比例结算给陪玩(可到钱包流水查看)
  9. 买家评价 → 陪玩在订单详情回复
  10. 陪玩「钱包 → 提现」→ 管理员后台「提现审核 → 已打款 / 驳回」

五、订单状态机

值状态说明可执行操作
1待支付下单后未支付,超时自动关闭支付、取消
2待接单已支付,等待陪玩接单陪玩接单、用户取消(全额退款)
3服务中陪玩已接单陪玩提交完成、用户申请退款
4待确认陪玩已提交完成用户确认完成(触发结算)、自动确认、申请退款
5已完成已结算:平台抽成 + 陪玩入账评价
6退款中用户发起退款,等平台处理后台同意(退款)/ 驳回(回到待确认)
7已关闭未支付被取消/超时—
8已退款金额已退回用户余额—

资金流向:下单支付 → 从用户余额扣除(平台托管)→ 订单完成 → 按 platform_fee_rate 抽成,其余进陪玩余额 → 陪玩申请提现(冻结)→ 后台打款(扣冻结、累计提现增加)。


六、定时任务(重要)

用于关闭超时未支付订单、自动确认已完成的订单:

# 宝塔面板 → 计划任务 → Shell 脚本,每 5 分钟执行一次
php /www/wwwroot/peiwang/cron/auto.php

不支持 CLI 的主机可以在 config/config.php 的 app 节点加一个密钥:

'app' => [
    // ...
    'cron_key' => '自行生成一串随机字符',
],

然后定时访问:https://你的域名/cron/auto.php?key=你的随机字符

也可以在后台「数据概览 → 立即执行自动任务」手动触发一次。


七、支付与提现配置

支付渠道在后台「支付设置」里可视化配置(三个渠道任选其一,参数没配完整会自动退回人工转账):

渠道说明需要填的参数
人工转账用户在充值页提交金额与凭证,客服在「充值审核」确认到账无需参数
易支付跳转第三方收银台(微信/支付宝),彩虹易支付协议网关地址、商户ID、商户密钥
支付宝官方电脑网站支付 / 手机网站支付 / 当面付预下单,RSA2 公钥模式APPID、应用私钥、支付宝公钥、网关、(收款方式)

回调地址在「支付设置」页可直接复制:

  • 易支付:异步通知 index.php?r=pay/notify,同步跳回 index.php?r=pay/back
  • 支付宝:异步通知 index.php?r=pay/alipayNotify,同步跳回 index.php?r=pay/alipayReturn

关键实现说明:

  • app/Alipay.php:自己实现 RSA2 签名(openssl_sign + SHA256)、alipay.trade.page.pay / wap.pay / precreate / trade.query,以及异步通知验签
  • 资金入账只认验签通过的异步通知或交易查询结果,且只有 status = 0 的充值单能入账(重复通知/重复点击不会重复到账)
  • 当面付返回的 qr_code 会在支付页展示成可点击、可复制的链接;若把任意二维码 JS 库(如 qrcode-generator)放到 public/assets/js/ 并在页面引入,该页会自动把链接渲染成二维码
  • 「支付设置 → 测试支付宝密钥」只做本地检测(私钥能否签名、公钥能否解析),不发起真实交易
  • config/config.php 的 pay 节点仍作为兼容回落(后台没配时才会用到)
  • 提现默认是「线下打款 + 后台审核」,平台拿到用户收款账号后人工转账并在后台点「已打款」,也可导出打款清单 CSV

八、安全建议(上线前必做)

  1. 删除 public/install.php(或改名)
  2. config/config.php 中 app.debug 改为 false
  3. 运行目录务必指向 public/,app/、config/、sql/ 已带 .htaccess 拒访(Nginx 用户请自行加 location ~ ^/(app|config|sql)/ { deny all; })
  4. 修改后台入口路径(可把 public/admin 目录改名,例如 manage)
  5. 上传目录禁止执行 PHP(public/uploads/.htaccess 已配置)
  6. 定期备份数据库(companion_orders、wallet_transactions 是核心账目表)
  7. 配置 HTTPS,并把 config 的 app.url 写成 https 地址

九、合规红线(做国内陪玩业务必须注意)

  • 实名 + 年满 18 周岁校验,禁止未成年人下单或接单
  • 严禁擦边、涉黄、涉赌内容;语音/图片/文字建议接入内容审核(阿里云/腾讯云内容安全)
  • 禁止外挂代练、代打他人账号等违规服务,需在协议中明确
  • 资金流水、订单、聊天记录按规定留存,配合监管
  • 平台需具备相应经营资质,具体以当地监管要求为准

十、后续可扩展方向

  • IM 聊天与语音房(融云/环信/腾讯云 IM + 声网/腾讯 RTC)
  • 优惠券、首单立减、邀请返利、任务体系
  • 公会/工作室体系(招募、分成、保证金)
  • 派单大厅与竞价抢单、智能匹配排序
  • 退款申诉工单、客服系统
  • 支付宝/微信官方支付 + 自动分账、资金对账
  • 数据看板(留存、转化、复购、陪玩活跃度)

十一、已知限制

  • 提现为线下打款 + 后台审核,不代发工资(需对接企业付款接口才能自动打款)
  • 实名认证目前是人工审核资料,未接三方实名/人脸核验
  • 未实现聊天功能,买卖双方联系方式通过订单详情线下沟通
  • 未做支付对账定时任务;后台「订单管理」「提现审核」支持按当前筛选条件 导出 CSV(带 UTF-8 BOM,Excel 可直接打开),财务可据此核对账目与批量打款

十二、代码审查与修复记录

代码经过 5 轮独立静态审查(核心库与服务层 / 前后台控制器 / 视图与前端资源 / SQL 与表结构 / 新增自检脚本)+ 后续多轮针对性复核(类名解析与 import 一致性、闭包变量作用域、状态机可达性、SQL 占位符),发现的问题已全部修复,可用 check.php + selftest.php 复验。主要修复如下:

会导致功能不可用或白屏

#问题修复
1后台 7 个列表页「上一页/下一页」指向前台入口(404 或跳到前台页面)query_url() 按 SCRIPT_NAME 识别前后台,自动改用 admin_url()
2布局文件拿不到 $title,所有页面标题失效View::render() 在 include 布局前 extract($data)
3未登录访问不存在的后台路由 → 后台布局对 null 取下标报警告布局空值安全 + abort() 在后台区域未登录时引导到后台登录页
4评价标签被静默丢弃(表单提交 tags[],控制器用 input_str)改用 input_arr() + implode(',')
5用户「申请退款」没有任何入口,退款流程走不通订单详情页新增退款表单(状态 2/3/4 可用)
6管理员在前台订单详情看到用户操作按钮,点击必然报错管理员改为显示「到后台处理该订单」入口
7配置目录下两个配置文件都缺失时直接白屏bootstrap.php 在 require 前判断并输出安装引导

资金与状态机(重点修复)

#问题修复
8超时订单在事务内先改状态再抛异常 → 回滚,订单实际没关闭,却提示用户”已关闭”拆成「独立事务关闭并提交」+「事务外抛错」
9退款驳回固定回到「待确认」,从「服务中」申请的单会跳过陪玩提交完成这一步新增 orders.refund_from_status 记录申请前状态,驳回时原样退回
10refund() / settle() 是 public 且无前置状态校验 → 可对已完成订单重复退款、重复分账两个方法内加状态断言(只有 2/3/4/6 可退款,只有 4 可结算)
11cancel() 只对 user 校验归属 → 传 companion 可关他人订单/触发他人退款operatorType 白名单 + 陪玩归属校验
12数据库事务不支持嵌套,内层 commit 会提交外层Db 加事务层级计数,只有最外层真正提交/回滚
13unfreeze()/deductFrozen() 用 max(0, ...) 静默吞掉超额解冻 → 差额凭空变成余额(造币)改为抛出「冻结金额不足」异常
14已驳回/已关闭的充值单仍可被改判为「到账」并再次入账只有 status = 0 的单据可处理;支付回调同样只对 status = 0 入账
15后台「强制完成 / 关闭并退款」按钮与状态机冲突(服务中订单后台无解)confirm() 允许后台把「服务中」推进到「待确认」再结算;新增 adminRefund() 供后台强制退款关闭
16wallet_income 口径、total_withdraw 等统计未在事务内统一在 Db::tx 内完成

安全

#问题修复
17redirect_back() 开放重定向(跨站 POST 可把用户 302 到外站)仅同源(Host 相同)才跳转,否则回落到默认页
18CSRF 令牌允许从 $_GET 读取(会进 URL/Referer)仅接受 POST 提交的令牌
19Auth 登录 SQL 用 phone <> "",ANSI_QUOTES 模式下登录 500改为 phone <> ''
20Upload::image() 的 $subdir 未过滤 ..加白名单正则校验
21易支付回调未校验 trade_status(非成功通知也会入账)、trade_no 未截断校验 TRADE_SUCCESS + mb_substr(...,0,64)
22充值凭证先落盘再校验金额,非法金额留下孤儿文件金额校验提前到上传之前

结构与健壮性

#问题修复
23CREATE TABLE IF NOT EXISTS 无法给旧库补字段,升级必然 1054 报错新增 app/SchemaSync.php:以 sql/schema.sql 为准自动补齐缺失字段与索引(幂等,install.php 升级时自动执行)
24关键词搜索未转义 %/_ 通配符新增 like_escape(),前台检索与后台列表统一使用
25companion_need_audit=0 时角色变陪玩但审核状态仍是待审核 → 搜不到也接不到单提交即置为「已通过」
26CompanionService::audit() 未校验状态取值;后台取消陪玩资格不检查进行中订单加状态白名单 + 进行中订单校验
27下单未校验游戏是否停用、陪玩是否休息中;订单与日志不在同一事务补校验 + Db::tx 包裹
28自动任务返回值包含未实际处理的订单只有真正处理成功才计数
29orders 缺 expire_at / finish_time 索引,cron 全表扫描schema 补 idx_expire、idx_finish(SchemaSync 会自动补到旧库)

自检工具自身的问题(第二轮审查发现并修复)

#问题修复
30check.php 完全无鉴权,匿名访客可看到数据库主机/库名、表清单、DOCUMENT_ROOT 与 debug 状态装好后仅管理员可见完整报告;未安装时只显示语法与环境检查
31demo.php 用 username LIKE 'demo\_%' 识别演示数据 → 真实用户 demo_king 会被连带删除改为写死演示用户名白名单
32demo.php / selftest.php 清理时用 user_id IN (…) OR companion_id IN (…),会删掉真实买家与演示陪玩之间的订单改为 AND(只清理双方都是演示/自检账号的订单)
33selftest.php 断言「流水 ≥ 4 条」在该时点实际只有 3 条 → 必然误报失败改为 ≥ 3 并把口径写进提示文案
34selftest.php 第二次提现金额固定,余额不足时会抛异常导致整轮测试中断金额改为 min(申请额, 当前余额),不足则走跳过分支
35selftest.php 用 GET 触发(建数据+删数据),被抓取/<img src> 预取即误跑改为必须 POST + CSRF(页面按钮触发),GET 只显示说明页
36demo.php 生成演示数据无事务,中途失败留下半套数据;重复生成触发用户名唯一键冲突生成过程包 Db::tx()(全有或全无)+ 生成前自动清理旧演示数据
37易支付回调自己写一套入账逻辑,与后台审核规则分叉(已关闭/已驳回的单仍会入账)回调改调用 FinanceService::auditRecharge(),规则收敛到一处
38check.php 的目录迭代遇不可读子目录会抛异常导致自检页白屏遍历包 try/catch 跳过
39createRecharge() 不校验渠道与用户是否存在加渠道白名单 + 用户存在性校验
404 个独立入口都定义了 h(),将来与 helpers.php 冲突会 fatal统一加 if (!function_exists('h')) 保护

能力补齐与口径修正

#事项处理
41后台缺少「技能管理」(目标要求后台管理”游戏与技能”)新增技能管理页:按游戏/状态/关键词筛选、上架/下架、删除;已被订单引用的技能只允许下架,保留历史可追溯
42升级模式下跳过全部 INSERT,将来新增的平台设置项不会被补进旧库升级时仍执行 INSERT IGNORE INTO settings(只补缺失项),仅跳过游戏等初始数据
43提现手续费只存在于 withdraw_orders.fee,在概览上看不到数据概览改为「平台收入 = 订单抽成 + 提现手续费」,两项分开展示
44自检里因平台设置被跳过的检查项,此前按”通过”计入汇总单独统计并显示为「跳过」,汇总显示为 X / Y(跳过 N)
45README 里承认”没有对账导出”这一限制后台订单列表与提现审核页新增 导出 CSV(沿用当前筛选条件,最多 5000 条,写操作日志)
46orders.skill_id 无索引,技能管理页的”订单数”子查询会全表扫描schema 补 idx_skill (skill_id)(升级时由 SchemaSync 自动补)

审查同时确认:全部 SQL 的 ? 占位符与绑定参数数量一一对应(95 条语句逐条核对)、表名与列名与 schema 完全一致、无 PHP 8 专属语法(兼容 7.4)、FOR UPDATE 均在事务内、分账恒等(platform_fee + companion_income = amount)。

未修复但已知晓(影响很小,供后续决定):登出为 GET 链接(可被 <img> 触发登出);少数写接口在 AJAX 下返回 302 而非 JSON(当前前端仅验证码接口用 AJAX);on duplicate key update ... values() 在 MySQL 8.0.20+ 有弃用警告;wallet_transactions 里没有单独的「平台抽成」流水(抽成只记在 orders.platform_fee,后台概览已汇总)。


十三、验证方式配置(邮箱验证码 / 手机短信验证码)

后台可以分别为「注册」和「找回密码」选择验证方式:关闭 / 邮箱验证码 / 手机短信验证码(平台设置 → 验证方式)。渠道没配置完整时会自动按「关闭」处理,避免用户卡在收不到码的页面。

邮箱验证码(SMTP)

后台「平台设置 → 邮箱 / SMTP」填写:

  • SMTP 服务器:smtp.qq.com、smtp.163.com、smtp.exmail.qq.com 等
  • SMTP 端口:SSL 用 465,STARTTLS 用 587
  • SMTP 加密方式:ssl / tls / none
  • SMTP 账号:你的邮箱地址
  • SMTP 密码 / 授权码:QQ、163 邮箱必须填「授权码」(在邮箱设置里开启 SMTP 服务后生成),填登录密码会认证失败
  • 发件人邮箱 / 名称:留空则使用 SMTP 账号与站点名称
  1. 保存后点「发送测试邮件」验证配置(收不到先看垃圾箱)。
  2. 到「验证方式」里把「注册验证方式」「找回密码验证方式」选成 邮箱验证码。

手机短信验证码(阿里云)

后台「平台设置 → 短信(阿里云)」填写:AccessKeyId / AccessKeySecret / 短信签名 / 模板 CODE(模板内容必须包含 ${code}),区域默认 cn-hangzhou;保存后可用「发送测试短信」验证,然后在「验证方式」里把对应环节选成 手机短信验证码。

想接其他短信服务商(腾讯云、容联云等),在 app/Sms.php 的 sendCode() 里加一个 driver 分支即可,其余逻辑(验证码生成、防刷、校验)都已统一在 app/VerifyCode.php。

只有 SMTP 配置完整时,开关才会真正生效;否则注册/找回密码不会要求邮箱验证,后台会显示黄色提示。

行为说明

  • 验证码 6 位数字,10 分钟有效,校验成功后立即作废;单个验证码最多尝试 5 次。
  • 防刷:同一目标同一场景 60 秒内只能发 1 次、每天最多 5 次;同一 IP 每天最多 20 条;页面上发送按钮自带 60 秒倒计时。
  • 验证码统一存在 verify_codes 表(target + channel + scene),邮箱与短信共用一套生成/校验/防刷逻辑。
  • 注册:按所选渠道要求填写邮箱或手机号并输入验证码;关闭验证时两者选填,但仍做格式与唯一性校验。
  • 找回密码:登录页「忘记密码」→ 填邮箱或手机号 + 验证码 + 新密码;关闭该功能时提示联系客服。

邮件文案(注册 / 找回密码各一套)

两封邮件口吻不同,正文全部居中、验证码大字突出:

  • 注册:标题「听说您想加入我们」→「这是我们之间的秘密」→ 验证码 →「打死不要告诉任何人 · 请在 N 分钟内使用」
  • 找回密码:标题「听说您遇到一些麻烦,没关系的」→「这是您的密钥,我刚刚拿到的,趁热」→ 验证码 →「超过 N 分钟就凉了,请尽快使用」

其中 N 取自后台「平台设置 → 验证方式 → 验证码有效期(分钟)」(默认 3 分钟),所以文案里的时长永远和真实有效期一致。改文案在 app/VerifyCode.php 的 mailTemplate()。

  • 邮箱可在「个人中心」修改(唯一性校验);建议引导用户填常用邮箱,否则无法自助找回密码。
  • 相关表:users.email(新字段)、email_codes(新表,第 14 张);旧库升级只需重新访问一次 install.php,SchemaSync 会自动建表补字段。

本轮新增的后台能力

能力位置说明
设为陪玩用户管理 → 用户详情 → 身份操作免审核直接开通(写入陪玩资料并置为已通过),随后可在技能管理为其上架服务
代客下单订单管理 → 代客下单指定用户/陪玩/服务项目/数量/单价,可自定义金额;可选「立即用余额支付」,余额不足整体回滚;全程写操作日志
后台建服务项目技能管理 → 新增服务项目选陪玩 + 游戏 + 标题 + 类型 + 价格,直接上架并定价;也可编辑已有项目(编辑时不允许更换归属陪玩)

手机端适配

前台与后台都做了窄屏适配:表格在卡片内横向滑动(列不再被压扁成一团)、筛选栏与表单自动纵向堆叠并撑满宽度、订单卡片在窄屏换行显示、后台侧边栏在手机上变成可左右滑动的导航条、超小屏(≤420px)进一步压缩留白。

底部 Tab 导航:手机上固定在底部,内部容器 max-width: 560px 居中、每个 Tab flex: 1 1 0 均匀分布;桌面端(≥701px)变成底部居中的悬浮胶囊条(宽 520px、圆角、投影),不再铺满整行。图标使用内联线性 SVG(当前色描边),选中态为品牌色加粗,未选中为灰色,点击有浅色反馈。「我的」页九宫格同样是彩色圆角图标块。

改了 CSS 没生效? asset() 会自动给 style.css / admin.css / app.js 加上 ?v=文件修改时间,上传新文件后浏览器会自动拉取新版本,不需要手动清缓存(首次仍建议按一次 Ctrl+F5)。

© 版权声明
THE END
喜欢就支持一下吧
点赞722 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容