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.
 
 

85 lines
2.8 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
* @param publicKey
* @returns {Promise<*>}
*/
async get_los(url, param, html, loginCookieStr, publicKey) {
let baseUrl = new URL(url).origin;
let urlPath = url.replace(baseUrl, "");
let headers = {};
console.time('los生成时长')
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
if (loginCookieStr != null && loginCookieStr != "") {
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 fpCrypt = new FpCrypt(loginCookieStr, publicKey);
// 处理 Param
let handleParam = fpCrypt.handleParam(param, urlPath);
console.log(`处理 Param 结果 ${JSON.stringify(handleParam)}`)
var enParam = ""
if (handleParam["enVal"]) {
enParam = JSON.stringify({'Jmbw': handleParam["enVal"]});
headers['security-mes-key'] = handleParam["enMesKey"]
}
// 处理 xhr 后缀
let handleSuffix = fpCrypt.handleSuffix(urlPath);
console.log(`处理 xhr 后缀 ${JSON.stringify(handleSuffix)}`)
let los = window[window["_d_ts"]](handleSuffix, enParam);
headers['lzkqow23819'] = los.hd
los["headers"] = headers['security-mes-key']
los["cookies"] = cookieJar.getCookieStringSync(baseUrl);
console.log('js执行完成,返回结果 ', JSON.stringify(los))
// 关闭
dom.window.close()
console.timeEnd('los生成时长')
return los
}
}
module.exports = FpService