百趣云 百趣云的博客

江西智慧教育打卡协议

背景

最近听学弟说要毕业了,还要实习打卡,问我有没有什么办法。我原以为今年依然是蘑菇钉,那直接用现成的就好了,但学弟说今年全江西省都更换了实习打卡平台,换到了"江西智慧教育"。话不多说,开搞。

2024-12-16T02:01:51.png

抓包

直接上 Stream 开始抓包(苹果用这个抓包还是比较方便的):

  1. 打开 Stream,开启抓包
  2. 进入登录页面,开始登录
  3. 过滤多余的抓包数据,只针对 http://sxsx.jxeduyun.com 这个域名进行筛选

最终看到这样一个接口:

http://sxsx.jxeduyun.com:7779/portal-api/app/index/login

这肯定就是登录接口了,尝试模拟走一遍?

登录接口

先看到它的参数有这些:

$datas = [
    "appLogin" => true,
    "loginAccount" => $data['loginAccount'],
    "password" => $data['password'],
    "appUserId" => "",
    "loginUserType" => "student",
    "enrollmentYear" => $data['enrollmentYear']
];

注意 password 字段——本来准备下手分析它是怎么加密的,结果碰巧直接用明文密码登录,竟然成功了???

那 password 直接传明文就可以了,开始封装代码:

/**
 * 登录
 */
public function login()
{
    $data = Request::post();

    // 验证数据
    if ($data['loginAccount'] == '') {
        return ResponseUtils::error('账号不允许为空');
    } else if ($data['password'] == '') {
        return ResponseUtils::error('密码不允许为空');
    } else if ($data['enrollmentYear'] == '') {
        return ResponseUtils::error('请选择毕业年份');
    }

    $url = 'http://sxsx.jxeduyun.com:7779/portal-api/app/index/login';

    $datas = [
        "appLogin" => true,
        "loginAccount" => $data['loginAccount'],
        "password" => $data['password'],
        "appUserId" => "",
        "loginUserType" => "student",
        "enrollmentYear" => $data['enrollmentYear']
    ];
    $res = $this->curl_post($url, $datas);
    $responseData = json_decode($res, true);

    if ($responseData['code'] == 200) {
        $token = $responseData['data']['token'];

        // 记录到用户表,方便后续自动打卡
        Db::table('sign_user')->insert([
            'loginAccount' => $data['loginAccount'],
            'password' => $data['password'],
            'enrollmentYear' => $data['enrollmentYear'],
            'addTime' => date('Y-m-d H:i:s'),
            'last_login_time' => date('Y-m-d H:i:s'),
            'last_login_ip' => Request::ip(),
            'token' => $token
        ]);

        return ResponseUtils::successData(['token' => $token, 'message' => '登录成功']);
    }

    return ResponseUtils::error($responseData['msg']);
}

打卡接口

登录成功还远远不够。从登录接口的返回信息里可以看到一个 token,把它拼到 Authorization 请求头里,就可以调用后续接口了。

模拟一次打卡操作,同时抓包,同样很轻松地拿到了打卡接口:

http://sxsx.jxeduyun.com:7779/portal-api/practice/autonomyClock/add

参数如下:

$sign_data = [
    "autonomyId" => $id,
    "userId" => $userId,
    "nickName" => $name,
    "clockAddress" => $user['address'],
    "fileId" => $uploadResult['data'],
    "clockTime" => date("Y-m-d H:i:s"),
    "clockType" => "签到",
    "clockContent" => ""
];

剩下的就是封装模拟一遍,配合定时任务,就能实现每天自动打卡了。

交流微信:run1255

By 百趣云 阅读量:2011 On