const chavy = init() const cookieName = '苏宁易购' const KEY_loginurl = 'chavy_login_url_suning' const KEY_loginbody = 'chavy_login_body_suning' const KEY_loginheader = 'chavy_login_header_suning' const KEY_signurl = 'chavy_sign_url_suning' const KEY_signheader = 'chavy_sign_header_suning' const KEY_signweburl = 'chavy_signweb_url_suning' const KEY_signweburlBarry = 'snyg_userTokenKey' const KEY_signwebheader = 'chavy_signweb_header_suning' const KEY_signgameurl = 'chavy_signgame_url_suning' const KEY_signgameheader = 'chavy_signgame_header_suning' const KEY_signgetgameurl = 'chavy_signgetgame_url_suning' const KEY_signgetgameheader = 'chavy_signgetgame_header_suning' const KEY_runflag = 'chavy_runflag_suning' const signinfo = {} let VAL_loginurl = chavy.getdata(KEY_loginurl) let VAL_loginbody = chavy.getdata(KEY_loginbody) let VAL_loginheader = chavy.getdata(KEY_loginheader) let VAL_signurl = chavy.getdata(KEY_signurl) let VAL_signheader = chavy.getdata(KEY_signheader) let VAL_signweburl = chavy.getdata(KEY_signweburl) let VAL_signweburlBarry = chavy.getdata(KEY_signweburlBarry) let VAL_signwebheader = chavy.getdata(KEY_signwebheader) let VAL_signgameurl = chavy.getdata(KEY_signgameurl) let VAL_signgameheader = chavy.getdata(KEY_signgameheader) let VAL_signgetgameurl = chavy.getdata(KEY_signgetgameurl) let VAL_signgetgameheader = chavy.getdata(KEY_signgetgameheader) let VAL_runflag = chavy.getdata(KEY_runflag) ;(sign = async () => { chavy.log(`🔔 ${cookieName}`) await loginapp() if (VAL_signurl) await signapp() await getinfo() if (VAL_signweburl || VAL_signweburlBarry) await signweb(), await getwebinfo() if (VAL_signgameurl && VAL_signgetgameurl) await signgame(), await getgameinfo() showmsg() chavy.done() })().catch((e) => chavy.log(`❌ ${cookieName} 签到失败: ${e}`), chavy.done()) function loginapp() { return new Promise((resolve, reject) => { const url = {url: VAL_loginurl, body: VAL_loginbody, headers: JSON.parse(VAL_loginheader)} // chavy.log(`❕ ${cookieName} loginapp - VAL_runflag: ${VAL_runflag}`) // if (VAL_runflag) delete url.headers['Cookie'] // else chavy.setdata('true', KEY_runflag) chavy.post(url, (error, response, data) => { resolve() }) }) } function signapp() { return new Promise((resolve, reject) => { const url = {url: VAL_signurl, headers: JSON.parse(VAL_signheader)} delete url.headers['Cookie'] chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} signapp - response: ${JSON.stringify(response)}`) signinfo.signapp = JSON.parse(data) resolve() } catch (e) { chavy.msg(cookieName, `签到结果: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} signapp - 签到失败: ${e}`) chavy.log(`❌ ${cookieName} signapp - response: ${JSON.stringify(response)}`) resolve() } }) }) } function signgame() { return new Promise((resolve, reject) => { const url = {url: VAL_signgameurl, headers: JSON.parse(VAL_signgameheader)} delete url.headers['Cookie'] chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} signgame - response: ${JSON.stringify(response)}`) signinfo.signgame = JSON.parse(data) resolve() } catch (e) { chavy.msg(cookieName, `天天低价: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} signgame - 签到失败: ${e}`) chavy.log(`❌ ${cookieName} signgame - response: ${JSON.stringify(response)}`) resolve() } }) }) } function signweb() { return new Promise((resolve, reject) => { let url = null if (VAL_signweburl) { url = {url: VAL_signweburl, headers: JSON.parse(VAL_signwebheader)} delete url.headers['Cookie'] url.headers['Host'] = 'luckman.suning.com' url.headers['Referer'] = 'https: //luckman.suning.com/luck-web/sign/app/index_sign.htm?wx_navbar_transparent=true' url.headers['User-Agent'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SNEBUY-APP 8.5.0 SNCLIENT-WAP' } else if (VAL_signweburlBarry) { url = {url: VAL_signweburlBarry, headers: {}} url.headers['Cookie'] = chavy.getdata('snyg_userCookieKey') url.headers['Accept'] = 'application/json' url.headers['Accept-Encoding'] = 'gzip, deflate, br' url.headers['Connection'] = 'keep-alive' url.headers['Referer'] = 'https://luckman.suning.com/luck-web/sign/app/index_sign.htm?wx_navbar_transparent=true' url.headers['Host'] = 'luckman.suning.com' url.headers['User-Agent'] = chavy.getdata('snyg_userAgentKey') url.headers['Accept-Language'] = 'en-us' url.headers['X-Requested-With'] = 'XMLHttpRequest' } chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} signweb - response: ${JSON.stringify(response)}`) signinfo.signweb = JSON.parse(data) resolve() } catch (e) { chavy.msg(cookieName, `每日红包: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} signweb - 每日红包失败: ${e}`) chavy.log(`❌ ${cookieName} signweb - response: ${JSON.stringify(response)}`) resolve() } }) }) } function getwebinfo() { return new Promise((resolve, reject) => { const timestamp = Math.round(new Date().getTime()).toString() const VAL_webinfourl = `https://luckman.suning.com/luck-web/sign/api/query/detail/record_sign.do?terminal=app&channel=sign&_=${timestamp}` const url = {url: VAL_webinfourl, headers: JSON.parse(VAL_signheader)} delete url.headers['Cookie'] url.headers['Host'] = 'luckman.suning.com' chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} getwebinfo - response: ${JSON.stringify(response)}`) signinfo.webinfo = JSON.parse(data) resolve() } catch (e) { chavy.msg(cookieName, `领红包结果: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} getwebinfo - 领红包失败: ${e}`) chavy.log(`❌ ${cookieName} getwebinfo - response: ${JSON.stringify(response)}`) resolve() } }) }) } function getgameinfo() { return new Promise((resolve, reject) => { const url = {url: VAL_signgetgameurl, headers: JSON.parse(VAL_signgetgameheader)} delete url.headers['Cookie'] chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} getgameinfo - response: ${JSON.stringify(response)}`) signinfo.gameinfo = JSON.parse(data.match(/\((.*)\)/)[1]) resolve() } catch (e) { chavy.msg(cookieName, `查询天天低价: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} getgameinfo - 查询天天低价失败: ${e}`) chavy.log(`❌ ${cookieName} getgameinfo - response: ${JSON.stringify(response)}`) resolve() } }) }) } function getinfo() { return new Promise((resolve, reject) => { const timestamp = Math.round(new Date().getTime()).toString() const url = { url: `https://sign.suning.com/sign-web/m/newsign/getDiamondInfo.do?_=${timestamp}`, headers: JSON.parse(VAL_signheader) } delete url.headers['Cookie'] chavy.get(url, (error, response, data) => { try { chavy.log(`❕ ${cookieName} getinfo - info: ${JSON.stringify(response)}`) signinfo.info = JSON.parse(data) resolve() } catch (e) { chavy.msg(cookieName, `获取签到信息: 失败`, `说明: ${e}`) chavy.log(`❌ ${cookieName} getinfo - 获取签到信息失败: ${e}`) chavy.log(`❌ ${cookieName} getinfo - response: ${JSON.stringify(response)}`) resolve() } }) }) } function showmsg() { let subTitle = '' let detail = '' let moreDetail = '' if (signinfo.signapp && signinfo.signapp.code == '1') { if (signinfo.signapp.data.todayFirstSignFlag == true) subTitle = '签到: 成功' else subTitle = '签到: 重复' for (myinfo of signinfo.info.data) { detail += detail == '' ? '总共: ' : ', ' detail += myinfo.showLabel } if (signinfo.signapp.data.prizeLists) { detail += `, 说明: 还有${signinfo.signapp.data.remainingPoint}云钻待领取` const prizeLists = signinfo.signapp.data.prizeLists const customerDays = signinfo.signapp.data.customerDays const prize = prizeLists[customerDays - 1] moreDetail += moreDetail == '' ? '' : '\n' moreDetail += '\n💎 每日签到: ' for (res of prize) moreDetail += `\n${res.prizeName}: ${res.prizeContent}` } } else { subTitle = '签到: 失败' chavy.log(`❌ ${cookieName} showmsg - 每日签到: ${JSON.stringify(signinfo.signapp)}`) } subTitle += subTitle == '' ? '' : ', ' if (signinfo.signweb) { if (signinfo.signweb.respCode == '1') { subTitle += '红包: 成功' } else if (signinfo.signweb.respCode == '70512') { subTitle += '红包: 重复' } else { subTitle += '红包: 失败' chavy.log(`❌ ${cookieName} showmsg - 每日红包 - signweb: ${JSON.stringify(signinfo.signweb)}`) } } else { subTitle += '红包: 失败' chavy.log(`❌ ${cookieName} showmsg - 每日红包 - signweb: ${JSON.stringify(signinfo.signweb)}`) } subTitle += subTitle == '' ? '' : ', ' if (signinfo.signgame && signinfo.signgame.code == '1') { if (signinfo.signgame.data.resultCode == 'SG0000') { subTitle += '低价: 成功' } else if (signinfo.signgame.data.resultCode == 'SG0103') { subTitle += '低价: 重复' } else { subTitle += '低价: 失败' chavy.log(`❌ ${cookieName} showmsg - 每日红包 - signgame: ${JSON.stringify(signinfo.signgame)}`) } } else { subTitle += '低价: 失败' chavy.log(`❌ ${cookieName} showmsg - 每日红包 - signgame: ${JSON.stringify(signinfo.signgame)}`) } if (signinfo.webinfo && signinfo.webinfo.respData) { const currentIndex = signinfo.webinfo.respData.currentIndex const detailTreeMap = signinfo.webinfo.respData.detailTreeMap const currentMap = detailTreeMap[currentIndex] if (currentMap.signMark == true) { moreDetail += moreDetail == '' ? '' : '\n' moreDetail += '\n🧧 每日红包: ' for (res of currentMap.resList) moreDetail += `\n${res.remark}: ${res.amount}` } else { chavy.log(`❌ ${cookieName} showmsg - 每日红包 - webinfo: ${JSON.stringify(signinfo.webinfo)}`) } } else { chavy.log(`❌ ${cookieName} showmsg - 每日红包 - webinfo: ${JSON.stringify(signinfo.webinfo)}`) } if (signinfo.signgame && signinfo.gameinfo && signinfo.gameinfo.code == 1) { if (signinfo.gameinfo.data.resultCode == 0000) { moreDetail += moreDetail == '' ? '' : '\n' moreDetail += '\n💰 天天低价: ' for (d of signinfo.gameinfo.data.result.datas) if (d.obj) moreDetail += `\n${d.obj.couponRuleName} (${d.obj.remainValue}元)` else moreDetail += `\n${d.basePrizeEntity.prizeName} (${d.basePrizeEntity.prizeRules})` } else { chavy.log(`❌ ${cookieName} showmsg - 天天低价 - gameinfo: ${JSON.stringify(signinfo.gameinfo)}`) } } else { chavy.log(`❌ ${cookieName} showmsg - 天天低价 - gameinfo: ${JSON.stringify(signinfo.gameinfo)}`) } if (moreDetail) detail += `\n查看签到详情\n${moreDetail}` chavy.msg(cookieName, subTitle, detail) } function init() { isSurge = () => { return undefined === this.$httpClient ? false : true } isQuanX = () => { return undefined === this.$task ? false : true } getdata = (key) => { if (isSurge()) return $persistentStore.read(key) if (isQuanX()) return $prefs.valueForKey(key) } setdata = (key, val) => { if (isSurge()) return $persistentStore.write(key, val) if (isQuanX()) return $prefs.setValueForKey(key, val) } msg = (title, subtitle, body) => { if (isSurge()) $notification.post(title, subtitle, body) if (isQuanX()) $notify(title, subtitle, body) } log = (message) => console.log(message) get = (url, cb) => { if (isSurge()) { $httpClient.get(url, cb) } if (isQuanX()) { url.method = 'GET' $task.fetch(url).then((resp) => cb(null, resp, resp.body)) } } post = (url, cb) => { if (isSurge()) { $httpClient.post(url, cb) } if (isQuanX()) { url.method = 'POST' $task.fetch(url).then((resp) => cb(null, resp, resp.body)) } } done = (value = {}) => { $done(value) } return {isSurge, isQuanX, msg, log, getdata, setdata, get, post, done} }