Files
ql-scripts/cmcc
zhuhjay 2f3132d2ff feat(cmcc): 成功通知默认开启(每日签到明细报文)
默认成功也推送:标题 N/N 成功,正文每号一行(掩码+签到/已签/天数/奖励/转盘明细)。
CMCC_NOTIFY_ON_SUCCESS=0 可回到只推失败。失败推送补形态统计与诊断行。
2026-11-08 10:53:00 +08:00
..

中国移动自动签到(scrip_cmcc_mark.py)

中国移动 APP「签到有礼」自动签到,青龙 Python3 零第三方依赖(只用 requests,面板自带)。

协议底座(全部实测,2026-11-07):重放抓包素材 autoLogin 换 APP 会话 → appTokenLogin 换 QWHD_SESSION_TOKEN → mark31/domark 签到。 三大前提已实验裁决:出口 IP 无关、素材寿命是「冷却」机制而非小时数、 抓素材需登录态但一次登录长期收(已登录冷启动不发 autoLogin,无每日仪式)。

文件名必须带 scrip_ 前缀:订阅白名单规则(根 README)。 元数据头两行 // cron: / // name:(Python 用 #)已按仓库约定写好, 新增后跑 node _probe_meta.js 需把 .py 加入扫描范围(当前探针只扫 js, Python 侧由本 README 说明兜底)。

环境变量

变量 必填 说明
CMCC_AUTOLOGIN_CURL ✅(与 CMCC_TOKEN 二选一) 整段 cURL(手机抓包导出 autoLogin 请求)。多号用 CMCC_AUTOLOGIN_CURL_2 / _3 … 编号变量,每号一份素材(素材与账号一对一)
CMCC_TOKEN 备选 直通 token(仅当天调试;TTL≈30min,隔日必死)
CMCC_NOTIFY_ON_SUCCESS 可选 1 = 签到成功也推送(默认只推失败)
WEBHOOK_URL / PUSH_PLUS_TOKEN 等 可选 通知通道,与仓库 common.js 契约同名同义(Python 侧同语义实现)

素材怎么抓(一次登录,长期收)

  1. 手机保持 APP 登录态(不用清数据——已实测清数据后冷启动不发 autoLogin)
  2. 开抓包(Reqable/HttpCanary/mitmproxy),在 APP 里触发一次登录或等它自动续期
  3. 找 client.app.coc.10086.cn 的 uamrandcodelogin/autoLogin 请求 (响应必须含 Set-Cookie: JSESSIONID,没有的是失败记录不是素材)
  4. 导出为 cURL(含 header + body),整段贴进 CMCC_AUTOLOGIN_CURL
  5. 抓完立刻关手机代理(settings put global http_proxy :0,否则 APP 断网)

素材失效的信号是连续多次全 64B(会话层死)——这时才需要重抓。 88B ≠ 失效(素材活着只是没命中,稍后再跑);236B ≠ 封号(慢节拍通道,快节拍重试)。

定时

40 8 * * *     # 主任务(脚本头注已写,订阅自动建任务用)
0 12 * * *     # 建议手动补一条错峰补签——命中即停模式下 30 发全败概率 ≈36%,双 cron 把日失败率压到 <13%

同一日重复运行幂等(HAVE_MARKED/markstatus 先行判断),多补一条 cron 无副作用。

退出码

码 含义
0 成功 / 今日已签
1 签到动作失败(复核未通过)
2 素材问题(重放未命中 / cURL 解析损坏)
3 换票失败([C]/[D] 层)

实现关键坑(改动前必读)

  1. token 必须用原始合并 Set-Cookie 全值(split("; Secure") 前段,含 Comment/Path 属性碎片)——结构化重建三段式实测报「APP登录状态已过期」
  2. [A] 重放必须无状态 requests.post——Session 的 prepare_cookies 会用 jar 覆盖素材 Cookie 头 → 64B
  3. Set-Cookie 名字判定必须 re.findall——服务端把 JSESSIONID+UID+ticketID 合并在同一条头里,re.match 取首个恒漏 UID
  4. 命中即停——命中后立刻冷却(连打全 88B),循环里多打是纯浪费还喂风暴
  5. sid 正则必须 [A-Za-z0-9]+——大写版截断尾部随机串 → 换票 404(但 code 仍 SUCCESS,判据是 url 含 404)