diff --git a/jd_dpqd.js b/jd_dpqd.js
index 66fbbd4..84a47ea 100644
--- a/jd_dpqd.js
+++ b/jd_dpqd.js
@@ -29,10 +29,10 @@ const token = [
   "065F571B5F4A0ADC8B8EC592EEB59F93",
   "B15846FF6A6380A633BD9534717B401B",
   "ACE30EA88B09840F93FA47519C5D6ED8",
-  "3968E5EB1C28E3CBF69337BDE60093F6",
-  "4A748EF63B85D9CB06B13E7CA2524ABD",
+  "D84139E4C8E8B9837C26BA32363AAD0A",
+  "B34A7017CBA2368A32A5B73AD7A0561B",
   "5CF1A3455369BDB3D1153D9FC974CAFA",
-  "3676E6F564E5D04A8FC8D045BAD0B623",
+  "FFAA0740A5EB469232AE66103F7C97BC",
   "9DCB43BF4CEFD54BBCE2E58BAEA4E2F6",
   "5CF1A3455369BDB3D1153D9FC974CAFA",
   "E29627AF30D59CF7FE7B01C63BD9A975",
@@ -43,7 +43,11 @@ const token = [
 	"70DDA53B61DB5E2E16B6515869C9CA07",
 	"46D8CB32794AB8EA1F42E83360918961",
 	"9DCB43BF4CEFD54BBCE2E58BAEA4E2F6",
-	"9DCB43BF4CEFD54BBCE2E58BAEA4E2F6"
+	"9DCB43BF4CEFD54BBCE2E58BAEA4E2F6",
+	"CA7DDB3A3AE053B2038B298A14519438",
+	"E6CB318FA48273300DE84B620DB22E85",
+  "4759990A4F428A7742CEAD8DF4E18D8A",
+  "E2694BFF3182B4B942E653B60C055E53"
 ]
 
 if ($.isNode()) {
diff --git a/jd_queryRedpacket.ts b/jd_queryRedpacket.ts
index ee949f1..a7c32fc 100644
--- a/jd_queryRedpacket.ts
+++ b/jd_queryRedpacket.ts
@@ -2,13 +2,29 @@ import {JDHelloWorld, User} from "./TS_JDHelloWorld";
 
 class Jd_queryRedpacket extends JDHelloWorld {
   constructor() {
-    super();
+    super("京东红包");
   }
 
   async init() {
     await this.run(new Jd_queryRedpacket())
   }
 
+  add(arg1: number, arg2: number) {
+    let r1, r2, m
+    try {
+      r1 = arg1.toString().split('.')[1].length
+    } catch (e) {
+      r1 = 0
+    }
+    try {
+      r2 = arg2.toString().split('.')[1].length
+    } catch (e) {
+      r2 = 0
+    }
+    m = Math.pow(10, Math.max(r1, r2))
+    return parseFloat(((arg1 * m + arg2 * m) / m).toFixed(2))
+  }
+
   async main(user: User) {
     let res: any = await this.get(`https://m.jingxi.com/user/info/QueryUserRedEnvelopesV2?type=1&orgFlag=JD_PinGou_New&page=1&cashRedType=1&redBalanceFlag=1&channel=1&_=${Date.now()}&sceneval=2&g_login_type=1&g_ty=ls`, {
       'Host': 'm.jingxi.com',
@@ -16,18 +32,23 @@ class Jd_queryRedpacket extends JDHelloWorld {
       "Cookie": user.cookie,
       'User-Agent': user.UserAgent
     })
-    let day: number = new Date().getDay(), jdRed: number = 0, jdRedExp: number = 0
+    let day: number = new Date().getDay(), jdRed: number = 0, jdRedExp: number = 0, jsRed: number = 0, jsRedExp: number = 0
     for (let j of res.data.useRedInfo?.redList || []) {
+      console.log(j)
       if (j.orgLimitStr.includes('京喜')) {
       } else if (j.activityName.includes('极速版')) {
+        jsRed += j.balance
+        if (new Date(j.endTime * 1000).getDay() === day)
+          jsRedExp = this.add(jsRedExp, j.balance)
       } else if (j.orgLimitStr.includes('京东健康')) {
       } else {
-        jdRed = add(jdRed, j.balance)
+        jdRed = this.add(jdRed, j.balance)
         if (new Date(j.endTime * 1000).getDay() === day)
-          jdRedExp = add(jdRedExp, j.balance)
+          jdRedExp = this.add(jdRedExp, j.balance)
       }
     }
-    console.log(jdRed, '  今日过期:', jdRedExp)
+    console.log('京东', jdRed, '  今日过期:', jdRedExp)
+    console.log('极速', jsRed, '  今日过期:', jsRedExp)
     let msg = `【账号】  ${user.UserName}\n京东红包  ${jdRed}\n今日过期  ${jdRedExp}\n\n`
     return {
       msg: msg
@@ -35,20 +56,4 @@ class Jd_queryRedpacket extends JDHelloWorld {
   }
 }
 
-new Jd_queryRedpacket().init().then().catch()
-
-function add(arg1: number, arg2: number) {
-  let r1, r2, m
-  try {
-    r1 = arg1.toString().split('.')[1].length
-  } catch (e) {
-    r1 = 0
-  }
-  try {
-    r2 = arg2.toString().split('.')[1].length
-  } catch (e) {
-    r2 = 0
-  }
-  m = Math.pow(10, Math.max(r1, r2))
-  return parseFloat(((arg1 * m + arg2 * m) / m).toFixed(2))
-}
\ No newline at end of file
+new Jd_queryRedpacket().init().then()
diff --git a/jd_wechat_sign.ts b/jd_wechat_sign.ts
new file mode 100644
index 0000000..44669df
--- /dev/null
+++ b/jd_wechat_sign.ts
@@ -0,0 +1,97 @@
+/**
+ * 微信小程序签到红包
+ * FP_9A38A
+ * cron: 8 0 * * *
+ */
+
+import {H5ST} from "./utils/h5st"
+import {User, JDHelloWorld} from "./TS_JDHelloWorld";
+
+class Jd_wechat_sign extends JDHelloWorld {
+  constructor() {
+    super("微信签到");
+  }
+
+  async init() {
+    await this.run(this)
+  }
+
+  async main(user: User) {
+    let h5stTool = new H5ST("9a38a", user.UserAgent, process.env.FP_9A38A || "");
+    await h5stTool.__genAlgo()
+    let timestamp: number = Date.now()
+    let headers: object = {
+      'content-type': 'application/json',
+      'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15F79 MicroMessenger/8.0.15(0x18000f2e) NetType/WIFI Language/zh_CN',
+      'referer': 'https://servicewechat.com/wx91d27dbf599dff74/581/page-frame.html',
+      'cookie': user.cookie
+    }, h5st: string, res: any, signDays: number = 0, rewardValue: number = 0
+
+    h5st = h5stTool.__genH5st({
+      appid: 'hot_channel',
+      body: JSON.stringify({"activityId": "10004"}),
+      client: 'android',
+      clientVersion: '7.16.250',
+      functionId: 'SignComponent_doSignTask',
+      t: timestamp.toString(),
+    })
+    res = await this.post(`https://api.m.jd.com/signTask/doSignTask?functionId=SignComponent_doSignTask&appid=hot_channel&body={"activityId":"10004"}&client=android&clientVersion=7.16.250&t=${timestamp}&h5st=${h5st}`, '', headers)
+    if (res.data) {
+      console.log('已签到', res.data.signDays, '天,奖励', res.data.rewardValue, '元')
+      signDays = res.data.signDays
+      rewardValue = res.data.rewardValue
+    } else {
+      console.log(res.message)
+    }
+    await this.wait(2000)
+
+    res = await this.get(`https://api.m.jd.com/signTask/querySignList?client=android&clientVersion=7.18.110&functionId=SignComponent_querySignList&appid=hot_channel&loginType=2&body=%7B%22activityId%22%3A%2210004%22%7D`, headers)
+    let scanAssignmentId: string = res.data.scanTaskInfo.scanAssignmentId, itemId: string = res.data.scanTaskInfo.itemId
+    if (!res.data?.scanTaskInfo?.completionFlag) {
+      h5stTool = new H5ST("2b5bc", user.UserAgent, process.env.FP_2B5BC || "");
+      await h5stTool.__genAlgo()
+      h5st = h5stTool.__genH5st({
+        appid: 'hot_channel',
+        body: JSON.stringify({"activityId": "10004", "actionType": 1, scanAssignmentId, itemId}),
+        client: 'android',
+        clientVersion: '7.18.110',
+        functionId: 'SignComponent_doScanTask',
+        t: timestamp.toString(),
+      })
+      res = await this.get(`https://api.m.jd.com/scanTask/startScanTask?client=android&clientVersion=7.18.110&functionId=SignComponent_doScanTask&appid=hot_channel&body=${encodeURIComponent(JSON.stringify({
+        "activityId": "10004",
+        "actionType": 1,
+        "scanAssignmentId": scanAssignmentId,
+        "itemId": res.data.scanTaskInfo.itemId
+      }))}&h5st=${h5st}`, headers)
+      console.log('领取任务', res.success)
+      await this.wait(8000)
+
+      h5st = h5stTool.__genH5st({
+        appid: 'hot_channel',
+        body: JSON.stringify({"activityId": "10004", "actionType": 0, scanAssignmentId, itemId}),
+        client: 'android',
+        clientVersion: '7.18.110',
+        functionId: 'SignComponent_doScanTask',
+        t: timestamp.toString(),
+      })
+      res = await this.get(`https://api.m.jd.com/scanTask/startScanTask?client=android&clientVersion=7.18.110&functionId=SignComponent_doScanTask&appid=hot_channel&body=${encodeURIComponent(JSON.stringify({
+        "activityId": "10004",
+        "actionType": 0,
+        scanAssignmentId,
+        itemId
+      }))}&h5st=${h5st}`, headers)
+      console.log('任务完成', res.data.rewardValue)
+    } else if (res.data?.scanTaskInfo?.completionFlag) {
+      console.log('浏览任务已完成')
+    } else {
+      console.log('无浏览任务')
+    }
+
+    if (signDays && rewardValue) {
+      return {msg: `【京东账号${user.index + 1}】  ${user.UserName}\n已签到  ${signDays}天\n奖励  ${rewardValue}元\n\n`}
+    }
+  }
+}
+
+new Jd_wechat_sign().init().then()
\ No newline at end of file