Skip to content

Commit ecef1e7

Browse files
committed
更新[顺丰速运]: 恢复签到脚本 (QuanX&Surge、商店&TF都可用)
1 parent 8f927f6 commit ecef1e7

7 files changed

Lines changed: 137 additions & 64 deletions

QuantumultX_AppStore_Local_Cookie.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 本配置适用于: QuanX 商店版 v1.0.6-build194 及之前版本
22
# 如果你是TF版, 请使用: QuantumultX_Local_Cookie.conf
33

4-
hostname = 110.43.90.61, zt.wps.cn, daojia.jd.com, app.nio.com, wxprdapplet.gac-nio.com, maicai.api.ddxq.mobi, group.baicizhan.com, api.everphoto.cn, promotion.waimai.meituan.com, wx.10086.cn, www.maomicd.com, m.client.10010.com, act.10010.com, api-takumi.mihoyo.com, gdws.nsenz.com, credits.bz.mgtv.com, *.csdn.net, wapside.189.cn, *.acfun.cn, apk.tw, *.bilibili.com, api.dongqiudi.com, *.feng.com, www.flyertea.com, music.163.com, *.m.163.com, user.qunar.com, *.rr.tv, *.weixinjia.net, *.smzdm.com, tieba.baidu.com, *.v2ex.com, *.video.qq.com, v.qq.com, mobwsa.ximalaya.com, *.you.163.com, *.rrys2019.com, ios.zmzapi.com
4+
hostname = 110.43.90.61, zt.wps.cn, daojia.jd.com, app.nio.com, wxprdapplet.gac-nio.com, maicai.api.ddxq.mobi, group.baicizhan.com, api.everphoto.cn, promotion.waimai.meituan.com, wx.10086.cn, www.maomicd.com, m.client.10010.com, act.10010.com, api-takumi.mihoyo.com, gdws.nsenz.com, credits.bz.mgtv.com, *.csdn.net, wapside.189.cn, *.acfun.cn, apk.tw, *.bilibili.com, api.dongqiudi.com, *.feng.com, www.flyertea.com, music.163.com, *.m.163.com, user.qunar.com, *.rr.tv, sf-integral-sign-in.weixinjia.net, *.smzdm.com, tieba.baidu.com, *.v2ex.com, *.video.qq.com, v.qq.com, mobwsa.ximalaya.com, *.you.163.com, *.rrys2019.com, ios.zmzapi.com
55

66
# 电信营业厅
77
^https:\/\/wapside.189.cn:9001\/api\/home\/homeInfo url script-request-header chavyleung/10000/10000.cookie.js
@@ -42,7 +42,7 @@ hostname = 110.43.90.61, zt.wps.cn, daojia.jd.com, app.nio.com, wxprdapplet.gac-
4242
^https:\/\/api\.rr\.tv\/user\/profile url script-request-header chavyleung/rrtv/rrtv.cookie.js
4343

4444
# 顺丰速运
45-
# ^https:\/\/sf\-integral\-sign\-in\.weixinjia\.net\/app\/init url script-request-header chavyleung/sfexpress/sfexpress.cookie.js
45+
^https:\/\/sf-integral-sign-in.weixinjia.net\/app\/index url script-request-header chavyleung/sfexpress/sfexpress.cookie.js
4646

4747
# 什么值得买
4848
^https:\/\/www\.smzdm\.com\/?.? url script-request-header chavyleung/smzdm/quanx/smzdm.cookie.js

QuantumultX_Local_Cookie.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 本配置适用于: QuanX TestFlight v1.0.6-build195 及以后版本
22
# 如果你是商店版, 请使用: QuantumultX_AppStore_Local_Cookie.conf
33

