mirror of
https://github.com/shufflewzc/faker3.git
synced 2024-11-15 00:09:20 +08:00
282 lines
8.7 KiB
JavaScript
282 lines
8.7 KiB
JavaScript
/*
|
||
|
||
*/
|
||
let jdSignUrl = '' // 算法url
|
||
let Authorization = '' // 算法url token 有则填
|
||
let got = '';
|
||
try{
|
||
got = require('got');
|
||
}catch(e){
|
||
console.log('请添加依赖模块"got"')
|
||
}
|
||
|
||
|
||
jdSignUrl = process.env.gua_cleancart_SignUrl ? process.env.gua_cleancart_SignUrl : `${jdSignUrl}`
|
||
Authorization = process.env.gua_cleancart_Authorization ? process.env.gua_cleancart_Authorization : `${Authorization}`
|
||
if(Authorization && Authorization.indexOf("Bearer ") === -1) Authorization = `Bearer ${Authorization}`
|
||
let cookie = ''
|
||
let out = false
|
||
|
||
async function clean(ck,url,goodsArr){
|
||
if(!got) return false
|
||
return new Promise(async resolve => {
|
||
let msg = false
|
||
try{
|
||
if(!ck) return ''
|
||
if(!jdSignUrl) jdSignUrl = url
|
||
cookie = ck
|
||
// if(jdSignUrl.indexOf("://jd.smiek.tk/") > -1) {
|
||
// resolve(msg)
|
||
// return false
|
||
// }
|
||
let signBody = `{"homeWishListUserFlag":"1","userType":"0","updateTag":true,"showPlusEntry":"2","hitNewUIStatus":"1","cvhv":"049591","cartuuid":"hjudwgohxzVu96krv/T6Hg==","adid":""}`
|
||
let body = await jdSign('cartClearQuery', signBody)
|
||
if(out) return
|
||
if(!body){
|
||
console.log('获取不到算法')
|
||
return
|
||
}
|
||
let data = await jdApi('cartClearQuery',body)
|
||
let res = jsonParse(data)
|
||
if(typeof res == 'object' && res){
|
||
if(res.resultCode == 0){
|
||
if(res.mainTitle.indexOf('购物车是空的') > -1){
|
||
msg = []
|
||
}else if(!res.clearCartInfo || !res.subTitle){
|
||
console.log(res.mainTitle)
|
||
}else{
|
||
let num = 0
|
||
if(res.subTitle){
|
||
num = res.subTitle.match(/共(\d+)件商品/).length > 0 && res.subTitle.match(/共(\d+)件商品/)[1] || 0
|
||
console.log(res.subTitle)
|
||
}
|
||
// console.log(`共${num}件商品`)
|
||
if(num != 0){
|
||
let operations = []
|
||
let operNum = 0
|
||
let goodsArrs = []
|
||
let goodsArrsFlag = false
|
||
for(let a of res.clearCartInfo || {}){
|
||
// console.log(a.groupName)
|
||
// if(a.groupName.indexOf('7天内加入购物车') > -1){
|
||
if(typeof goodsArr !== 'object'){
|
||
goodsArrs = [...goodsArrs,...a.groupDetails]
|
||
goodsArrsFlag = true
|
||
}else{
|
||
for(let s of a.groupDetails || []){
|
||
if(typeof goodsArr === 'object'){
|
||
let XBDetail = goodsArr.filter((x) => x.skuId === s.skuId)
|
||
if(XBDetail.length == 0){
|
||
// console.log(s.unusable,s.skuUuid,s.name)
|
||
operNum += s.clearSkus && s.clearSkus.length || 1;
|
||
operations.push({
|
||
"itemType": s.itemType+"",
|
||
"suitType": s.suitType,
|
||
"skuUuid": s.skuUuid+"",
|
||
"itemId": s.itemId || s.skuId,
|
||
"useUuid": typeof s.useUuid !== 'undefined' && s.useUuid || false
|
||
})
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// }
|
||
}
|
||
if(goodsArrsFlag){
|
||
msg = goodsArrs || []
|
||
return
|
||
}
|
||
console.log(`准备清空${operNum}件商品`)
|
||
if(operations.length == 0){
|
||
console.log(`清空${operNum}件商品|没有找到要清空的商品`)
|
||
}else{
|
||
let clearBody = `{"homeWishListUserFlag":"1","userType":"0","updateTag":false,"showPlusEntry":"2","hitNewUIStatus":"1","cvhv":"049591","cartuuid":"hjudwgohxzVu96krv/T6Hg==","operations":${jsonStringify(operations)},"adid":"","coord_type":"0"}`
|
||
clearBody = await jdSign('cartClearRemove', clearBody)
|
||
if(out) return
|
||
if(!clearBody){
|
||
console.log('获取不到算法')
|
||
}else{
|
||
let clearData = await jdApi('cartClearRemove',clearBody)
|
||
let clearRes = jsonParse(clearData)
|
||
if(typeof clearRes == 'object'){
|
||
if(clearRes.resultCode == 0) {
|
||
console.log(`清空${operNum}件商品|✅\n`)
|
||
}else if(clearRes.mainTitle){
|
||
console.log(`清空${operNum}件商品|${clearRes.mainTitle}\n`)
|
||
}else{
|
||
console.log(`清空${operNum}件商品|❌\n`)
|
||
console.log(clearData)
|
||
}
|
||
}else{
|
||
console.log(`清空${operNum}件商品|❌\n`)
|
||
console.log(clearData)
|
||
}
|
||
}
|
||
}
|
||
}else if(res.mainTitle){
|
||
if(res.mainTitle.indexOf('购物车是空的') > -1){
|
||
msg = []
|
||
}
|
||
console.log(res.mainTitle)
|
||
}else{
|
||
console.log(data)
|
||
}
|
||
}
|
||
}else{
|
||
console.log(data)
|
||
}
|
||
}else{
|
||
console.log(data)
|
||
}
|
||
}catch(e){
|
||
console.log(e)
|
||
} finally {
|
||
resolve(msg);
|
||
}
|
||
})
|
||
}
|
||
|
||
function jdApi(functionId,body) {
|
||
if(!functionId || !body) return
|
||
return new Promise(resolve => {
|
||
let opts = taskPostUrl(`/client.action?functionId=${functionId}`, body)
|
||
got.post(opts).then(
|
||
(resp) => {
|
||
const {body:data } = resp
|
||
try {
|
||
let res = jsonParse(data);
|
||
if(typeof res == 'object'){
|
||
if(res.mainTitle) console.log(res.mainTitle)
|
||
if(res.resultCode == 0){
|
||
resolve(res);
|
||
}else if (res.tips && res.tips.includes("正在努力加载")){
|
||
console.log("请求太快,ip被限制了")
|
||
out = true
|
||
}
|
||
}
|
||
} catch (e) {
|
||
console.log(e)
|
||
} finally {
|
||
resolve('');
|
||
}
|
||
},
|
||
(err) => {
|
||
try {
|
||
const { message: error, response: resp } = err
|
||
console.log(`${jsonStringify(error)}`)
|
||
console.log(`${functionId} API请求失败,请检查网路重试`)
|
||
} catch (e) {
|
||
console.log(e)
|
||
} finally {
|
||
resolve('')
|
||
}
|
||
}
|
||
)
|
||
})
|
||
}
|
||
|
||
function jdSign(fn,body) {
|
||
let sign = ''
|
||
let flag = false
|
||
try{
|
||
const fs = require('fs');
|
||
if (fs.existsSync('./gua_encryption_sign.js')) {
|
||
const encryptionSign = require('./gua_encryption_sign');
|
||
sign = encryptionSign.getSign(fn, body)
|
||
}else{
|
||
flag = true
|
||
}
|
||
sign = sign.data && sign.data.sign && sign.data.sign || ''
|
||
}catch(e){
|
||
flag = true
|
||
}
|
||
if(!flag) return sign
|
||
if(!jdSignUrl.match(/^https?:\/\//)){
|
||
console.log('请填写算法url')
|
||
out = true
|
||
return ''
|
||
}
|
||
return new Promise((resolve) => {
|
||
let options = {
|
||
url: jdSignUrl,
|
||
body:`{"fn":"${fn}","body":${body}}`,
|
||
headers: {
|
||
'Accept':'*/*',
|
||
"accept-encoding": "gzip, deflate, br",
|
||
'Content-Type': 'application/json',
|
||
},
|
||
timeout:30000
|
||
}
|
||
if(Authorization) options["headers"]["Authorization"] = Authorization
|
||
got.post(options).then(
|
||
(resp) => {
|
||
const {body:data } = resp
|
||
try {
|
||
let res = jsonParse(data)
|
||
if(typeof res === 'object' && res){
|
||
if(res.code && res.code == 200 && res.data){
|
||
if(res.data.sign) sign = res.data.sign || ''
|
||
if(sign != '') resolve(sign)
|
||
}else{
|
||
console.log(data)
|
||
}
|
||
}else{
|
||
console.log(data)
|
||
}
|
||
} catch (e) {
|
||
console.log(e)
|
||
} finally {
|
||
resolve('')
|
||
}
|
||
},
|
||
(err) => {
|
||
try {
|
||
const { message: error, response: resp } = err
|
||
console.log(`${jsonStringify(error)}`)
|
||
console.log(`算法url API请求失败,请检查网路重试`)
|
||
} catch (e) {
|
||
console.log(e)
|
||
} finally {
|
||
resolve('')
|
||
}
|
||
}
|
||
|
||
)
|
||
})
|
||
}
|
||
|
||
function jsonParse(str) {
|
||
try {
|
||
return JSON.parse(str);
|
||
} catch (e) {
|
||
return str;
|
||
}
|
||
}
|
||
|
||
function jsonStringify(arr) {
|
||
try {
|
||
return JSON.stringify(arr);
|
||
} catch (e) {
|
||
return arr;
|
||
}
|
||
}
|
||
|
||
function taskPostUrl(url, body) {
|
||
return {
|
||
url: `https://api.m.jd.com${url}`,
|
||
body: body,
|
||
headers: {
|
||
"Accept": "*/*",
|
||
"Accept-Language": "zh-cn",
|
||
"Accept-Encoding": "gzip, deflate, br",
|
||
"Connection": "keep-alive",
|
||
"Content-Type": "application/x-www-form-urlencoded",
|
||
'Cookie': `${cookie}`,
|
||
"User-Agent": "JD4iPhone/167853 (iPhone; iOS; Scale/2.00)" ,
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = {
|
||
clean
|
||
} |