爱学习系统实用小插件--定期清理僵尸用户


一 源代码(php项目)

<?php
// 数据库配置
$dbHost = '';    // 通常是 localhost
$dbUser = '';       // 数据库用户名
$dbPass = '';   // 数据库密码
$dbName = '';       // 数据库名
$tableName = 'love_learn_user'; // 表名

// wxPusher配置(需要到官网注册获取)
$wxPusherAppToken = '';  // 你的应用AppToken
$wxPusherUids = [''];    // 要推送的频道ID(或使用用户UID数组)
// 或使用指定用户UID推送(二选一)
// $wxPusherUids = ['UID1','UID2'];

$currentTime = date('Y-m-d H:i:s');

try {
    $mysqli = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
    $mysqli->set_charset('utf8mb4');

    if ($mysqli->connect_errno) {
        throw new Exception('数据库连接失败: ' . $mysqli->connect_error);
    }

    // 查询符合条件的用户(与原查询保持一致)
    $query = "
        SELECT uid, uuid, zcz, money, addtime
        FROM `$tableName`
        WHERE STR_TO_DATE(addtime, '%Y-%m-%d %H:%i:%s') < DATE_SUB(NOW(), INTERVAL 3 DAY)
        AND zcz = 0
        AND money = 0
    ";
    $result = $mysqli->query($query);

    if (!$result) {
        throw new Exception('查询失败: ' . $mysqli->error);
    }

    $deleteCount = 0;
    $userList = [];

    while ($row = $result->fetch_assoc()) {
        $uid = (int)$row['uid'];
        $uuid = (int)$row['uuid'];
        $zcz = (float)$row['zcz'];
        $money = (float)$row['money'];
        $addtime = $row['addtime'];

        $userList[] = [
            'uid' => $uid,
            'uuid' => $uuid,
            'zcz' => $zcz,
            'money' => $money,
            'addtime' => $addtime
        ];

        // 删除操作保持不变
        $del = $mysqli->prepare("DELETE FROM `$tableName` WHERE uid = ? LIMIT 1");
        if ($del) {
            $del->bind_param('i', $uid);
            $del->execute();
            if ($del->affected_rows > 0) {
                $deleteCount++;
            }
            $del->close();
        }
    }

    // 构建wxPusher推送内容
    if ($deleteCount > 0) {
        $content = "🗑️ 成功清理 {$deleteCount} 个无效用户\n\n";
        foreach ($userList as $user) {
            $content .= "━━━━━━━━━━━━━━\n";
            $content .= "UID:{$user['uid']}\n";
            $content .= "上级UID:{$user['uuid']}\n";
            $content .= "总充值:{$user['zcz']}元\n";
            $content .= "账户余额:{$user['money']}元\n";
            $content .= "注册时间:{$user['addtime']}\n";
        }
        $content .= "\n⏰ 清理时间:{$currentTime}";
    } else {
        $content = "✅ 今日无符合条件用户,无需清理。\n\n清理时间:{$currentTime}";
    }

    // 构建wxPusher请求数据
    $payload = json_encode([
        "appToken" => $wxPusherAppToken,
        "content" => $content,
        "summary" => $deleteCount > 0 ? "清理{$deleteCount}个无效用户" : "无用户需要清理",
        "contentType" => 1,  // 1表示文字
        "uids" => $wxPusherUids,  // 如果使用UID推送则启用此项
        "url" => ""  // 可选跳转链接
    ], JSON_UNESCAPED_UNICODE);

    // 发送到wxPusher
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://wxpusher.zjiecode.com/api/send/message');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Accept: application/json'
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    $response = curl_exec($ch);
    curl_close($ch);

    // 处理响应
    $responseData = json_decode($response, true);
    if ($responseData['code'] === 1000) {
        echo "[{$currentTime}] wxPusher推送成功,消息ID:{$responseData['data'][0]['messageId']}\r\n";
    } else {
        throw new Exception("wxPusher推送失败:{$responseData['msg']}");
    }

    echo "------------------------------------------------------\r\n";

    $mysqli->close();
} catch (Exception $e) {
    echo "[{$currentTime}] 错误:" . $e->getMessage() . "\r\n";
    echo "------------------------------------------------------\r\n";
}

二 功能解释

判断用户表中是否存在余额和总充值量均为0的用户,如果此用户注册时间大于3天,将删除此用户并推送。

可以实现自动清理注册了但是不充值的僵尸用户,保障平台安全(注册3天内不充值基本不会充值了)

三 配置方法

同“数据统计”相同,聪明人一下就能想到只用更改文件名即可。

数据统计插件教程:爱学习系统实用小插件--数据统计


收藏

爱学习内置密价部署教程

爱学习系统实用小插件--数据统计

评 论
请登录后再评论
avatar
小鹿同学管理员
  • Chrome
  • Windows10
懒得发布其他插件了,还有费率监控/工单监控/无查课订单监控,想要的评论区留言
29 天前