4-
hostname = 110.43.90.61, zt.wps.cn, m-bean.kaola.com, daojia.jd.com, app.nio.com, wxprdapplet.gac-nio.com, node.kg.qq.com, api.dushu.io, pm.m.fenqile.com, maicai.api.ddxq.mobi, group.baicizhan.com, api.everphoto.cn, i.meituan.com, promotion.waimai.meituan.com, wx.10086.cn, www.maomicd.com, m.client.10010.com, act.10010.com, api-takumi.mihoyo.com, m.gdoil.cn, credits.bz.mgtv.com, *.csdn.net, wapside.189.cn, *.acfun.cn, apk.tw, *.bilibili.com, api.dongqiudi.com, *.feng.com, www.flyertea.com, music.163.com, *.m.163.com, user.qunar.com, *.rr.tv, *.weixinjia.net, *.smzdm.com, tieba.baidu.com, *.v2ex.com, *.video.qq.com, v.qq.com, mobwsa.ximalaya.com, *.you.163.com, *.rrys2019.com, ios.zmzapi.com
4+
hostname = 110.43.90.61, zt.wps.cn, m-bean.kaola.com, daojia.jd.com, app.nio.com, wxprdapplet.gac-nio.com, node.kg.qq.com, api.dushu.io, pm.m.fenqile.com, maicai.api.ddxq.mobi, group.baicizhan.com, api.everphoto.cn, i.meituan.com, promotion.waimai.meituan.com, wx.10086.cn, www.maomicd.com, m.client.10010.com, act.10010.com, api-takumi.mihoyo.com, m.gdoil.cn, credits.bz.mgtv.com, *.csdn.net, wapside.189.cn, *.acfun.cn, apk.tw, *.bilibili.com, api.dongqiudi.com, *.feng.com, www.flyertea.com, music.163.com, *.m.163.com, user.qunar.com, *.rr.tv, sf-integral-sign-in.weixinjia.net, *.smzdm.com, tieba.baidu.com, *.v2ex.com, *.video.qq.com, v.qq.com, mobwsa.ximalaya.com, *.you.163.com, *.rrys2019.com, ios.zmzapi.com
55

66
# 电信营业厅
77
^https:\/\/wapside.189.cn:9001\/api\/home\/homeInfo url script-request-header https://raw.githubusercontent.com/chavyleung/scripts/master/10000/10000.cookie.js
@@ -42,7 +42,7 @@ hostname = 110.43.90.61, zt.wps.cn, m-bean.kaola.com, daojia.jd.com, app.nio.com
4242
^https:\/\/api\.rr\.tv\/user\/profile url script-request-header https://raw.githubusercontent.com/chavyleung/scripts/master/rrtv/rrtv.cookie.js
4343

4444
# 顺丰速运
45-
# ^https:\/\/sf\-integral\-sign\-in\.weixinjia\.net\/app\/init url script-request-header https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.cookie.js
45+
^https:\/\/sf-integral-sign-in.weixinjia.net\/app\/index url script-request-header https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.cookie.js
4646

4747
# 什么值得买
4848
^https:\/\/www\.smzdm\.com\/?.? url script-request-header https://raw.githubusercontent.com/chavyleung/scripts/master/smzdm/quanx/smzdm.cookie.js

QuantumultX_Local_Task.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
# 人人视频
2727
10 0 * * * chavyleung/rrtv/rrtv.js
2828
# 顺丰速运
29-
# 10 0 * * * chavyleung/sfexpress/sfexpress.js
29+
10 0 * * * chavyleung/sfexpress/sfexpress.js
3030
# 什么值得买
3131
2 0 * * * chavyleung/smzdm/quanx/smzdm.js
3232
# 百度签到

QuantumultX_Remote_Task.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
# 顺丰速运
4848
#打开 APP, 访问下`我的顺丰` > `去签到` (访问下`去签到`的页面即可, 不用点`签到`)
49-
# 4 0 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.js
49+
10 0 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.js
5050

5151
# 什么值得买
5252
#浏览器访问并登录: https://zhiyou.smzdm.com/user/login

sfexpress/README.md

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
1-
# 顺丰速运 (弃坑)
1+
# 顺丰速运
22

