first commit
This commit is contained in:
commit
56775e85f3
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
5
.htaccess
Normal file
5
.htaccess
Normal file
@ -0,0 +1,5 @@
|
||||
RewriteEngine On
|
||||
|
||||
# 讓 /api/getcard 直接對應到 api/getcard.php(避免漏寫 .php)
|
||||
RewriteRule ^api/getcard/?$ api/getcard.php [L]
|
||||
|
||||
7
404.html
Normal file
7
404.html
Normal file
@ -0,0 +1,7 @@
|
||||
<html>
|
||||
<head><title>404 Not Found</title></head>
|
||||
<body>
|
||||
<center><h1>404 Not Found</h1></center>
|
||||
<hr><center>nginx</center>
|
||||
</body>
|
||||
</html>
|
||||
154
README.md
Normal file
154
README.md
Normal file
@ -0,0 +1,154 @@
|
||||
<!-- markdownlint-disable MD047 -->
|
||||
|
||||
# sendcard PHP 后端
|
||||
|
||||
提供一个接口用来向外部服务拉取 `token`,并把外部回传的 `data` 备档写入 SQLite 数据库。
|
||||
|
||||
## 前置要求
|
||||
|
||||
- PHP 8.x(已使用 `declare(strict_types=1)`)
|
||||
- `curl` 扩展
|
||||
- `PDO_SQLITE` 扩展
|
||||
- SQLite 写入权限(默认写入到 `./data/sendcard.sqlite`)
|
||||
- 如果你用 Apache:需要启用 `.htaccess`(本项目已添加重写规则)
|
||||
|
||||
## 接口说明
|
||||
|
||||
### 1) 获取 token
|
||||
|
||||
`GET /api/getcard?type=xianyu`
|
||||
|
||||
请求参数:
|
||||
|
||||
- `type`:必须等于 `xianyu`,否则会报错不执行外部请求
|
||||
|
||||
**说明(避免和轮询脚本混淆):**
|
||||
|
||||
- **不需要**配置 `poll_cron_key`,也**不需要**在 URL 里传 `device_code` / `device_code_md5`。浏览器只访问带 `type=xianyu` 的地址即可。
|
||||
- `device_code`、`device_code_md5`、`external_base_url`(例如 `82.157.20.83:9091/.../getCredentials?...`)都在服务端 **`config.php`** 里,由 **`getcard.php` 在服务器上** 用 cURL 去调外部接口;调用方看不到也不会传这些参数。此处对应 **机器 A**(即时 Web 请求)。
|
||||
- 定时脚本 **`getcard_poll.php`** 仍调同一 `external_base_url`,但使用 **`config['poll']` 里机器 B** 的 `device_code` / `device_code_md5`,与机器 A 分离,便于在上游对 **单设备或请求频次** 有限制时分流(轮询与即时各走一套设备参数)。
|
||||
|
||||
成功响应(HTTP 200,**响应体为纯文本**,即 token 字符串本身,不是 JSON 包一层):
|
||||
|
||||
```text
|
||||
<外部返回的 data.token,例如 JWT 整段>
|
||||
```
|
||||
|
||||
错误响应:
|
||||
|
||||
- 未带 `type=xianyu`:
|
||||
|
||||
```json
|
||||
{"error":"Invalid request parameter","need_type":"xianyu"}
|
||||
```
|
||||
|
||||
- 外部接口返回异常/缺少数据:
|
||||
|
||||
```json
|
||||
{"error":"External response missing data"}
|
||||
```
|
||||
|
||||
## SQLite 备档
|
||||
|
||||
每次成功调用并拿到外部 `data` 后,会把外部返回的字段逐列拆开写入一行记录(并额外保存 `raw_json`)。
|
||||
|
||||
- 数据库文件:`./data/sendcard.sqlite`
|
||||
- 表名:`cursor_login_backups`
|
||||
|
||||
表字段包含(部分):
|
||||
|
||||
- `external_msg`, `external_code`
|
||||
- `token`, `email`, `deviceCode`, `activationCode`, `status`, `createTime` 等
|
||||
- `raw_json`:保存外部完整 JSON(可用于排查)
|
||||
|
||||
## 配置文件
|
||||
|
||||
`config.php` 里可配置:
|
||||
|
||||
- `external_base_url`:`getcard` 与 `getcard_poll` **共用**的外部 `getCredentials` 基础地址
|
||||
- `device_code`、`device_code_md5`:**机器 A**,仅 **`getcard.php`** 使用
|
||||
- `poll.device_code`、`poll.device_code_md5`:**机器 B**,仅 **`getcard_poll.php`** 使用(与 A 不同,用于上游限流/限设备时分流)
|
||||
- `sqlite_path`:SQLite 路径
|
||||
|
||||
## 部署路由(Apache / Nginx)
|
||||
|
||||
本项目包含 `.htaccess`(仅对 Apache 生效),用于把 `/api/getcard` 重写到 `api/getcard.php`。
|
||||
|
||||
如果你部署在宝塔(通常是 Nginx),建议直接访问:
|
||||
|
||||
`/api/getcard.php?type=xianyu`
|
||||
|
||||
这样不依赖重写;如果你确实想保留 `/api/getcard` 形式,把你宝塔里“重写/伪静态”的设置截图或说明一下,我再给你对应的 Nginx 规则。
|
||||
|
||||
## 接口说明
|
||||
|
||||
本仓库里的 config.php 只负责把现成的字符串传给外部接口,没有生成逻辑;下面按你这条 device_code 的常见写法说明各段含义。
|
||||
|
||||
device_code 的三段(用 - 拼起来)
|
||||
示例:
|
||||
|
||||
BFEBFBFF000A06A4 - 5210N57MP0004BXP00R2 - c84b8af03a6c40e888f72576a5f34a1f
|
||||
|
||||
段 典型来源(Windows 上常见叫法)
|
||||
第 1 段 BFEBFBFF000A06A4
|
||||
CPU ProcessorId(wmic cpu get ProcessorId / WMI Win32_Processor.ProcessorId)。BFEBFBFF 是 Intel 上很常见的 CPUID 特征前缀,后面一般是 family/model/stepping 等拼成的十六进制,不是传统意义上的“CPU 出厂序列号”,但常被叫作 CPU 标识/CPU ID。
|
||||
第 2 段 5210N57MP0004BXP00R2
|
||||
多为 主板序列号(Win32_BaseBoard.SerialNumber)或 BIOS/机器厂商序列 一类 OEM 串号;也可能是别的固定硬件标识,取决于采集工具具体取哪一项。
|
||||
第 3 段 c84b8af…(32 位十六进制)
|
||||
很像 去掉连字符的 UUID(128 bit)。常见对应是 Windows 机器 GUID(注册表 HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid 去掉 -),也可能是程序自己生成的 GUID,要看上游工具怎么定义。
|
||||
所以你记的「CPU 序列 + 别的」大致对应:CPU ProcessorId + 主板/机器类序列号 + 机器 UUID(或同类唯一 ID),中间用 - 连成一条 device_code。
|
||||
|
||||
device_code_md5
|
||||
从形态看是 32 位小写十六进制,符合 MD5 的常见输出。
|
||||
在本项目里没有对 device_code 做校验或计算;我用 PHP 对整条 device_code 做 md5(),结果不等于你配置里的 bc5613415689b537679ba22c2feae68c。
|
||||
因此它可能是:对别的规范化字符串(大小写、是否含 -、段顺序等)做的 MD5,或 带盐/由别的客户端算法 生成,需要以提供 device_code 的那套工具/文档为准。
|
||||
若你需要和上游完全一致,建议对照当时生成 device_code 的程序或接口文档;若你手头有那套工具的源码或说明,发一段我可以帮你对齐 device_code_md5 的精确算法。
|
||||
|
||||
|
||||
|
||||
## 定时轮询 getcard_poll.php
|
||||
|
||||
与 **`getcard.php` 调同一套外部接口、同一种返回数据**;差别在于:**`getcard` 是即时(Web)**,**`getcard_poll` 约每 5 分钟(计划任务 + 脚本内随机间隔)**。因上游常对 **单设备或请求频次** 有限制,**即时走机器 A**(顶层 `device_code` / `device_code_md5`),**轮询走机器 B**(`config['poll']` 内同名键,值与 A 不同)。
|
||||
|
||||
- **`getcard.php`**:带 `type=xianyu`,**不要 `poll_cron_key`**,用机器 A 调外部并写 SQLite、回 token。
|
||||
- **`getcard_poll.php`**:命令行跑定时 **不要 `key`**;仅当用 HTTP 触发该脚本时配置 **`poll_cron_key`** 与 `?key=`(见下文方式二)。用机器 B 调外部,并写 **txt 日志**(与 getcard 的 SQLite 备档可并存)。
|
||||
|
||||
已在项目里提供 `api/getcard_poll.php`:宝塔 **计划任务每分钟** 执行一次;脚本内未到点会 `Skip`;到点后按 **约 5 分钟 ±3 分钟、不少于 4 分钟** 再请求外部,结果追加到 `data/getcard_poll_log.txt`。**请务必将 `poll` 里机器 B 的 `device_code` / `device_code_md5` 填全**,否则轮询脚本会因配置校验失败退出。
|
||||
|
||||
### 宝塔里怎么设「定时」(二选一)
|
||||
|
||||
**方式一:Shell 里直接跑 PHP(不经过 Web)**
|
||||
|
||||
1. 打开 **计划任务** → **Shell 脚本**(或同类「执行脚本」)。
|
||||
2. 执行周期选 **每 1 分钟**(要足够密;未到点脚本会 `Skip` 退出,不会打外部接口)。
|
||||
3. 脚本内容把路径换成你站点实际路径,例如:
|
||||
|
||||
```bash
|
||||
/usr/bin/php /www/wwwroot/你的域名/sendcard.yunzer.cn/api/getcard_poll.php >>/www/wwwroot/你的域名/sendcard.yunzer.cn/data/getcard_poll_cron.log 2>&1
|
||||
```
|
||||
|
||||
- 若不确定 PHP 路径:宝塔 **软件商店** → 已安装的 **PHP** → **设置** → **命令行版本**,常见为 `/www/server/php/82/bin/php`(版本号按你的来)。
|
||||
|
||||
**方式二:调你自己站点上的 URL(走 HTTP,等价于「调接口」)**
|
||||
|
||||
可以,不必在 Shell 里写 `php` 路径。先在 `config.php` 里配置 **`poll_cron_key`**(一长串随机密钥,勿泄露),则允许通过 Web 访问:
|
||||
|
||||
`https://你的域名/api/getcard_poll.php?key=你配置的密钥`
|
||||
|
||||
然后任选其一:
|
||||
|
||||
- 宝塔计划任务选 **访问 URL**(若有),每分钟访问上述地址;或
|
||||
- Shell 计划任务里每分钟执行:`curl -fsS 'https://你的域名/api/getcard_poll.php?key=你的密钥' >>/path/to/curl.log 2>&1`
|
||||
|
||||
**注意:** `key` 会出现在 **Web 服务器访问日志** 里,且可能被中间代理记录;更稳妥仍是 **方式一 CLI**。若用 Nginx 且未配置重写,请用带 `.php` 的路径:`/api/getcard_poll.php?key=...`。
|
||||
|
||||
### 写入的文件
|
||||
|
||||
- `data/getcard_poll_state.json`:下次允许执行的时间(含文件锁,避免并发重复跑)
|
||||
- `data/getcard_poll_log.txt`:每次拉取的一行日志(时间 + HTTP 状态 + 整段 JSON;失败则写 `ERROR ...`)
|
||||
|
||||
### 间隔规则(脚本内已实现)
|
||||
|
||||
- 本次执行后,下次间隔秒数:`max(240, 300 + random_int(-180, 180))`,即 **4~8 分钟** 之间随机。
|
||||
|
||||
若你希望轮询成功时也像 `getcard.php` 一样写入 SQLite,可以再说一下,我可以把那段插入逻辑复用到 `getcard_poll.php` 里。
|
||||
132
api/getcard.php
Normal file
132
api/getcard.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
header('Content-Type: text/plain; charset=utf-8');
|
||||
|
||||
// 简单允许方法:GET
|
||||
if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'GET') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['error' => 'Method Not Allowed'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 只有在携带 type=xianyu 参数时才允许返回
|
||||
$reqType = $_GET['type'] ?? null;
|
||||
if ($reqType !== 'xianyu') {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Invalid request parameter', 'need_type' => 'xianyu'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../lib/db.php';
|
||||
require_once __DIR__ . '/../lib/external.php';
|
||||
|
||||
$cfg = require __DIR__ . '/../config.php';
|
||||
|
||||
$externalBase = $cfg['external_base_url'] ?? '';
|
||||
$deviceCode = $cfg['device_code'] ?? '';
|
||||
$deviceCodeMd5 = $cfg['device_code_md5'] ?? '';
|
||||
$sqlitePath = $cfg['sqlite_path'] ?? (__DIR__ . '/../data/sendcard.sqlite');
|
||||
|
||||
if ($externalBase === '' || $deviceCode === '' || $deviceCodeMd5 === '') {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Config missing'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$externalUrl = $externalBase . '?device_code=' . rawurlencode($deviceCode) . '&device_code_md5=' . rawurlencode($deviceCodeMd5);
|
||||
|
||||
try {
|
||||
$resp = sendcard_fetch_credentials($externalUrl);
|
||||
$httpStatus = $resp['http_status'];
|
||||
$json = $resp['json'];
|
||||
|
||||
$externalMsg = isset($json['msg']) ? (string)$json['msg'] : null;
|
||||
$externalCode = isset($json['code']) ? (string)$json['code'] : null;
|
||||
|
||||
$data = is_array($json['data'] ?? null) ? $json['data'] : null;
|
||||
if ($data === null) {
|
||||
http_response_code(502);
|
||||
echo json_encode([
|
||||
'error' => 'External response missing data',
|
||||
'external_http_status' => $httpStatus,
|
||||
'external_response' => $json,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 仅给请求端返回 token;其它字段仅用于 SQLite 备档
|
||||
$token = isset($data['token']) ? (string)$data['token'] : null;
|
||||
|
||||
$pdo = sendcard_get_pdo($sqlitePath);
|
||||
sendcard_init_db($pdo);
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
'INSERT INTO cursor_login_backups (
|
||||
external_msg, external_code,
|
||||
external_id, email, token, createTime, lastTokenTime, status,
|
||||
deviceCode, activationCode, useTime, lastId, deleted, emailLastStatus,
|
||||
useCount, pwd, type, updateTime, banName,
|
||||
webToken, cpName, comeStatus, comePushTime,
|
||||
freeSevenStatus, windsurfUseStatus, windsurfStatus, windsurfToken,
|
||||
windsurfPwd, windsurfUseTime, raw_json
|
||||
) VALUES (
|
||||
:external_msg, :external_code,
|
||||
:external_id, :email, :token, :createTime, :lastTokenTime, :status,
|
||||
:deviceCode, :activationCode, :useTime, :lastId, :deleted, :emailLastStatus,
|
||||
:useCount, :pwd, :type, :updateTime, :banName,
|
||||
:webToken, :cpName, :comeStatus, :comePushTime,
|
||||
:freeSevenStatus, :windsurfUseStatus, :windsurfStatus, :windsurfToken,
|
||||
:windsurfPwd, :windsurfUseTime, :raw_json
|
||||
)'
|
||||
);
|
||||
|
||||
// 一次回调:把 external data 的字段拆出来逐列存储
|
||||
$stmt->execute([
|
||||
':external_msg' => $externalMsg,
|
||||
':external_code' => $externalCode,
|
||||
':external_id' => isset($data['id']) ? (int)$data['id'] : null,
|
||||
':email' => $data['email'] ?? null,
|
||||
':token' => $token,
|
||||
':createTime' => $data['createTime'] ?? null,
|
||||
':lastTokenTime' => $data['lastTokenTime'] ?? null,
|
||||
':status' => isset($data['status']) ? (int)$data['status'] : null,
|
||||
':deviceCode' => $data['deviceCode'] ?? null,
|
||||
':activationCode' => $data['activationCode'] ?? null,
|
||||
':useTime' => $data['useTime'] ?? null,
|
||||
':lastId' => isset($data['lastId']) ? (int)$data['lastId'] : null,
|
||||
':deleted' => isset($data['deleted']) ? (int)$data['deleted'] : null,
|
||||
':emailLastStatus' => isset($data['emailLastStatus']) ? (int)$data['emailLastStatus'] : null,
|
||||
':useCount' => isset($data['useCount']) ? (int)$data['useCount'] : null,
|
||||
':pwd' => $data['pwd'] ?? null,
|
||||
':type' => isset($data['type']) ? (int)$data['type'] : null,
|
||||
':updateTime' => $data['updateTime'] ?? null,
|
||||
':banName' => $data['banName'] ?? null,
|
||||
':webToken' => $data['webToken'] ?? null,
|
||||
':cpName' => $data['cpName'] ?? null,
|
||||
':comeStatus' => isset($data['comeStatus']) ? (int)$data['comeStatus'] : null,
|
||||
':comePushTime' => $data['comePushTime'] ?? null,
|
||||
':freeSevenStatus' => isset($data['freeSevenStatus']) ? (int)$data['freeSevenStatus'] : null,
|
||||
':windsurfUseStatus' => isset($data['windsurfUseStatus']) ? (int)$data['windsurfUseStatus'] : null,
|
||||
':windsurfStatus' => isset($data['windsurfStatus']) ? (int)$data['windsurfStatus'] : null,
|
||||
':windsurfToken' => $data['windsurfToken'] ?? null,
|
||||
':windsurfPwd' => $data['windsurfPwd'] ?? null,
|
||||
':windsurfUseTime' => $data['windsurfUseTime'] ?? null,
|
||||
':raw_json' => json_encode($json, JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
|
||||
if ($token === null || $token === '') {
|
||||
http_response_code(502);
|
||||
echo json_encode(['error' => 'External response missing token', 'external_http_status' => $httpStatus], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 只返回 token 给请求端
|
||||
echo $token;
|
||||
} catch (Throwable $e) {
|
||||
http_response_code(502);
|
||||
echo json_encode(['error' => 'Bad Gateway', 'detail' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
230
api/getcard.php-bak
Normal file
230
api/getcard.php-bak
Normal file
@ -0,0 +1,230 @@
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
|
||||
// 简单允许方法:GET
|
||||
|
||||
if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'GET') {
|
||||
|
||||
http_response_code(405);
|
||||
|
||||
echo json_encode(['error' => 'Method Not Allowed'], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 只有在携带 type=xianyu 参数时才允许返回
|
||||
|
||||
$reqType = $_GET['type'] ?? null;
|
||||
|
||||
if ($reqType !== 'xianyu') {
|
||||
|
||||
http_response_code(400);
|
||||
|
||||
echo json_encode(['error' => 'Invalid request parameter', 'need_type' => 'xianyu'], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
require_once __DIR__ . '/../lib/db.php';
|
||||
|
||||
require_once __DIR__ . '/../lib/external.php';
|
||||
|
||||
|
||||
$cfg = require __DIR__ . '/../config.php';
|
||||
|
||||
|
||||
$externalBase = $cfg['external_base_url'] ?? '';
|
||||
|
||||
$deviceCode = $cfg['device_code'] ?? '';
|
||||
|
||||
$deviceCodeMd5 = $cfg['device_code_md5'] ?? '';
|
||||
|
||||
$sqlitePath = $cfg['sqlite_path'] ?? (__DIR__ . '/../data/sendcard.sqlite');
|
||||
|
||||
|
||||
if ($externalBase === '' || $deviceCode === '' || $deviceCodeMd5 === '') {
|
||||
|
||||
http_response_code(500);
|
||||
|
||||
echo json_encode(['error' => 'Config missing'], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
$externalUrl = $externalBase . '?device_code=' . rawurlencode($deviceCode) . '&device_code_md5=' . rawurlencode($deviceCodeMd5);
|
||||
|
||||
|
||||
try {
|
||||
|
||||
$resp = sendcard_fetch_credentials($externalUrl);
|
||||
|
||||
$httpStatus = $resp['http_status'];
|
||||
|
||||
$json = $resp['json'];
|
||||
|
||||
|
||||
$externalMsg = isset($json['msg']) ? (string)$json['msg'] : null;
|
||||
|
||||
$externalCode = isset($json['code']) ? (string)$json['code'] : null;
|
||||
|
||||
|
||||
$data = is_array($json['data'] ?? null) ? $json['data'] : null;
|
||||
|
||||
if ($data === null) {
|
||||
|
||||
http_response_code(502);
|
||||
|
||||
echo json_encode(['error' => 'External response missing data'], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 仅给请求端返回 token;其它字段仅用于 SQLite 备档
|
||||
|
||||
$token = isset($data['token']) ? (string)$data['token'] : null;
|
||||
|
||||
|
||||
$pdo = sendcard_get_pdo($sqlitePath);
|
||||
|
||||
sendcard_init_db($pdo);
|
||||
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
|
||||
'INSERT INTO cursor_login_backups (
|
||||
|
||||
external_msg, external_code,
|
||||
|
||||
external_id, email, token, createTime, lastTokenTime, status,
|
||||
|
||||
deviceCode, activationCode, useTime, lastId, deleted, emailLastStatus,
|
||||
|
||||
useCount, pwd, type, updateTime, banName,
|
||||
|
||||
webToken, cpName, comeStatus, comePushTime,
|
||||
|
||||
freeSevenStatus, windsurfUseStatus, windsurfStatus, windsurfToken,
|
||||
|
||||
windsurfPwd, windsurfUseTime, raw_json
|
||||
|
||||
) VALUES (
|
||||
|
||||
:external_msg, :external_code,
|
||||
|
||||
:external_id, :email, :token, :createTime, :lastTokenTime, :status,
|
||||
|
||||
:deviceCode, :activationCode, :useTime, :lastId, :deleted, :emailLastStatus,
|
||||
|
||||
:useCount, :pwd, :type, :updateTime, :banName,
|
||||
|
||||
:webToken, :cpName, :comeStatus, :comePushTime,
|
||||
|
||||
:freeSevenStatus, :windsurfUseStatus, :windsurfStatus, :windsurfToken,
|
||||
|
||||
:windsurfPwd, :windsurfUseTime, :raw_json
|
||||
|
||||
)'
|
||||
|
||||
);
|
||||
|
||||
|
||||
// 一次回调:把 external data 的字段拆出来逐列存储
|
||||
|
||||
$stmt->execute([
|
||||
|
||||
':external_msg' => $externalMsg,
|
||||
|
||||
':external_code' => $externalCode,
|
||||
|
||||
':external_id' => isset($data['id']) ? (int)$data['id'] : null,
|
||||
|
||||
':email' => $data['email'] ?? null,
|
||||
|
||||
':token' => $token,
|
||||
|
||||
':createTime' => $data['createTime'] ?? null,
|
||||
|
||||
':lastTokenTime' => $data['lastTokenTime'] ?? null,
|
||||
|
||||
':status' => isset($data['status']) ? (int)$data['status'] : null,
|
||||
|
||||
':deviceCode' => $data['deviceCode'] ?? null,
|
||||
|
||||
':activationCode' => $data['activationCode'] ?? null,
|
||||
|
||||
':useTime' => $data['useTime'] ?? null,
|
||||
|
||||
':lastId' => isset($data['lastId']) ? (int)$data['lastId'] : null,
|
||||
|
||||
':deleted' => isset($data['deleted']) ? (int)$data['deleted'] : null,
|
||||
|
||||
':emailLastStatus' => isset($data['emailLastStatus']) ? (int)$data['emailLastStatus'] : null,
|
||||
|
||||
':useCount' => isset($data['useCount']) ? (int)$data['useCount'] : null,
|
||||
|
||||
':pwd' => $data['pwd'] ?? null,
|
||||
|
||||
':type' => isset($data['type']) ? (int)$data['type'] : null,
|
||||
|
||||
':updateTime' => $data['updateTime'] ?? null,
|
||||
|
||||
':banName' => $data['banName'] ?? null,
|
||||
|
||||
':webToken' => $data['webToken'] ?? null,
|
||||
|
||||
':cpName' => $data['cpName'] ?? null,
|
||||
|
||||
':comeStatus' => isset($data['comeStatus']) ? (int)$data['comeStatus'] : null,
|
||||
|
||||
':comePushTime' => $data['comePushTime'] ?? null,
|
||||
|
||||
':freeSevenStatus' => isset($data['freeSevenStatus']) ? (int)$data['freeSevenStatus'] : null,
|
||||
|
||||
':windsurfUseStatus' => isset($data['windsurfUseStatus']) ? (int)$data['windsurfUseStatus'] : null,
|
||||
|
||||
':windsurfStatus' => isset($data['windsurfStatus']) ? (int)$data['windsurfStatus'] : null,
|
||||
|
||||
':windsurfToken' => $data['windsurfToken'] ?? null,
|
||||
|
||||
':windsurfPwd' => $data['windsurfPwd'] ?? null,
|
||||
|
||||
':windsurfUseTime' => $data['windsurfUseTime'] ?? null,
|
||||
|
||||
':raw_json' => json_encode($json, JSON_UNESCAPED_UNICODE),
|
||||
|
||||
]);
|
||||
|
||||
|
||||
if ($token === null || $token === '') {
|
||||
|
||||
http_response_code(502);
|
||||
|
||||
echo json_encode(['error' => 'External response missing token', 'external_http_status' => $httpStatus], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 只返回 token 给请求端
|
||||
|
||||
echo json_encode(['token' => $token], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
} catch (Throwable $e) {
|
||||
|
||||
http_response_code(502);
|
||||
|
||||
echo json_encode(['error' => 'Bad Gateway', 'detail' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
156
api/getcard_poll.php
Normal file
156
api/getcard_poll.php
Normal file
@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* 定时轮询拉取外部凭证并追加写入本地 txt(逻辑与 getcard 调同一 external 接口,仅触发节奏不同)。
|
||||
*
|
||||
* 设备:使用 config['poll'] 的机器 B 的 device_code / device_code_md5;getcard.php 使用顶层机器 A。
|
||||
* 原因:上游常对单设备或请求频次有限制,即时请求走 A、定时轮询走 B,避免抢同一套额度。
|
||||
*
|
||||
* 间隔:基准 5 分钟 ±3 分钟随机,且不少于 4 分钟(由「下次执行时间」控制)。
|
||||
* 宝塔 / Linux:计划任务每分钟执行一次本脚本;未到点会直接退出,不会请求外部接口。
|
||||
*
|
||||
* 示例 crontab(把路径改成你的站点根目录下的本文件):
|
||||
* * * * * * /usr/bin/php /www/wwwroot/你的域名/api/getcard_poll.php >>/www/wwwroot/你的域名/data/getcard_poll_cron.log 2>&1
|
||||
*/
|
||||
|
||||
$cfg = require __DIR__ . '/../config.php';
|
||||
|
||||
$isCli = PHP_SAPI === 'cli';
|
||||
$cronKey = isset($cfg['poll_cron_key']) ? (string)$cfg['poll_cron_key'] : '';
|
||||
if (!$isCli) {
|
||||
if ($cronKey === '' || (($_GET['key'] ?? '') !== $cronKey)) {
|
||||
http_response_code(403);
|
||||
header('Content-Type: text/plain; charset=utf-8');
|
||||
echo 'Forbidden';
|
||||
exit;
|
||||
}
|
||||
header('Content-Type: text/plain; charset=utf-8');
|
||||
}
|
||||
|
||||
$dataDir = __DIR__ . '/../data';
|
||||
if (!is_dir($dataDir)) {
|
||||
if (!@mkdir($dataDir, 0755, true) && !is_dir($dataDir)) {
|
||||
sendcard_poll_out("Cannot create data directory: {$dataDir}\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
$statePath = isset($cfg['poll_state_json']) && $cfg['poll_state_json'] !== ''
|
||||
? (string)$cfg['poll_state_json']
|
||||
: $dataDir . DIRECTORY_SEPARATOR . 'getcard_poll_state.json';
|
||||
$logPath = isset($cfg['poll_log_txt']) && $cfg['poll_log_txt'] !== ''
|
||||
? (string)$cfg['poll_log_txt']
|
||||
: $dataDir . DIRECTORY_SEPARATOR . 'getcard_poll_log.txt';
|
||||
|
||||
$externalBase = trim((string)($cfg['external_base_url'] ?? ''));
|
||||
if ($externalBase === '') {
|
||||
sendcard_poll_out("Config missing: external_base_url\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
$externalUrl = sendcard_poll_build_external_url($cfg);
|
||||
} catch (InvalidArgumentException $e) {
|
||||
sendcard_poll_out('Config invalid: ' . $e->getMessage() . "\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$now = time();
|
||||
$fh = fopen($statePath, 'c+');
|
||||
if ($fh === false) {
|
||||
sendcard_poll_out("Cannot open state file: {$statePath}\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!flock($fh, LOCK_EX)) {
|
||||
fclose($fh);
|
||||
sendcard_poll_out("Cannot lock state file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$raw = stream_get_contents($fh);
|
||||
$state = is_string($raw) && $raw !== '' ? json_decode($raw, true) : null;
|
||||
if (!is_array($state)) {
|
||||
$state = [];
|
||||
}
|
||||
$nextRunAt = isset($state['next_run_at']) ? (int)$state['next_run_at'] : 0;
|
||||
|
||||
if ($now < $nextRunAt) {
|
||||
flock($fh, LOCK_UN);
|
||||
fclose($fh);
|
||||
$wait = $nextRunAt - $now;
|
||||
sendcard_poll_out("Skip: next run in {$wait}s (at " . date('Y-m-d H:i:s', $nextRunAt) . ")\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../lib/external.php';
|
||||
|
||||
$linePrefix = '[' . date('Y-m-d H:i:s') . '] ';
|
||||
$logBlock = '';
|
||||
|
||||
try {
|
||||
$resp = sendcard_fetch_credentials($externalUrl);
|
||||
$httpStatus = $resp['http_status'];
|
||||
$json = $resp['json'];
|
||||
$token = isset($json['data']['token']) ? (string)$json['data']['token'] : null;
|
||||
$logBlock = $token !== null && $token !== ''
|
||||
? $token . "\n"
|
||||
: $linePrefix . "http={$httpStatus} token missing: " . json_encode($json, JSON_UNESCAPED_UNICODE) . "\n";
|
||||
} catch (Throwable $e) {
|
||||
$logBlock = $linePrefix . 'ERROR ' . $e->getMessage() . "\n";
|
||||
}
|
||||
|
||||
// $intervalSec = max(4 * 60, 5 * 60 + random_int(-3 * 60, 3 * 60));
|
||||
$intervalSec = random_int(540, 840);
|
||||
$newNext = $now + $intervalSec;
|
||||
$state['next_run_at'] = $newNext;
|
||||
$state['last_run_at'] = $now;
|
||||
$state['last_interval_sec'] = $intervalSec;
|
||||
|
||||
rewind($fh);
|
||||
ftruncate($fh, 0);
|
||||
fwrite($fh, json_encode($state, JSON_UNESCAPED_UNICODE));
|
||||
fflush($fh);
|
||||
flock($fh, LOCK_UN);
|
||||
fclose($fh);
|
||||
|
||||
if ($logBlock !== '') {
|
||||
file_put_contents($logPath, $logBlock, FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
|
||||
sendcard_poll_out(
|
||||
$logBlock . "Scheduled next run in {$intervalSec}s (at " . date('Y-m-d H:i:s', $newNext) . ")\n"
|
||||
);
|
||||
exit(0);
|
||||
|
||||
function sendcard_poll_out(string $msg): void
|
||||
{
|
||||
echo $msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 轮询请求 URL:使用 config['poll'] 下的 device_code、device_code_md5 作为查询参数值(与 getcard 顶层 device_* 分离)。
|
||||
*
|
||||
* @param array<string, mixed> $cfg
|
||||
*/
|
||||
function sendcard_poll_build_external_url(array $cfg): string
|
||||
{
|
||||
$base = trim((string)($cfg['external_base_url'] ?? ''));
|
||||
if ($base === '') {
|
||||
throw new InvalidArgumentException('external_base_url');
|
||||
}
|
||||
|
||||
$poll = $cfg['poll'] ?? null;
|
||||
if (!is_array($poll)) {
|
||||
throw new InvalidArgumentException("config['poll'] 须为数组且含 device_code、device_code_md5");
|
||||
}
|
||||
$dc = trim((string)($poll['device_code'] ?? ''));
|
||||
$dm = trim((string)($poll['device_code_md5'] ?? ''));
|
||||
if ($dc === '' || $dm === '') {
|
||||
throw new InvalidArgumentException("config['poll']['device_code'] 与 ['device_code_md5'] 勿留空");
|
||||
}
|
||||
|
||||
return $base . '?device_code=' . rawurlencode($dc) . '&device_code_md5=' . rawurlencode($dm);
|
||||
}
|
||||
24
config.php
Normal file
24
config.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
// 统一配置(建议改用环境变量/secret 管理,避免硬编码敏感信息)
|
||||
|
||||
return [
|
||||
// 外部接口:获取 credentials(getcard.php 与 getcard_poll.php 共用地址)
|
||||
'external_base_url' => 'http://82.157.20.83:9091/api/cursorLoginZs/getCredentials',
|
||||
|
||||
// 机器 A:仅 api/getcard.php 使用(即时取 token,走 Web ?type=xianyu)
|
||||
'device_code' => 'BFEBFBFF000A06A4-5210N57MP0004BXP00R2-c84b8af03a6c40e888f72576a5f34a1f',
|
||||
'device_code_md5' => 'bc5613415689b537679ba22c2feae68c',
|
||||
|
||||
// 机器 B:仅 api/getcard_poll.php 使用(定时轮询,与 A 设备参数不同)
|
||||
// 与 A 共用 external_base_url;因上游常对「单设备 / 请求频次」有限制,用 B 分流轮询与即时请求。
|
||||
'poll' => [
|
||||
'device_code' => '178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f',
|
||||
'device_code_md5' => 'c6cc6802084015278275058c64bfb943',
|
||||
],
|
||||
|
||||
// SQLite 数据库文件路径(相对当前项目目录)
|
||||
'sqlite_path' => __DIR__ . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'sendcard.sqlite',
|
||||
|
||||
// getcard_poll 可选:poll_log_txt、poll_state_json;poll_cron_key 非空时允许 Web ?key= 触发(慎用)
|
||||
];
|
||||
|
||||
410
data/getcard_poll_cron.log
Normal file
410
data/getcard_poll_cron.log
Normal file
@ -0,0 +1,410 @@
|
||||
|
||||
Skip: next run in 180s (at 2026-04-12 14:56:01)
|
||||
Skip: next run in 120s (at 2026-04-12 14:56:01)
|
||||
Skip: next run in 60s (at 2026-04-12 14:56:01)
|
||||
[2026-04-12 14:56:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360474,"email":"ghxidphj2@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczMzBTRkY3Vk5HUkFNWjZSQk1OSFNKIiwidGltZSI6IjE3NzU1NTg5MzciLCJyYW5kb21uZXNzIjoiNDliMDE4ZTQtOTIxOS00YWI0IiwiZXhwIjoxNzgwNzQyOTM3LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.2Z3y3M-UqNyAt957l94B-Y8FPktLy7VBYyAKN9EXedA","createTime":"2025-05-25 14:45:37","lastTokenTime":"2025-05-25 14:46:35","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 14:56:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 14:56:03","banName":"121 948 415(服务器028)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 18:48:58","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 240s (at 2026-04-12 15:00:01)
|
||||
Skip: next run in 180s (at 2026-04-12 15:00:01)
|
||||
Skip: next run in 120s (at 2026-04-12 15:00:01)
|
||||
Skip: next run in 60s (at 2026-04-12 15:00:01)
|
||||
[2026-04-12 15:00:01] http=200 {"msg":"请勿频繁刷新,请在1分钟后重试","code":"500","data":null}
|
||||
Scheduled next run in 240s (at 2026-04-12 15:04:01)
|
||||
Skip: next run in 180s (at 2026-04-12 15:04:01)
|
||||
Skip: next run in 120s (at 2026-04-12 15:04:01)
|
||||
Skip: next run in 60s (at 2026-04-12 15:04:01)
|
||||
[2026-04-12 15:04:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360540,"email":"hykhls97@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczM0FCM0pEUllRMFRLRTNFQ1FTRzNXIiwidGltZSI6IjE3NzU1NTkxMjkiLCJyYW5kb21uZXNzIjoiYzg4ZjgyNzgtNmM5OS00YmQ3IiwiZXhwIjoxNzgwNzQzMTI5LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.FhjrevelxTRQSULSy9u_jjVGVOURzsPc7HMFElkPggs","createTime":"2025-05-25 14:50:50","lastTokenTime":"2025-05-25 14:51:54","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 15:04:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 15:04:04","banName":"777 953 113(服务器010)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 18:52:10","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 682s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 622s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 562s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 502s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 442s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 382s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 322s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 262s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 202s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 142s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 82s (at 2026-04-12 15:15:23)
|
||||
Skip: next run in 22s (at 2026-04-12 15:15:23)
|
||||
[2026-04-12 15:16:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360636,"email":"xtpijq69@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczM1E4MkpSWEs4UUhERkQwVjIwUjVGIiwidGltZSI6IjE3NzU1NTk0NzQiLCJyYW5kb21uZXNzIjoiZDk1YTZhNzktZjA1Yi00MTBiIiwiZXhwIjoxNzgwNzQzNDc0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.veuKIdBap-bLJZbXBHmeozrORS0C5SJITY3bqbJewRk","createTime":"2025-05-25 14:57:54","lastTokenTime":"2025-05-28 03:47:10","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 15:16:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 15:16:03","banName":"208 079 807(服务器003)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 18:57:55","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 613s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 552s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 493s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 433s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 372s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 313s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 253s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 192s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 133s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 73s (at 2026-04-12 15:26:14)
|
||||
Skip: next run in 12s (at 2026-04-12 15:26:14)
|
||||
[2026-04-12 15:27:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360703,"email":"docfz755@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNDBIQjBQTTUzMlNHSlM4TTEwWDBIIiwidGltZSI6IjE3NzU1NTk3NDgiLCJyYW5kb21uZXNzIjoiY2FkZTJjNTMtZjMxNi00OTI0IiwiZXhwIjoxNzgwNzQzNzQ4LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.rOnalBrGmkRg1EvLmwROKkKDZ5BLenHkolA-xDAnk38","createTime":"2025-05-25 15:02:57","lastTokenTime":"2025-05-25 22:12:51","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 15:27:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 15:27:03","banName":"286 782 660(服务器023)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:02:28","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 678s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 618s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 558s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 498s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 438s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 378s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 318s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 258s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 198s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 138s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 78s (at 2026-04-12 15:38:19)
|
||||
Skip: next run in 18s (at 2026-04-12 15:38:19)
|
||||
[2026-04-12 15:39:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360799,"email":"lqv323@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNERTMkNERDhBSjFURVRIMVhTUUQzIiwidGltZSI6IjE3NzU1NjAxMTciLCJyYW5kb21uZXNzIjoiODE3ZWVhMmItZGU1My00OGE0IiwiZXhwIjoxNzgwNzQ0MTE3LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.zXE8IOUZ-PEvjZG29TrmuoTCc14FaMZ2wgsrCg8E8m8","createTime":"2025-05-25 15:10:11","lastTokenTime":"2025-05-25 22:10:12","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 15:39:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 15:39:04","banName":"522 066 181(服务器005)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:08:38","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 591s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 531s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 471s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 411s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 351s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 291s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 231s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 171s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 111s (at 2026-04-12 15:48:52)
|
||||
Skip: next run in 51s (at 2026-04-12 15:48:52)
|
||||
[2026-04-12 15:49:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360903,"email":"p916306@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNFc1MVY2MVJRQkdIUTg0VlBUQ1lBIiwidGltZSI6IjE3NzU1NjA0ODAiLCJyYW5kb21uZXNzIjoiOTgwMzE4OWEtNmUxNi00MTA5IiwiZXhwIjoxNzgwNzQ0NDgwLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.nWaOG6r1j4fF6qTy-ToDbM8wz4GUpDiji0KbzWbH4d8","createTime":"2025-05-25 15:18:02","lastTokenTime":"2025-05-28 03:51:10","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 15:49:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 15:49:03","banName":"363 454 639(服务器029)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:14:41","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 645s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 585s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 525s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 465s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 405s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 345s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 285s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 225s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 165s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 105s (at 2026-04-12 15:59:46)
|
||||
Skip: next run in 45s (at 2026-04-12 15:59:46)
|
||||
[2026-04-12 16:00:01] http=200 {"msg":"操作成功","code":"200","data":{"id":360990,"email":"lbh18419@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNTdOTVhaMUU3WjNOTTJaMllFUFJWIiwidGltZSI6IjE3NzU1NjA4MTQiLCJyYW5kb21uZXNzIjoiZTM5NTlkNWItODY3MS00NjQ0IiwiZXhwIjoxNzgwNzQ0ODE0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.kMOnWvXxGevb5k9VCnltzjvRRvkeoCycaSRVXzColdI","createTime":"2025-05-25 15:24:20","lastTokenTime":"2025-05-25 15:25:18","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:00:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:00:03","banName":"363 454 639(服务器029)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:20:15","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 575s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 515s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 455s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 395s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 335s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 275s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 215s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 155s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 95s (at 2026-04-12 16:09:36)
|
||||
Skip: next run in 35s (at 2026-04-12 16:09:36)
|
||||
[2026-04-12 16:10:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361080,"email":"lkpro92@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNU0zWllKSkFaUVdaRFJETVlDU1I5IiwidGltZSI6IjE3NzU1NjExOTYiLCJyYW5kb21uZXNzIjoiZDMyYmM3ODMtOTQxNy00YzEyIiwiZXhwIjoxNzgwNzQ1MTk2LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9._Gijq-Es_b130YmbJ4G0aUuiVMu6AmBKBmyqy4y8jAQ","createTime":"2025-05-25 15:31:08","lastTokenTime":"2025-05-25 15:31:55","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:10:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:10:03","banName":"150 302 859(服务器027)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:26:37","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 548s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 488s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 428s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 368s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 308s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 248s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 188s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 128s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 68s (at 2026-04-12 16:19:09)
|
||||
Skip: next run in 8s (at 2026-04-12 16:19:09)
|
||||
[2026-04-12 16:20:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361164,"email":"ibd175@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNVo3RzJGQVdQUTBSQ1JSSDRTUllSIiwidGltZSI6IjE3NzU1NjE1MTQiLCJyYW5kb21uZXNzIjoiNDY0NjRlZjEtMWE5Yi00OTY1IiwiZXhwIjoxNzgwNzQ1NTE0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.YJ8xQ7aW4smReVv9v-apkB0T5TYlDBZIh7lJIyZflDM","createTime":"2025-05-25 15:37:12","lastTokenTime":"2025-05-25 22:00:15","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:20:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:20:03","banName":"363 454 639(服务器029)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:31:55","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 584s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 523s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 464s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 404s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 344s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 284s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 224s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 164s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 104s (at 2026-04-12 16:29:45)
|
||||
Skip: next run in 44s (at 2026-04-12 16:29:45)
|
||||
[2026-04-12 16:30:02] http=200 {"msg":"操作成功","code":"200","data":{"id":361244,"email":"pmol496338@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNjlETVI4QzEzSzhQQTlXNVdKUTZCIiwidGltZSI6IjE3NzU1NjE4NzUiLCJyYW5kb21uZXNzIjoiZDAzMTNjZTYtMjFlOC00Y2JiIiwiZXhwIjoxNzgwNzQ1ODc1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.ragaojnQjNmGaerTkSBB0iEgGlxxuHrqZ4GO15FlG6A","createTime":"2025-05-25 15:42:45","lastTokenTime":"2025-05-25 21:57:58","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:30:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:30:04","banName":"470 126 354(服务器007)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:37:56","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 515s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 456s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 395s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 336s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 276s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 216s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 156s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 96s (at 2026-04-12 16:38:37)
|
||||
Skip: next run in 36s (at 2026-04-12 16:38:37)
|
||||
[2026-04-12 16:39:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361325,"email":"ylrphzen1@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNk1DSDJCVlhXNllSMjFQSjNOMEFQIiwidGltZSI6IjE3NzU1NjIxNjciLCJyYW5kb21uZXNzIjoiNDQ2NTQxMGMtMDlkYi00ODJiIiwiZXhwIjoxNzgwNzQ2MTY3LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.2IgMoNGPnau-hNKDgKLh4LnB3FLZBg0-dlRsti8c3fY","createTime":"2025-05-25 15:48:45","lastTokenTime":"2025-05-28 03:58:25","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:39:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:39:03","banName":"271 784 049(服务器004)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:42:48","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 576s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 516s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 456s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 396s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 336s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 276s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 216s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 156s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 96s (at 2026-04-12 16:48:37)
|
||||
Skip: next run in 36s (at 2026-04-12 16:48:37)
|
||||
[2026-04-12 16:49:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361411,"email":"by0375@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczNlpKQTM1SDQ4NlE2RUVYTjRaMk00IiwidGltZSI6IjE3NzU1NjI0MTAiLCJyYW5kb21uZXNzIjoiOTJlYWI0MDItNDc0NC00NmE4IiwiZXhwIjoxNzgwNzQ2NDEwLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.MIQ1PwuAyslWfj4mbhczeC7mkbkFTgi3jUvE8PhFqYM","createTime":"2025-05-25 15:54:51","lastTokenTime":"2025-05-28 04:00:26","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 16:49:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 16:49:04","banName":"548 867 904(服务器030)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:46:51","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 708s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 648s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 588s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 528s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 468s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 408s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 348s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 288s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 228s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 168s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 108s (at 2026-04-12 17:00:49)
|
||||
Skip: next run in 48s (at 2026-04-12 17:00:49)
|
||||
[2026-04-12 17:01:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361507,"email":"wolts659@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczN0MySlpSRlgzTUZIMFlHNUpOV0JQIiwidGltZSI6IjE3NzU1NjI3MjUiLCJyYW5kb21uZXNzIjoiMDY2OGMzZjMtMjI1Yy00NTQzIiwiZXhwIjoxNzgwNzQ2NzI1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.FBvmLdgjJT_l-WFnGATbEToCZN7DIJyWqytux7fn-NE","createTime":"2025-05-25 16:01:41","lastTokenTime":"2025-05-25 16:02:36","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:01:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:01:03","banName":"150 302 859(服务器027)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:52:06","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 667s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 607s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 547s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 487s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 427s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 367s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 307s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 247s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 187s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 127s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 67s (at 2026-04-12 17:12:08)
|
||||
Skip: next run in 7s (at 2026-04-12 17:12:08)
|
||||
[2026-04-12 17:13:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361605,"email":"wxt5@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczN1M0RTQ2SFdWUlRZQlk2MFpBN1o4IiwidGltZSI6IjE3NzU1NjMxMTIiLCJyYW5kb21uZXNzIjoiOGM5ODFkY2QtMDk5Zi00OWI3IiwiZXhwIjoxNzgwNzQ3MTEyLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.h47MYTyPCajxtXbrSBeH4pgND2jFw0mMV2LvwH8xKT8","createTime":"2025-05-25 16:08:49","lastTokenTime":"2025-05-25 16:09:57","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:13:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:13:04","banName":"845 050 108(服务器026)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 19:58:33","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 667s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 607s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 547s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 487s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 427s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 367s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 307s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 247s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 187s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 127s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 67s (at 2026-04-12 17:24:08)
|
||||
Skip: next run in 7s (at 2026-04-12 17:24:08)
|
||||
[2026-04-12 17:25:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361694,"email":"fv514121@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczODRXUEU4U1FKNVZGQ05YWEdaUTRLIiwidGltZSI6IjE3NzU1NjM0NDIiLCJyYW5kb21uZXNzIjoiZmNiOWY4Y2QtYmNmMy00MzczIiwiZXhwIjoxNzgwNzQ3NDQyLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.fl2Vg4tnOSi8_smibIIcF8aI7tqX6-twYcXNrbfqbxQ","createTime":"2025-05-25 16:15:14","lastTokenTime":"2025-05-28 04:05:53","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:25:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:25:03","banName":"845 050 108(服务器026)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:04:03","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 677s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 617s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 557s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 497s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 437s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 377s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 317s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 257s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 197s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 137s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 77s (at 2026-04-12 17:36:18)
|
||||
Skip: next run in 17s (at 2026-04-12 17:36:18)
|
||||
[2026-04-12 17:37:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361805,"email":"eu75@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczOEtQTVdRNlcxNURTUlYzSlpXMUNRIiwidGltZSI6IjE3NzU1NjM4NDkiLCJyYW5kb21uZXNzIjoiY2VmYWFmZDctYjlhYy00OWRkIiwiZXhwIjoxNzgwNzQ3ODQ5LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.2-W-Mr6IGPjqa-v0IUQRrjelW0XdhHcBeSwzHZ8zcbo","createTime":"2025-05-25 16:23:19","lastTokenTime":"2025-05-25 16:24:14","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:37:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:37:04","banName":"845 050 108(服务器026)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:10:50","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 522s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 462s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 402s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 342s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 282s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 222s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 162s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 102s (at 2026-04-12 17:45:43)
|
||||
Skip: next run in 42s (at 2026-04-12 17:45:43)
|
||||
[2026-04-12 17:46:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361881,"email":"cwbbec553623@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczOFhSR1lQRzEzRlNCUDgyR0RIUFFEIiwidGltZSI6IjE3NzU1NjQxODEiLCJyYW5kb21uZXNzIjoiYmJhNWJkM2ItYmE3Mi00ZmQ2IiwiZXhwIjoxNzgwNzQ4MTgxLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.6zC5LXuJTpO74dMlcMRQCQgO5sS-oaIRPQHl5531QJg","createTime":"2025-05-25 16:28:49","lastTokenTime":"2025-05-25 16:29:40","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:46:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:46:04","banName":"331 152 856(服务器001)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:16:22","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 661s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 601s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 541s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 481s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 421s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 361s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 301s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 241s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 181s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 121s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 61s (at 2026-04-12 17:57:02)
|
||||
Skip: next run in 1s (at 2026-04-12 17:57:02)
|
||||
[2026-04-12 17:58:01] http=200 {"msg":"操作成功","code":"200","data":{"id":361971,"email":"f6191@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczOTlNOVYwNzk4WDBZRzdRVkhBQ01RIiwidGltZSI6IjE3NzU1NjQ0ODkiLCJyYW5kb21uZXNzIjoiY2Q3OGExYTEtNjBkZi00ZjY0IiwiZXhwIjoxNzgwNzQ4NDg5LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.5EvjRKUGLBgG5TfRX-KFn2wws3hy-kuNLZ0cyCHiBXc","createTime":"2025-05-25 16:35:18","lastTokenTime":"2025-05-25 16:36:14","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 17:58:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 17:58:03","banName":"792 818 793(服务器002)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:21:30","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 646s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 586s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 526s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 466s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 406s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 346s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 286s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 226s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 166s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 106s (at 2026-04-12 18:08:47)
|
||||
Skip: next run in 46s (at 2026-04-12 18:08:47)
|
||||
[2026-04-12 18:09:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362104,"email":"jazozz6483@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczOVRXRlpGVzVYRThQMTlYNzY1M00xIiwidGltZSI6IjE3NzU1NjQ3OTgiLCJyYW5kb21uZXNzIjoiYWRiZTg0NDAtZmYxOS00OTYxIiwiZXhwIjoxNzgwNzQ4Nzk4LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.7BCDnL6G26zmomtMdJ5KNCrQ5VhU_07Sheek2NN0vCw","createTime":"2025-05-25 16:44:43","lastTokenTime":"2025-05-28 04:11:57","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 18:09:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 18:09:03","banName":"845 050 108(服务器026)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:26:39","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 640s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 580s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 520s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 460s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 400s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 340s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 280s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 220s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 160s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 100s (at 2026-04-12 18:19:41)
|
||||
Skip: next run in 40s (at 2026-04-12 18:19:41)
|
||||
[2026-04-12 18:20:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362231,"email":"mtyda1417@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQUJWRFRHSDk3UjZORFFCTkU2OEg0IiwidGltZSI6IjE3NzU1NjUwNzMiLCJyYW5kb21uZXNzIjoiZmVjZjhjYjgtNjIzNC00ZGQ1IiwiZXhwIjoxNzgwNzQ5MDczLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.SK0oovswVpp9Bzhds1VAfN-3kwHOWiTGftmw9TalEMU","createTime":"2025-05-25 16:54:00","lastTokenTime":"2025-05-25 16:54:50","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 18:20:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 18:20:03","banName":"784 730 890(服务器020)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:31:14","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 543s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 483s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 423s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 363s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 303s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 243s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 183s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 123s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 63s (at 2026-04-12 18:29:04)
|
||||
Skip: next run in 3s (at 2026-04-12 18:29:04)
|
||||
[2026-04-12 18:30:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362365,"email":"zzwv139650@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQVhHRVo1OEM3UVNIVjk3Wlo3RUNSIiwidGltZSI6IjE3NzU1NjU0NzUiLCJyYW5kb21uZXNzIjoiMjBjODIwMGYtMGU2ZC00ZTdiIiwiZXhwIjoxNzgwNzQ5NDc1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.Nr5yL0QK9nOv7SN4q2cTfSeE_X-hknv9NVCYwEw1mY0","createTime":"2025-05-25 17:03:38","lastTokenTime":"2025-05-25 17:05:36","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 18:30:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 18:30:03","banName":"575 674 474(服务器021)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:37:56","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 693s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 633s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 573s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 513s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 453s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 393s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 333s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 273s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 213s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 153s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 93s (at 2026-04-12 18:41:34)
|
||||
Skip: next run in 33s (at 2026-04-12 18:41:34)
|
||||
[2026-04-12 18:42:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362472,"email":"vojzngwe29857@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQkNLQjJBTVNYRDJIVDBaS1IxWjJZIiwidGltZSI6IjE3NzU1NjU4MzAiLCJyYW5kb21uZXNzIjoiZWQ4NDNmOTYtZTc5MS00MzcwIiwiZXhwIjoxNzgwNzQ5ODMwLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.rkmV272BxiZLBXz0T5gtZmb9MQFszLkq5CTV_I9ggYk","createTime":"2025-05-25 17:11:53","lastTokenTime":"2025-05-28 04:16:39","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 18:42:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 18:42:03","banName":"208 079 807(服务器003)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:43:51","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 511s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 451s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 391s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 330s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 271s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 211s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 150s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 91s (at 2026-04-12 18:50:32)
|
||||
Skip: next run in 31s (at 2026-04-12 18:50:32)
|
||||
[2026-04-12 18:51:02] http=200 {"msg":"操作成功","code":"200","data":{"id":362551,"email":"oejx86@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQlE2Nk5YRjdNMUcwQjhXMDZURkQyIiwidGltZSI6IjE3NzU1NjYwMzQiLCJyYW5kb21uZXNzIjoiZTc1OTBmMWMtYjliMS00OTNiIiwiZXhwIjoxNzgwNzUwMDM0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.fgRcqDErrn3_CEDSvn6P1uud71ToBV-zBz1tUq539Ls","createTime":"2025-05-25 17:17:40","lastTokenTime":"2025-05-25 17:18:42","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 18:51:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 18:51:04","banName":"777 953 113(服务器010)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:47:15","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 586s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 527s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 466s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 407s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 347s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 287s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 227s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 167s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 107s (at 2026-04-12 19:00:48)
|
||||
Skip: next run in 47s (at 2026-04-12 19:00:48)
|
||||
[2026-04-12 19:01:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362615,"email":"bywjv73427@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQlo5V0s1VjQyTTNRTk5YMlJLVE1EIiwidGltZSI6IjE3NzU1NjYyNjQiLCJyYW5kb21uZXNzIjoiYWE0NjE3NjEtNjVmZC00ZGMzIiwiZXhwIjoxNzgwNzUwMjY0LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.8snD6f1hN7OIojiLbu7rJkCMorbLj9W5juLUDbnfMIU","createTime":"2025-05-25 17:22:06","lastTokenTime":"2025-05-25 17:22:52","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 19:01:04","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 19:01:04","banName":"208 079 807(服务器003)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:51:05","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 530s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 470s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 410s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 350s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 290s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 230s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 170s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 110s (at 2026-04-12 19:09:51)
|
||||
Skip: next run in 50s (at 2026-04-12 19:09:51)
|
||||
[2026-04-12 19:10:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362672,"email":"hlalek5987@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQzczV0VGSDRFVzI0QzY5R0YwREVRIiwidGltZSI6IjE3NzU1NjY0ODkiLCJyYW5kb21uZXNzIjoiYjFkYjE1N2YtMjQxNS00ZjA2IiwiZXhwIjoxNzgwNzUwNDg5LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.2IFG0d9nJSHgyDODrYAIiPauQFDJaXCRa9hX6KMuUTE","createTime":"2025-05-25 17:26:21","lastTokenTime":"2025-05-25 17:27:29","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 19:10:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 19:10:03","banName":"777 953 113(服务器010)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:54:50","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 602s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 542s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 482s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 422s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 362s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 302s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 242s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 182s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 122s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 62s (at 2026-04-12 19:20:03)
|
||||
Skip: next run in 2s (at 2026-04-12 19:20:03)
|
||||
[2026-04-12 19:21:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362755,"email":"tvxfgkkp0@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQ0ozVFcwVzBHQjk4NUdWNU0yRUpEIiwidGltZSI6IjE3NzU1NjY3NzIiLCJyYW5kb21uZXNzIjoiMDllNDQ3NTYtMDlmMS00NzA1IiwiZXhwIjoxNzgwNzUwNzcyLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.SXs9Oo9RWeLyCv-oQfg2Gd84PkaFxF3ZqByZtkJz434","createTime":"2025-05-25 17:32:22","lastTokenTime":"2025-05-25 21:22:58","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 19:21:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 19:21:03","banName":"284 966 873(服务器011)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 20:59:33","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 645s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 585s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 525s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 465s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 405s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 345s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 285s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 225s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 165s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 105s (at 2026-04-12 19:31:46)
|
||||
Skip: next run in 45s (at 2026-04-12 19:31:46)
|
||||
[2026-04-12 19:32:01] http=200 {"msg":"操作成功","code":"200","data":{"id":362845,"email":"g473197@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlczQ1hONUs1VlBIMTFQRFQ2V0NLTVI2IiwidGltZSI6IjE3NzU1NjcwODUiLCJyYW5kb21uZXNzIjoiZDk2Y2Q1MWMtNmQ3Ni00ZGZjIiwiZXhwIjoxNzgwNzUxMDg1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.gkDYgizxnBCGw5rHcfenRC0JnNzJNo5eAlPZ_Gcn0_I","createTime":"2025-05-25 17:38:41","lastTokenTime":"2025-05-25 17:39:54","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-12 19:32:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-12 19:32:03","banName":"845 050 108(服务器026)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-07 21:04:45","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 600s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 540s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 480s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 420s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 360s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 300s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 240s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 180s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 120s (at 2026-04-12 19:42:01)
|
||||
Skip: next run in 60s (at 2026-04-12 19:42:01)
|
||||
[2026-04-12 19:42:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 611s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 551s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 491s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 431s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 371s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 311s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 251s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 191s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 131s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 71s (at 2026-04-12 19:52:12)
|
||||
Skip: next run in 11s (at 2026-04-12 19:52:12)
|
||||
[2026-04-12 19:53:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 605s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 545s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 485s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 425s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 365s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 305s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 245s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 185s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 125s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 65s (at 2026-04-12 20:03:06)
|
||||
Skip: next run in 4s (at 2026-04-12 20:03:06)
|
||||
[2026-04-12 20:04:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 717s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 657s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 597s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 536s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 477s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 417s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 356s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 297s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 237s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 176s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 117s (at 2026-04-12 20:15:58)
|
||||
Skip: next run in 57s (at 2026-04-12 20:15:58)
|
||||
[2026-04-12 20:16:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 612s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 552s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 492s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 432s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 372s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 312s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 252s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 192s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 132s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 72s (at 2026-04-12 20:26:13)
|
||||
Skip: next run in 12s (at 2026-04-12 20:26:13)
|
||||
[2026-04-12 20:27:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 623s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 563s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 503s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 443s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 383s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 323s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 263s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 203s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 143s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 83s (at 2026-04-12 20:37:24)
|
||||
Skip: next run in 23s (at 2026-04-12 20:37:24)
|
||||
[2026-04-12 20:38:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 521s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 461s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 401s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 341s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 281s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 221s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 161s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 101s (at 2026-04-12 20:46:42)
|
||||
Skip: next run in 41s (at 2026-04-12 20:46:42)
|
||||
[2026-04-12 20:47:01] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 605s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 545s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 484s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 425s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 365s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 304s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 245s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 185s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 125s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 65s (at 2026-04-12 20:57:06)
|
||||
Skip: next run in 5s (at 2026-04-12 20:57:06)
|
||||
[2026-04-12 20:58:02] http=200 {"msg":"今天账号已获取完,请明天再来","code":"500","data":null}
|
||||
Scheduled next run in 518s (at 2026-04-12 21:06:40)
|
||||
Skip: next run in 459s (at 2026-04-12 21:06:40)
|
||||
Skip: next run in 399s (at 2026-04-12 21:06:40)
|
||||
Skip: next run in 339s (at 2026-04-12 21:06:40)
|
||||
Skip: next run in 279s (at 2026-04-12 21:06:40)
|
||||
Skip: next run in 219s (at 2026-04-12 21:06:40)
|
||||
[2026-04-13 08:32:01] http=200 {"msg":"操作成功","code":"200","data":{"id":365859,"email":"qouko42@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlc2Nk0wOTFCMzQ0SFFWQVFaSkY5NFpFIiwidGltZSI6IjE3NzU2MTYyMTUiLCJyYW5kb21uZXNzIjoiYzAwNjdjMDAtNTE3MC00MTQ3IiwiZXhwIjoxNzgwODAwMjE1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.5ib1UHn0ZrTA_0c0XmNYWmSyvZ8PXIUDjtMaYI9wgkA","createTime":"2025-05-26 19:46:15","lastTokenTime":"2025-05-26 19:47:16","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-13 08:32:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-13 08:32:03","banName":"792 818 793(服务器002)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-08 10:43:36","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
Scheduled next run in 712s (at 2026-04-13 08:43:53)
|
||||
1
data/getcard_poll_log.txt
Normal file
1
data/getcard_poll_log.txt
Normal file
@ -0,0 +1 @@
|
||||
[2026-04-13 08:32:01] http=200 {"msg":"操作成功","code":"200","data":{"id":365859,"email":"qouko42@cursor.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxSlc2Nk0wOTFCMzQ0SFFWQVFaSkY5NFpFIiwidGltZSI6IjE3NzU2MTYyMTUiLCJyYW5kb21uZXNzIjoiYzAwNjdjMDAtNTE3MC00MTQ3IiwiZXhwIjoxNzgwODAwMjE1LCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoic2Vzc2lvbiJ9.5ib1UHn0ZrTA_0c0XmNYWmSyvZ8PXIUDjtMaYI9wgkA","createTime":"2025-05-26 19:46:15","lastTokenTime":"2025-05-26 19:47:16","status":1,"deviceCode":"178BFBFF00A20F10-190449138600155-c84b8af03a6c40e888f72576a5f34a1f","activationCode":"cl0436a5348e904dc9b9b2a3fdd0a13c24","useTime":"2026-04-13 08:32:03","lastId":30,"deleted":0,"emailLastStatus":0,"useCount":0,"pwd":"cursorLogin","type":3,"updateTime":"2026-04-13 08:32:03","banName":"792 818 793(服务器002)","webToken":null,"cpName":null,"comeStatus":1,"comePushTime":"2026-04-08 10:43:36","freeSevenStatus":null,"windsurfUseStatus":88,"windsurfStatus":88,"windsurfToken":null,"windsurfPwd":null,"windsurfUseTime":null}}
|
||||
1
data/getcard_poll_state.json
Normal file
1
data/getcard_poll_state.json
Normal file
@ -0,0 +1 @@
|
||||
{"next_run_at":1776041033,"last_run_at":1776040321,"last_interval_sec":712}
|
||||
BIN
data/sendcard.sqlite
Normal file
BIN
data/sendcard.sqlite
Normal file
Binary file not shown.
39
index.html
Normal file
39
index.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>恭喜,站点创建成功!</title>
|
||||
<style>
|
||||
.container {
|
||||
width: 60%;
|
||||
margin: 10% auto 0;
|
||||
background-color: #f0f0f0;
|
||||
padding: 2% 5%;
|
||||
border-radius: 10px
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
ul li {
|
||||
line-height: 2.3
|
||||
}
|
||||
|
||||
a {
|
||||
color: #20a53a
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>恭喜, 站点创建成功!</h1>
|
||||
<h3>这是默认index.html,本页面由系统自动生成</h3>
|
||||
<ul>
|
||||
<li>本页面在FTP根目录下的index.html</li>
|
||||
<li>您可以修改、删除或覆盖本页面</li>
|
||||
<li>FTP相关信息,请到“面板系统后台 > FTP” 查看</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
61
lib/db.php
Normal file
61
lib/db.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
function sendcard_get_pdo(string $sqlitePath): PDO
|
||||
{
|
||||
$dir = dirname($sqlitePath);
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0777, true);
|
||||
}
|
||||
|
||||
$pdo = new PDO('sqlite:' . $sqlitePath, null, null, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
|
||||
return $pdo;
|
||||
}
|
||||
|
||||
function sendcard_init_db(PDO $pdo): void
|
||||
{
|
||||
// 备档表:每次回调把外部接口 data 全量字段写入(token 不会返回给前端以外,只会返回给请求端)
|
||||
$pdo->exec(
|
||||
'CREATE TABLE IF NOT EXISTS cursor_login_backups (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
fetched_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
external_msg TEXT,
|
||||
external_code TEXT,
|
||||
-- external data fields
|
||||
external_id INTEGER,
|
||||
email TEXT,
|
||||
token TEXT,
|
||||
createTime TEXT,
|
||||
lastTokenTime TEXT,
|
||||
status INTEGER,
|
||||
deviceCode TEXT,
|
||||
activationCode TEXT,
|
||||
useTime TEXT,
|
||||
lastId INTEGER,
|
||||
deleted INTEGER,
|
||||
emailLastStatus INTEGER,
|
||||
useCount INTEGER,
|
||||
pwd TEXT,
|
||||
type INTEGER,
|
||||
updateTime TEXT,
|
||||
banName TEXT,
|
||||
webToken TEXT,
|
||||
cpName TEXT,
|
||||
comeStatus INTEGER,
|
||||
comePushTime TEXT,
|
||||
freeSevenStatus INTEGER,
|
||||
windsurfUseStatus INTEGER,
|
||||
windsurfStatus INTEGER,
|
||||
windsurfToken TEXT,
|
||||
windsurfPwd TEXT,
|
||||
windsurfUseTime TEXT,
|
||||
raw_json TEXT
|
||||
)'
|
||||
);
|
||||
}
|
||||
|
||||
47
lib/external.php
Normal file
47
lib/external.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
function sendcard_fetch_credentials(string $url, int $timeoutSeconds = 15): array
|
||||
{
|
||||
// 使用 cURL 取外部接口(外部接口返回 JSON)
|
||||
$ch = curl_init();
|
||||
if ($ch === false) {
|
||||
throw new RuntimeException('curl_init failed');
|
||||
}
|
||||
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_CONNECTTIMEOUT => min(10, $timeoutSeconds),
|
||||
CURLOPT_TIMEOUT => $timeoutSeconds,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
'Accept: application/json',
|
||||
'User-Agent: sendcard-php/1.0',
|
||||
],
|
||||
// 外部是 http,通常不需要证书校验;若换成 https,可再调整。
|
||||
]);
|
||||
|
||||
$body = curl_exec($ch);
|
||||
if ($body === false) {
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
throw new RuntimeException('External request failed: ' . $err);
|
||||
}
|
||||
|
||||
$statusCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$json = json_decode($body, true);
|
||||
if (!is_array($json)) {
|
||||
throw new RuntimeException('External response is not valid JSON');
|
||||
}
|
||||
|
||||
// 返回:包含 HTTP 状态码与解析后的 JSON
|
||||
return [
|
||||
'http_status' => $statusCode,
|
||||
'json' => $json,
|
||||
];
|
||||
}
|
||||
|
||||
101
scripts/get_device_info.bat
Normal file
101
scripts/get_device_info.bat
Normal file
@ -0,0 +1,101 @@
|
||||
@echo off
|
||||
REM ASCII-only so cmd parses correctly on any system code page. Chinese labels: see README.
|
||||
setlocal EnableDelayedExpansion
|
||||
chcp 65001 >nul 2>&1
|
||||
title device_code helper
|
||||
|
||||
set "CPU="
|
||||
set "BOARD="
|
||||
set "BIOSSN="
|
||||
set "MGUID="
|
||||
set "MGFLAT="
|
||||
|
||||
where wmic >nul 2>&1
|
||||
if errorlevel 1 goto NO_WMIC
|
||||
|
||||
for /f "tokens=1* delims==" %%a in ('wmic cpu get ProcessorId /value 2^>nul ^| findstr /i /c:"ProcessorId="') do set "CPU=%%b"
|
||||
for /f "tokens=* delims= " %%z in ("!CPU!") do set "CPU=%%z"
|
||||
|
||||
for /f "tokens=1* delims==" %%a in ('wmic baseboard get SerialNumber /value 2^>nul ^| findstr /i /c:"SerialNumber="') do set "BOARD=%%b"
|
||||
for /f "tokens=* delims= " %%z in ("!BOARD!") do set "BOARD=%%z"
|
||||
|
||||
for /f "tokens=1* delims==" %%a in ('wmic bios get SerialNumber /value 2^>nul ^| findstr /i /c:"SerialNumber="') do set "BIOSSN=%%b"
|
||||
for /f "tokens=* delims= " %%z in ("!BIOSSN!") do set "BIOSSN=%%z"
|
||||
|
||||
goto READ_REG
|
||||
|
||||
:NO_WMIC
|
||||
echo [Note] wmic not found. CPU and board lines may be empty; registry GUID is still read.
|
||||
echo.
|
||||
|
||||
:READ_REG
|
||||
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid 2^>nul ^| findstr /i "MachineGuid"') do set "MGUID=%%a"
|
||||
for /f "tokens=* delims= " %%z in ("!MGUID!") do set "MGUID=%%z"
|
||||
|
||||
if not defined MGUID goto SHOW
|
||||
set "MGFLAT=!MGUID:{=!"
|
||||
set "MGFLAT=!MGFLAT:}=!"
|
||||
set "MGFLAT=!MGFLAT:-=!"
|
||||
|
||||
:SHOW
|
||||
cls
|
||||
echo ============================================================
|
||||
echo Device info - three segments for device_code - see README
|
||||
echo [1] ProcessorId [2] BaseBoard serial [3] MachineGuid flat
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
echo [1] CPU ProcessorId - Win32_Processor
|
||||
if defined CPU goto OUT_CPU
|
||||
echo [not read]
|
||||
goto OUT_CPU_X
|
||||
:OUT_CPU
|
||||
echo !CPU!
|
||||
:OUT_CPU_X
|
||||
echo.
|
||||
|
||||
echo [2] BaseBoard SerialNumber - Win32_BaseBoard
|
||||
if defined BOARD goto OUT_BR
|
||||
echo [not read]
|
||||
goto OUT_BR_X
|
||||
:OUT_BR
|
||||
echo !BOARD!
|
||||
:OUT_BR_X
|
||||
echo.
|
||||
|
||||
echo [2-alt] BIOS SerialNumber - Win32_BIOS optional
|
||||
if defined BIOSSN goto OUT_BS
|
||||
echo [not read]
|
||||
goto OUT_BS_X
|
||||
:OUT_BS
|
||||
echo !BIOSSN!
|
||||
:OUT_BS_X
|
||||
echo.
|
||||
|
||||
echo [3] MachineGuid - HKLM\SOFTWARE\Microsoft\Cryptography
|
||||
if defined MGUID goto OUT_MG
|
||||
echo [not read]
|
||||
goto OUT_MG_X
|
||||
:OUT_MG
|
||||
echo !MGUID!
|
||||
echo Flat no braces hyphens - often segment 3:
|
||||
echo !MGFLAT!
|
||||
:OUT_MG_X
|
||||
echo.
|
||||
|
||||
echo ------------------------------------------------------------
|
||||
echo Suggested device_code: ProcessorId-BaseBoard-MachineGuidFlat
|
||||
echo ------------------------------------------------------------
|
||||
if not defined CPU goto JOIN_BAD
|
||||
if not defined BOARD goto JOIN_BAD
|
||||
if not defined MGFLAT goto JOIN_BAD
|
||||
echo !CPU!-!BOARD!-!MGFLAT!
|
||||
goto JOIN_OK
|
||||
:JOIN_BAD
|
||||
echo [incomplete] Copy values above and join with ASCII hyphen.
|
||||
:JOIN_OK
|
||||
echo.
|
||||
echo Note: Final device_code depends on your upstream collector.
|
||||
echo.
|
||||
pause
|
||||
endlocal
|
||||
Loading…
Reference in New Issue
Block a user