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.
 
 

148 lines
6.0 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");
const FpCrypt = require("./static/fp/fp-crypt");
class FpService {
js = fs.readFileSync(path.resolve(__dirname, './static/fp/chunk-npjg4qgmmrfrjl3r.js'), 'utf8').toString();
/**
*
* @param url
* @param param
* @param html
* @param loginCookieStr
* @returns {Promise<*>}
*/
async get_los(url, param, html, loginCookieStr) {
let baseUrl = new URL(url).origin;
let urlPath = url.replace(baseUrl, "");
let headers = {};
if (param != null || param !== "") {
let fpCrypt = new FpCrypt(loginCookieStr);
let $e = fpCrypt.$e(param, urlPath);
param = JSON.stringify({'jmbw': $e["enVal"]});
headers['security-mes-key'] = $e["enMesKey"]
}
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"]](urlPath, param);
console.log(urlPath)
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,
a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), c = [];
if (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