33
> 代码已同时兼容 Surge & QuanX, 使用同一份签到脚本即可
44
5-
> 2020.1.11 QuanX 在`190`版本开始, 获取 Cookie 方式需要从`script-response-body`改为`script-request-header`
6-
75
> 2020.1.22 据实测顺丰的 Cookie 只能存活 1 天不到,大家先弃坑
86
7+
> 2020.3.15 恢复顺丰签到 (更新脚本、更新配置、重取 Cookie) (QuanX&Surge、商店&TF 都支持)
8+
99
## 配置 (Surge)
1010

1111
```properties
1212
[MITM]
13-
*.weixinjia.net
13+
hostname = sf-integral-sign-in.weixinjia.net
1414

1515
[Script]
16-
http-request ^https:\/\/sf\-integral\-sign\-in\.weixinjia\.net\/app\/init script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.cookie.js
17-
cron "10 0 0 * * *" script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.js
16+
http-request ^https:\/\/sf-integral-sign-in.weixinjia.net\/app\/index script-path=scripts/sfexpress.cookie.js,debug=true
17+
cron "*/10 * * * * *" script-path=scripts/sfexpress.js,debug=true
1818
```
1919

2020
## 配置 (QuanX)
2121

2222
```properties
2323
[MITM]
24-
*.weixinjia.net
24+
hostname = sf-integral-sign-in.weixinjia.net
2525

2626
[rewrite_local]
27-
# 189及以前版本
28-
^https:\/\/sf\-integral\-sign\-in\.weixinjia\.net\/app\/init url script-response-body sfexpress.cookie.js
29-
# 190及以后版本
30-
^https:\/\/sf\-integral\-sign\-in\.weixinjia\.net\/app\/init url script-request-header sfexpress.cookie.js
27+
^https:\/\/sf-integral-sign-in.weixinjia.net\/app\/index url script-request-header sfexpress.cookie.js
3128

3229
[task_local]
3330
1 0 * * * sfexpress.js
3431
```
3532

3633
## 说明
3734

38-
1. 先把`*.weixinjia.net`加到`[MITM]`
35+
1. 先把`sf-integral-sign-in.weixinjia.net`加到`[MITM]`
3936
2. 再配置重写规则:
4037
- Surge: 把两条远程脚本放到`[Script]`
4138
- QuanX: 把`sfexpress.cookie.js``sfexpress.js`传到`On My iPhone - Quantumult X - Scripts` (传到 iCloud 相同目录也可, 注意要打开 quanx 的 iCloud 开关)

