qoder签到积分
自动领取 Qoder CN 桌面端的每日签到积分(每天 100 Credits,30 天有效)。
适用前提
- 本机已安装并登录过 Qoder CN 桌面端(Electron)。
- 用户数据目录:
%APPDATA%\com.qodercn.app.stable(Windows)。 - 本机有 Python 3(仅用于调用 Win32
CryptUnprotectData解出 DPAPI 密钥;不联网、不落盘)。 - 登录态有效(token 约 14 天,客户端会自动刷新回写
auth.v1.dat)。
核心原理(2026-09 实测,逆自 v0.3.3)
- 登录态文件
auth.v1.dat= Chromium OSCryptv10格式:
v10(3B) + nonce(12B) + ciphertext + GCM tag(16B),AES-256-GCM 加密。 - 密钥 来自
Local State→os_crypt.encrypted_key(base64,前缀DPAPI)
→ Windows DPAPICryptUnprotectData→ 32 字节 AES key。
Node 无内置 DPAPI,故dpapi.py只做这一件事,其余交给 Nodecrypto。 - 明文 JSON:
{ schemaVersion, token:'dt-…', refreshToken:'drt-…', expiresAt, refreshTokenExpiresAt, user:{…} }。 - 签到接口(服务端 campaign 权益活动,H5 页
g.alicdn.com/qbase/qoder/.../activity-iframe.js印证):
- 列活动:GET https://openapi.qoder.com.cn/sash/api/v1/me/campaigns
- 领取:POST https://openapi.qoder.com.cn/sash/api/v1/me/campaigns/{campaignId}/claim - campaignId 每日变更(campaignKey 形如
act-20260918-628),必须动态查询,不可硬编码。
活动窗口约每日 10:00(UTC+8)刷新(实测:startAt10:00、endAt次日 09:59);10:00 之前运行会(正确地)报告无可领取,故定时任务须排在 10:00 之后。 - 最小请求头集(实测 200):
Authorization: Bearer dt-…+Cosy-ClientType: 10+Cosy-Version+Cosy-MachineId+Accept+User-Agent: Qoder。风控头Cosy-MachineToken/Code/Type不传也通过。
用法
# 执行签到(幂等:已领则跳过;先查后领)
node scripts/checkin.js --retry 6
# 试运行:只查询、报告可领项,不实际领取(零副作用)
node scripts/checkin.js --dry-run
# 只读状态查询(不领取)
node scripts/status.js [--json]
# 计划任务包装(自动探测 node,写 checkin.log)
bash scripts/run-checkin.sh 6
checkin.js 参数
| 参数 | 说明 |
|---|---|
--retry N |
对 429/5xx/网络错误的最大重试次数,默认 0 |
--retry-min/--retry-max |
随机退避秒数区间,默认 15~30s |
--dry-run |
只查不领,验证用 |
--force |
忽略时间段校验(一般勿用) |
--json |
机器可读输出 |
退出码
| 码 | 含义 |
|---|---|
| 0 | 成功 / 今日已领 / 无可领 |
| 2 | 登录态不可用(过期、被拒、未登录) |
| 3 | 网络/服务端异常(含被限流 429) |
| 4 | 接口形态变更 / 领取失败(需重新校准) |
环境变量(可选覆盖)
| 变量 | 用途 |
|---|---|
QODER_CN_USER_DATA |
指定用户数据目录 |
QODER_CN_PYTHON |
指定 python 路径(DPAPI 解包) |
QODER_CN_API_BASE |
接口域名(默认 https://openapi.qoder.com.cn) |
QODER_CN_VERSION |
强制客户端版本号(默认自动探测 .qoder-versions) |
排错
- 「未找到 Qoder CN 用户数据目录」:确认已安装并登录桌面端;或设
QODER_CN_USER_DATA。 - 「无法解出 DPAPI 密钥」:装 Python 3,或设
QODER_CN_PYTHON;需当前 Windows 用户与登录时一致。 - 「登录态解密失败」:换了 Windows 用户或客户端重装 → 重新登录 Qoder CN。
- 「令牌已过期 / 401 / 403」:打开 Qoder CN 桌面端(自动刷新登录态)后重试。
今日已领取(already_claimed):正常幂等结果,非错误。窗口尚未开放(window_not_open):Qoder 每日活动约 10:00(UTC+8) 才刷新,在此之前运行会(正确地)报告无可领取 —— 这不是失败,是跑早了。请把定时任务排在 10:00 之后(配套的每日自动化已排在 10:05)。- 接口返回 4:Qoder 改了 campaign 字段,需对照客户端
logs/main.log与 H5 JS 重新校准isClaimable判据。
安全边界(重要)
- 仅读取本机已登录账号的登录态,不存储、不上传任何凭证;AES key 仅进程内使用,不落盘。
- 领取动作幂等:先
GET查claimStatus,仅对CLAIM_BENEFIT且未 CLAIMED的活动领取,绝不复领。 - 只调用 Qoder CN 官方公开接口,不伪造任何风控签名(
MachineToken等),避免账号风控。 - 不修改 Qoder CN 任何本地文件,只读
auth.v1.dat/Local State/auth.machine-id。 - 本 skill 仅供个人账号自助领取本人权益,请勿用于批量/他人账号。