适用人群
这篇文章是写给那些用苹果CMS(Apple CMS)做影视站、漫画站或知识付费站的站长看的,尤其是你已经在站里接了会员充值、用户组付费,或者搞了投稿奖励、推广返佣,却愁着“用户赚了钱怎么提现”的——对,就是给你写的,哪怕你只会后台点鼠标,没碰过代码,只要照着本文敲键盘,也能把提现系统装上,前提是:你用的是苹果CMS V10版本,并且你的服务器能装PHP 7.3以上、MySQL 5.6以上,站点已经能正常运行。

苹果CMS提现系统从零搭建,手把手教你挂上余额提现,别被源码商坑了
完整搭建步骤
第一步:确认你的数据库表结构
苹果CMS默认的会员表是mac_user,里面没有balance(余额)字段,提现系统本质上是“用户申请提现 -> 管理员审核 -> 扣减余额 -> 打款”,所以先给用户表加一个余额字段,进入你的phpMyAdmin,或者用命令行,执行:
ALTER TABLE mac_user ADD COLUMN balance DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '用户余额';
如果你想记录每笔提现流水,还需要建一张提现申请表:
CREATE TABLE IF NOT EXISTS `mac_withdraw` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '用户ID', `money` DECIMAL(10,2) NOT NULL COMMENT '提现金额', `account` varchar(255) NOT NULL COMMENT '收款账号', `real_name` varchar(50) DEFAULT NULL COMMENT '收款人姓名', `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0待审核1已打款2已拒绝', `create_time` int(11) NOT NULL, `update_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
第二步:用户中心增加“申请提现”入口
打开苹果CMS模板目录下的user/index.html,找个合适位置,加一个链接:
<a href="/index.php/user/withdraw.html" class="btn btn-primary">申请提现</a>
然后要创建对应的模板文件,在template/你的模板名称/user/下面,新建withdraw.html,里面写一个表单,让用户输入提现金额、收款方式(支付宝/微信)、收款账号、真实姓名,提交到/index.php/user/withdrawPost。
第三步:写后台处理逻辑
不要慌,不需要深入框架,只需要在苹果CMS的application/user/controller/UserController.php里加两个方法,打开这个文件,在末尾之前粘贴:
public function withdraw()
{
$user = $this->userInfo; // 已登录的用户
return $this->fetch('withdraw');
}
public function withdrawPost()
{
$param = input('post.');
$user = $this->userInfo;
$money = floatval($param['money'] ?? 0);
if ($money <= 0) {
return json(['code' => 0, 'msg' => '金额不合法']);
}
if ($money > $user['balance']) {
return json(['code' => 0, 'msg' => '余额不足']);
}
$data = [
'user_id' => $user['user_id'],
'money' => $money,
'account' => $param['account'],
'real_name' => $param['real_name'],
'status' => 0,
'create_time' => time(),
];
db('withdraw')->insert($data);
// 冻结余额,防止重复提现
db('user')->where('user_id', $user['user_id'])->setDec('balance', $money);
return json(['code' => 1, 'msg' => '申请成功,等待审核']);
}
注意:苹果CMS内置了db()函数,直接用就行。setDec是ThinkPHP内置的减操作。
第四步:后台审核界面
苹果CMS的后台控制器在application/admin/controller/Withdraw.php(如果不存在,自己建一个),简单粗暴的方法,直接在后台菜单里加一个“提现管理”的链接,指向/index.php/admin/withdraw/index.html,新建控制器代码:
namespace app\admin\controller;
use think\Controller;
class Withdraw extends Controller
{
public function index()
{
$list = db('withdraw')->order('id desc')->paginate(10);
$this->assign('list', $list);
return $this->fetch();
}
public function pass()
{
$id = input('id');
db('withdraw')->where('id', $id)->update(['status' => 1, 'update_time' => time()]);
return json(['code' => 1]);
}
public function reject()
{
$id = input('id');
$withdraw = db('withdraw')->where('id', $id)->find();
db('withdraw')->where('id', $id)->update(['status' => 2, 'update_time' => time()]);
// 驳回退回余额
db('user')->where('user_id', $withdraw['user_id'])->setInc('balance', $withdraw['money']);
return json(['code' => 1]);
}
}
对应的后台模板application/admin/view/withdraw/index.html你自己写,表格列出来,放“通过”“拒绝”按钮即可。
配置要点
- 余额来源:提现系统必须配套“余额增加”的入口,一般你在用户充值回调、推广佣金结算、投稿审核通过的地方,用
setInc('balance', 金额)给用户加钱,否则用户永远没钱可提。 - 最低提现金额:在表单里用
min属性限制,比如<input type="number" min="10">,后台再校验一次,别让用户提一分钱,手续费不够付。 - 提现手续费:如果需要收手续费,在
withdrawPost里计算:$fee = $money * 0.01; $actual = $money - $fee;打款时按$actual打,后台记录里增加一个fee字段即可。 - 防刷机制:同一个IP每天只能申请几次,用session或单独一张表记录,否则遇到恶意用户,能把服务器刷爆。
- 实名认证:强烈建议在申请提现前强制绑定手机号或实名信息,苹果CMS本身有手机号绑定插件,你可以在
withdraw方法里先判断user_phone是否存在。
常见踩坑提醒
- 坑1:用错了用户ID字段,苹果CMS的
mac_user表主键是user_id,但有些旧版本是id,你加余额字段前先查一下表结构,别改错了。 - 坑2:模板缓存不生效,改完
user/index.html后,如果前台没变化,去后台“模板管理”里清一下缓存,或者删除runtime/temp/下的文件。 - 坑3:申请提现后余额没扣减,如果是自己写的逻辑,注意
db('user')->where('user_id', $user['user_id']),这里$user是从$this->userInfo得到的,里面可能没有user_id,只有id,保险起见打印一下$user看看字段名。 - 坑4:后端返回JSON但前端报错,苹果CMS默认的
json()方法返回的header可能是text/html,需要手动设置return json($data, 200, ['Content-Type' => 'application/json;charset=utf-8']);。 - 坑5:数据库collation不一致,如果你插入中文账号名报错,检查
mac_withdraw表是不是utf8mb4_general_ci,别用utf8_general_ci,否则emoji或者其他字符会乱码。 - 坑6:后台没有“提现管理”菜单,如果你不想写后台控制器的菜单逻辑,可以直接把提现管理链接挂到现有菜单的“自定义菜单”里,地址填
/admin.php/admin/withdraw/index.html,如果你的后台入口是admin.php的话。 - 坑7:用户提现后余额变负,并发情况下,两个人同时提现,余额可能被减成负数,解决方法是加一个SQL条件:
where('user_id', $id)->where('balance', '>=', $money)->setDec('balance', $money),如果影响行数为0,说明余额不足或并发竞争,直接拒绝提现。 - 坑8:苹果CMS版本不同,路由格式不同,V10的默认路由是
/index.php/user/index.html风格,但有些二次开发版本用的是静态化伪静态,你按本文写的方法,如果404,检查你后台的“URL美化”设置,改成兼容模式。 - 坑9:使用了第三方会员插件,很多苹果CMS模板自带“余额”功能,但它的余额字段可能叫
points或者money,你要先找到你模板里充值成功之后改了哪个字段,然后把提现系统对接那个字段,别自己新加一个balance出来,结果跟原有会员中心的数据对不上。 - 坑10:打款记录不清晰,线下打款建议在审核通过后,人工去支付宝或微信转账,转完再在后台勾选“已打款”,千万别做自动打款,除非你是做支付接口对接的,否则风控、限额、手续费能让你亏到裤子都没。
最后说句扎心的
苹果CMS本身并没有官方提现系统,很多“苹果CMS提现系统”的源码都是二开作者自己写的,网上卖的动辄好几百,你照着本文这套代码,已经能实现80%的功能,剩下的20%就是根据你自己的业务加个限流、加个通知、加个Excel导出而已,别花钱买智商税,也别去下那种带后门的“破解提现插件”——你以为你在提现,其实用户在薅你,后台人家早就留了暗门,自己写的虽然糙,但睡得踏实。
动手去改吧,改坏了别怕,数据库备份一下,重来就是,网站是自己的,赚钱也是自己的,折腾一遍,你就再也不是只会装模板的小白了。
发表评论