sfexpress/sfexpress.cookie.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
const cookieName = '顺丰速运'
2-
const cookieKey = 'chavy_cookie_sfexpress'
31
const chavy = init()
4-
const cookieVal = $request.headers['Cookie']
5-
if (cookieVal) {
6-
if (chavy.setdata(cookieVal, cookieKey)) {
7-
chavy.msg(`${cookieName}`, '获取Cookie: 成功', '')
8-
chavy.log(`[${cookieName}] 获取Cookie: 成功, cookie: ${cookieVal}`)
9-
}
2+
const cookieName = '顺丰速运'
3+
const KEY_loginurl = 'chavy_loginurl_sfexpress'
4+
const KEY_loginheader = 'chavy_loginheader_sfexpress'
5+
6+
if ($request && $request.method != 'OPTIONS') {
7+
const VAL_loginurl = $request.url
8+
const VAL_loginheader = JSON.stringify($request.headers)
9+
if (VAL_loginurl) chavy.setdata(VAL_loginurl, KEY_loginurl)
10+
if (VAL_loginheader) chavy.setdata(VAL_loginheader, KEY_loginheader)
11+
chavy.msg(cookieName, `获取Cookie: 成功`, ``)
1012
}
1113

1214
function init() {

sfexpress/sfexpress.js

Lines changed: 112 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,119 @@
1-
const cookieName = '顺丰速运'
2-
const cookieKey = 'chavy_cookie_sfexpress'
31
const chavy = init()
4-
let cookieVal = chavy.getdata(cookieKey)
2+
const cookieName = '顺丰速运'
3+
const KEY_loginurl = 'chavy_loginurl_sfexpress'
4+
const KEY_loginheader = 'chavy_loginheader_sfexpress'
5+
6+
const signinfo = {}
7+
let VAL_loginurl = chavy.getdata(KEY_loginurl)
8+
let VAL_loginheader = chavy.getdata(KEY_loginheader)
59

6-
sign()
10+
;(sign = async () => {
11+
chavy.log(`🔔 ${cookieName}`)
12+
await loginapp()
13+
await signapp()
14+
await getinfo()
15+
showmsg()
16+
})().catch((e) => chavy.log(`❌ ${cookieName} 签到失败: ${e}`))
17+
18+
function loginapp() {
19+
return new Promise((resolve, reject) => {
20+
const url = { url: VAL_loginurl, headers: { Cookie: '' }, opts: { redirection: false } }
21+
chavy.get(url, (error, response, data) => {
22+
try {
23+
chavy.log(`❕ ${cookieName} loginapp - response: ${JSON.stringify(response)}`)
24+
const respcookie = response.headers['Set-Cookie']
25+
if (respcookie && respcookie.indexOf('SESSION=') >= 0) {
26+
signinfo.SESSION = response.headers['Set-Cookie'].match(/SESSION=([^;]*)/)[0]
27+
} else {
28+
chavy.msg(cookieName, `登录结果: 失败`, `说明: 请尝试杀掉 APP 重新获取Cookie`)
29+
}
30+
resolve()
31+
} catch (e) {
32+
chavy.msg(cookieName, `登录结果: 失败`, `说明: ${e}`)
33+
chavy.log(`❌ ${cookieName} loginapp - 登录失败: ${e}`)
34+
chavy.log(`❌ ${cookieName} loginapp - response: ${JSON.stringify(response)}`)
35+
resolve()
36+
}
37+
})
38+
})
39+
}
740

8-
function sign() {
9-
chavy.log(`${cookieName}, Cookie: ${cookieVal}`)
10-
let url = { url: `https://sf-integral-sign-in.weixinjia.net/app/signin`, headers: { Cookie: cookieVal } }
11-
url.headers['Origin'] = `https://sf-integral-sign-in.weixinjia.net`
12-
url.headers['Connection'] = `keep-alive`
13-
url.headers['Content-Type'] = `application/x-www-form-urlencoded`
14-
url.headers['Accept'] = `application/json, text/plain, */*`
15-
url.headers['Host'] = `sf-integral-sign-in.weixinjia.net`
16-
url.headers['User-Agent'] = `Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 mediaCode=SFEXPRESSAPP-iOS-ML`
17-
url.headers['ontent-Length'] = `15`
18-
url.headers['Accept-Language'] = `zh-cn`
19-
url.headers['Accept-Encoding'] = `gzip, deflate, br`
20-
url.body = `date=${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
21-
chavy.log(`${cookieName}, body: ${url.body}`)
22-
chavy.post(url, (error, response, data) => {
23-
chavy.log(`${cookieName}, data: ${data}`)
24-
const result = JSON.parse(data)
25-
const title = `${cookieName}`
26-
let subTitle = ``
27-
let detail = ``
28-
if (result.code == 0 && result.msg == 'success') {
29-
subTitle = `签到结果: 成功`
30-
} else if (result.code == -1) {
31-
if (result.msg == 'ALREADY_CHECK') {
32-
subTitle = `签到结果: 成功 (重复签到)`
33-
} else {
34-
subTitle = `签到结果: 失败`
41+
function signapp() {
42+
return new Promise((resolve, reject) => {
43+
let url = { url: `https://sf-integral-sign-in.weixinjia.net/app/signin`, headers: JSON.parse(VAL_loginheader) }
44+
delete url.headers['Cookie']
45+
url.headers['Origin'] = 'https://sf-integral-sign-in.weixinjia.net'
46+
url.headers['Connection'] = 'keep-alive'
47+
url.headers['Content-Type'] = 'application/x-www-form-urlencoded'
48+
url.headers['Accept'] = 'application/json, text/plain, */*'
49+
url.headers['Host'] = 'sf-integral-sign-in.weixinjia.net'
50+
url.headers['Content-Length'] = '15'
51+
url.headers['Accept-Language'] = 'zh-cn'
52+
url.headers['Accept-Encoding'] = 'gzip, deflate, br'
53+
url.body = `date=${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
54+
chavy.post(url, (error, response, data) => {
55+
try {
56+
chavy.log(`❕ ${cookieName} signapp - response: ${JSON.stringify(response)}`)
57+
signinfo.signapp = JSON.parse(data)
58+
resolve()
59+
} catch (e) {
60+
chavy.msg(cookieName, `签到结果: 失败`, `说明: ${e}`)
61+
chavy.log(`❌ ${cookieName} signapp - 签到失败: ${e}`)
62+
chavy.log(`❌ ${cookieName} signapp - response: ${JSON.stringify(response)}`)
63+
resolve()
3564
}
65+
})
66+
})
67+
}
68+
69+
function getinfo() {
70+
return new Promise((resolve, reject) => {
71+
let url = { url: `https://sf-integral-sign-in.weixinjia.net/app/init`, headers: JSON.parse(VAL_loginheader) }
72+
delete url.headers['Cookie']
73+
url.headers['Origin'] = 'https://sf-integral-sign-in.weixinjia.net'
74+
url.headers['Connection'] = 'keep-alive'
75+
url.headers['Content-Type'] = 'application/x-www-form-urlencoded'
76+
url.headers['Accept'] = 'application/json, text/plain, */*'
77+
url.headers['Host'] = 'sf-integral-sign-in.weixinjia.net'
78+
url.headers['Accept-Encoding'] = 'gzip, deflate, br'
79+
url.headers['Accept-Language'] = 'zh-cn'
80+
url.headers['Content-Length'] = '0'
81+
82+
chavy.post(url, (error, response, data) => {
83+
try {
84+
chavy.log(`❕ ${cookieName} getinfo - response: ${JSON.stringify(response)}`)
85+
signinfo.info = JSON.parse(data)
86+
resolve()
87+
} catch (e) {
88+
chavy.msg(cookieName, `获取信息: 失败`, `说明: ${e}`)
89+
chavy.log(`❌ ${cookieName} getinfo - 获取信息失败: ${e}`)
90+
chavy.log(`❌ ${cookieName} getinfo - response: ${JSON.stringify(response)}`)
91+
resolve()
92+
}
93+
})
94+
})
95+
}
96+
97+
function showmsg() {
98+
let subTitle = ''
99+
let detail = ''
100+
if (signinfo.signapp.code == 0 && signinfo.signapp.msg == 'success') {
101+
subTitle = `签到结果: 成功`
102+
} else if (signinfo.signapp.code == -1) {
103+
if (signinfo.signapp.msg == 'ALREADY_CHECK') {
104+
subTitle = `签到结果: 成功 (重复签到)`
36105
} else {
37-
subTitle = `签到结果: 未知`
38-
detail = `说明: ${result.msg}`
106+
subTitle = `签到结果: 失败`
39107
}
40-
chavy.msg(title, subTitle, detail)
41-
})
42-
chavy.done()
108+
} else {
109+
subTitle = `签到结果: 未知`
110+
detail = `说明: ${signinfo.signapp.msg}`
111+
}
112+
113+
if (signinfo.info && signinfo.info.code == 0) {
114+
detail = `积分: ${signinfo.info.data.member_info.integral}, 本周连签: ${signinfo.info.data.check_count}天`
115+
}
116+
chavy.msg(cookieName, subTitle, detail)
43117
}
44118

45119
function init() {
@@ -68,7 +142,7 @@ function init() {
68142
}
69143
if (isQuanX()) {
70144
url.method = 'GET'
71-
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
145+
$task.fetch(url).then((resp) => cb(null, resp, resp.body))
72146
}
73147
}
74148
post = (url, cb) => {
@@ -77,7 +151,7 @@ function init() {
77151
}
78152
if (isQuanX()) {
79153
url.method = 'POST'
80-
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
154+
$task.fetch(url).then((resp) => cb(null, resp, resp.body))
81155
}
82156
}
83157
done = (value = {}) => {

0 commit comments

Comments
 (0)