You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
5.3 KiB
112 lines
5.3 KiB
const CryptoJS = require('crypto-js'); |
|
const {jsdomFromText, browser} = require("sdenv"); |
|
const {Script} = require("node:vm"); |
|
const fs = require("node:fs"); |
|
const path = require("node:path"); |
|
class FpService { |
|
js = fs.readFileSync(path.resolve(__dirname, './static/fp/chunk-npjg4qgmmrfrjl3r.js'), 'utf8').toString(); |
|
|
|
async get_los (url, param,html,loginCookieStr) { |
|
let baseUrl = new URL(url).origin; |
|
console.time('js执行时长') |
|
const [jsDom, cookieJar] = jsdomFromText({ |
|
url: `${baseUrl}/invoice-query/invoice-query`, |
|
referrer: baseUrl, |
|
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36', |
|
contentType: "text/html", |
|
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only' |
|
}) |
|
// 加载dom |
|
let dom = await jsDom(html); |
|
const window = dom.window |
|
|
|
// 设置 cookie |
|
for (let cookie of loginCookieStr.trim().split("; ")) { |
|
cookieJar.setCookieSync(cookie, baseUrl); |
|
} |
|
|
|
browser(window, 'chrome'); |
|
// 加载js |
|
let script = new Script(this.js); |
|
let internalVMContext = dom.getInternalVMContext(); |
|
// 执行 js |
|
script.runInContext(internalVMContext, {timeout: 1000}); |
|
|
|
if (window.$dunm.$byno) { |
|
window.$dunm.$byno(); |
|
} |
|
|
|
let los = window[window["_d_ts"]](url.replace(baseUrl,""), param); |
|
console.log(url.replace(baseUrl,"")) |
|
let cookies = cookieJar.getCookieStringSync(baseUrl); |
|
los["cookies"] = cookies |
|
console.log('js执行完成,返回结果 ',los ) |
|
// 关闭 |
|
dom.window.close() |
|
console.timeEnd('js执行时长') |
|
return los |
|
} |
|
random_32 (param){ |
|
var n, i,e=null, |
|
a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"["split"](""), c = []; |
|
if (e = e || a["length"], 32) for (n = 0; n < 32; n++) c[n] = a[0 | (Math["random"]() * e)]; else for (c[8] = c[13] = c[18] = c[23] = "-", c[14] = "4", n = 0; (n < 36); n++) c[n] || (i = 0 | (16 * Math["random"]()), c[n] = a[19 === n ? 8 | (3 & i) : i]); |
|
console.log(`生成随机 ${e} 位字符串`, c["join"]("")) |
|
return c["join"]("") |
|
} |
|
get_cookie (key,loginCookieStr){ |
|
var key_list = loginCookieStr.split("; ") |
|
for(var k=0 ; key_list["length"]>k;k++){ |
|
if (key_list[k].includes(key)){ |
|
return key_list[k].split("=")[1] |
|
} |
|
} |
|
} |
|
reverse_str (t,loginCookieStr){ |
|
var i = this.get_cookie("dzfp-ssotoken",loginCookieStr), r = this.qe(i), |
|
c = t.split('').reverse().join("") + i.split('').reverse().join(""), |
|
u = ""; |
|
for (var s = 0; s < c["length"]; s += r) { |
|
var l = c["substring"](s, s + r); |
|
u += l.split('').reverse().join("") |
|
} |
|
var res = u["substring"](0, 20); |
|
console.log('倒叙处理字符返回20位', res) |
|
return res; |
|
} |
|
qe (n){ |
|
null === n && (n = ""); |
|
var o = n["match"]("[0-9]+"); |
|
if ((null===o)) o = 3; else { |
|
var a = o["index"]; |
|
o = parseInt(n["substring"](a, (a + 1)), 10) + 3 |
|
} |
|
return o |
|
} |
|
get_url (url) { |
|
return url+"?" |
|
} |
|
hex_md5 (reverse_str,url){ |
|
var strlist = reverse_str+"+"+this.get_url(url) |
|
var res = CryptoJS.MD5(strlist).toString() |
|
console.log('md5:',res) |
|
return res |
|
} |
|
aes_encrypt (value,key) { |
|
const srcs = CryptoJS.enc.Utf8.parse(value); |
|
const key1 = CryptoJS.enc.Utf8.parse(key); |
|
const cipherTxt = CryptoJS.AES.encrypt(srcs, key1,{ |
|
mode: CryptoJS.mode.ECB, //ECB模式 |
|
padding: CryptoJS.pad.Pkcs7 //padding处理 |
|
}).toString(); |
|
console.log('aes:',cipherTxt) |
|
return cipherTxt |
|
} |
|
} |
|
fp = new FpService() |
|
fp.random_32() |
|
fp.get_cookie("dzfp-ssotoken","tpass_tct8zta97w6c46zdt9zc2648227df5z2=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjA3NGE2NzEzZGE2ZjQ0YTFiMjA3ODRhZGM0MmUxNmM5In0.zgO2rco0oWhTgOX6tVbZVoLI_qysOfJ1fdlcghe8KyI3iUmFV_IuHvZINQWeSmKesyefAyOxWflWsbSzQiiOgw; oauth2_referer=tpass.zhejiang.chinatax.gov.cn; dzfp-ssotoken=4fa8538cee014e3b84f88ead04610dea; SSO_SECURITY_CHECK_TOKEN=bd1e0dc3898d4239af9c3b11dc8b7983; lzkqow39189=9ef06defe6d34ad7aba79ae8bbe419f8; DTSwUOYx7MiWN=dcf74815ad6d7fef22601131e58a180b8a80b714fe9224c72c6b881b3f42d8b3") |
|
fp.reverse_str("","tpass_tct8zta97w6c46zdt9zc2648227df5z2=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjA3NGE2NzEzZGE2ZjQ0YTFiMjA3ODRhZGM0MmUxNmM5In0.zgO2rco0oWhTgOX6tVbZVoLI_qysOfJ1fdlcghe8KyI3iUmFV_IuHvZINQWeSmKesyefAyOxWflWsbSzQiiOgw; oauth2_referer=tpass.zhejiang.chinatax.gov.cn; dzfp-ssotoken=4fa8538cee014e3b84f88ead04610dea; SSO_SECURITY_CHECK_TOKEN=bd1e0dc3898d4239af9c3b11dc8b7983; lzkqow39189=9ef06defe6d34ad7aba79ae8bbe419f8; DTSwUOYx7MiWN=dcf74815ad6d7fef22601131e58a180b8a80b714fe9224c72c6b881b3f42d8b3") |
|
fp.get_url("/szzhzz/qlfpcx/v1/queryFpjcxx") |
|
fp.hex_md5("6dcfffb8e51944a2c234","/szzhzz/qlfpcx/v1/queryFpjcxx") |
|
fp.aes_encrypt('2JYO2qCKaCPSwUaIcazRtIkpNRH68m9s{"gjbq":"1","fpztDm":["01","02","03","04"],"fplyDm":"0","fplxDm":[],"kprqq":"2024-09-08","kprqz":"2024-09-24","tfrqq":"2024-09-08","tfrqz":"2024-09-24","sflzfp":"","dtBz":"N","pageNumber":1,"pageSize":20}',"714acfe38a3df9da5651d01fd223d74d") |
|
module.exports = FpService |