fix: send qdh separately for qdreader signing

This commit is contained in:
2026-05-17 18:59:38 +08:00
parent 8ee7c53960
commit 4d03598523
4 changed files with 14 additions and 7 deletions
+5 -3
View File
@@ -4,7 +4,7 @@
//[author: Hermes]
//[service: BOSS]
//[class: 工具类]
//[version: 2.3.1]
//[version: 2.3.2]
//[platform: web,qq,wx,tg,tb,fs,we]
//[public: false]
//[price: 0]
@@ -183,7 +183,7 @@ function contentText() {
}
function usage() {
return [
"启点读书签到插件 v2.3.1",
"启点读书签到插件 v2.3.2",
"【一级菜单】",
"账号管理:启点账号",
"执行查询:启点查询",
@@ -230,7 +230,9 @@ function normalizeCookie(cookie) {
var appid = jar.appId || jar.appid || ""
if (appid) jar.appId = appid
var guid = jar.ywguid || jar.gwguid || jar.guid || ""
return { jar: jar, cookie: cookieToString(jar), qdh: jar.QDHeader || jar.qdh || "", qdheader: jar.QDHeader || jar.qdheader || "", uid: extractUid(cookie), guid: guid, qimei: jar.qimei || jar.QIMEI || "", qimei36: jar.qimei36 || jar.QIMEI36 || "" }
var qdh = jar.qdh || jar.QDH || ""
var qdheader = jar.QDHeader || jar.qdheader || jar.QDHEADER || ""
return { jar: jar, cookie: cookieToString(jar), qdh: qdh, qdheader: qdheader, uid: extractUid(cookie), guid: guid, qimei: jar.qimei || jar.QIMEI || "", qimei36: jar.qimei36 || jar.QIMEI36 || "" }
}
function httpReq(opt) {
if (!opt.headers) opt.headers = {}
+1 -1
View File
@@ -120,7 +120,7 @@ set(key, value)
-`QDHeader` 第一段为 `(null)` 或无效,继续检查 `QDHeader` 第 12 段的真实 `UserId`
- 再读取 `uid/userid/userId/UserId`
- 最后才回退 `ywguid/gwguid/guid`,与 QX 抓包脚本保持一致;
- 同时提取 `qdh/QDHeader/guid/qimei/qimei36` 供签名网关使用。
- 同时提取 `qdh/QDHeader/guid/qimei/qimei36` 供签名网关使用,其中 `qdh` 只取 Cookie 的 `qdh/QDH`,不再用 `QDHeader` 顶替,避免签名网关 `decodeQDHAuto` 解码失败
2. `POST <qdreader_sign_api>/sign` 获取请求签名头。默认签名网关基址是 `https://api.120399.xyz/qdreader`
3. `POST https://h5.if.qidian.com/argus/api/v3/checkin/checkin` 完成签到。
4. 写入单账号最后结果 `qdreader_last_result_json`,包括 `ok/msg/time/source/runId`
+5 -3
View File
@@ -4,7 +4,7 @@
//[author: Hermes]
//[service: BOSS]
//[class: 工具类]
//[version: 2.3.1]
//[version: 2.3.2]
//[platform: web,qq,wx,tg,tb,fs,we]
//[public: false]
//[price: 0]
@@ -183,7 +183,7 @@ function contentText() {
}
function usage() {
return [
"启点读书签到插件 v2.3.1",
"启点读书签到插件 v2.3.2",
"【一级菜单】",
"账号管理:启点账号",
"执行查询:启点查询",
@@ -230,7 +230,9 @@ function normalizeCookie(cookie) {
var appid = jar.appId || jar.appid || ""
if (appid) jar.appId = appid
var guid = jar.ywguid || jar.gwguid || jar.guid || ""
return { jar: jar, cookie: cookieToString(jar), qdh: jar.QDHeader || jar.qdh || "", qdheader: jar.QDHeader || jar.qdheader || "", uid: extractUid(cookie), guid: guid, qimei: jar.qimei || jar.QIMEI || "", qimei36: jar.qimei36 || jar.QIMEI36 || "" }
var qdh = jar.qdh || jar.QDH || ""
var qdheader = jar.QDHeader || jar.qdheader || jar.QDHEADER || ""
return { jar: jar, cookie: cookieToString(jar), qdh: qdh, qdheader: qdheader, uid: extractUid(cookie), guid: guid, qimei: jar.qimei || jar.QIMEI || "", qimei36: jar.qimei36 || jar.QIMEI36 || "" }
}
function httpReq(opt) {
if (!opt.headers) opt.headers = {}
+3
View File
@@ -102,6 +102,9 @@ test('manual sign and cron sign both call sign gateway then qidian checkin', ()
assert.equal(JSON.parse(manual.store.qdreader_last_run_json).source, 'manual');
assert.equal(JSON.parse(manual.store.qdreader_last_run_json).okCount, 1);
assert.equal(JSON.parse(JSON.parse(manual.store.qdreader_last_result_json)['12345']).source, 'manual');
const payload = JSON.parse(manual.calls[0].body);
assert.equal(payload.qdh, 'qdh');
assert.equal(payload.qdheader, 'MTIzNDV8eA==');
const cron = runPlugin({ content: '', store: { ...store } });
assert.equal(cron.calls.length, 2);