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.
 
 

104 lines
4.7 KiB

const {jsdomFromText, browser} = require("sdenv");
const {Script} = require("node:vm");
const fs = require("node:fs");
const FpCrypt = require("../../routes/service/static/fp/fp-crypt");
var baseUrl = 'https://dppt.hubei.chinatax.gov.cn:8443'
// TODO 需要文件内的 meta name="_y_ds" content 标签内容
var html = fs.readFileSync('./invoice-business.html', 'utf8').toString();
let js = fs.readFileSync('./chunk-npjg4qgmmrfrjl3r.js', 'utf8').toString();
// TODO:用户登陆token 测试时需要替换
var loginCookieStr = "c_time=12; tpass_j36c2335ff6948fya33ffjaf49p5c9d4=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImIyNDM4MWFjNDFhZjQzNzFhOGUzNTBiNmU4Yjc1MzAwIn0.wSja8XbrdHHzL2XbyUYinxdfkmaKIhTb4utkU32p4Gm4FmNK5C1mqi5ciQDevGecnIuiwDl01LWq9ARxw61jNw; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221922318b4f6471-000ea045abdc525-26001151-3153384-1922318b4f71127%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkyMjMxOGI0ZjY0NzEtMDAwZWEwNDVhYmRjNTI1LTI2MDAxMTUxLTMxNTMzODQtMTkyMjMxOGI0ZjcxMTI3In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%221922318b4f6471-000ea045abdc525-26001151-3153384-1922318b4f71127%22%7D; sajssdk_2015_cross_new_user=1; oauth2_referer=znhd.heilongjiang.chinatax.gov.cn; znhd-ssotoken=b096bb1665054196ab162b2c805d5e7e; ZNHD_SECURITY_CHECK_TOKEN=9e902389e0d14d0caf85a8e751db234b; lzkqow39189=4ac60487c31343058661663cfefe6a18; DTSwUOYx7MiWN=7d45930277c672e6c1e6418ab4ff4c5f95ae99397eb268c8dd55cca4c84fb3d4; dzfp-ssotoken=5ac34eda13a04d7d9121bff68bcb9e10; SSO_SECURITY_CHECK_TOKEN=76125dd04e1a413998f52d4fcf32ec55; lzkqow38189=1727167032940; MKls83gqduGS=e2b845bc89f2aaee50d5d424f07d63c3ed78ed01fba8736ee3c1d7adec53dc72403df896e732f6c976cfcaaf542cd83a"
getRes()
async function getRes(){
var urlPath = `/szzhzz/swszzhCtr/v1/getNsrjbxx?t=${new Date().getTime()}`
// TODO:如果有 param 加密后得到 enParam
// var param = '{"gjbq":"1","fpztDm":["01","02","03","04"],"fplyDm":"0","fplxDm":[],"kprqq":"2024-09-09","kprqz":"2024-09-25","tfrqq":"2024-09-09","tfrqz":"2024-09-25","sflzfp":"","dtBz":"N","pageNumber":1,"pageSize":0}';
var param = ""
let fpCrypt = new FpCrypt(loginCookieStr);
let handleParam = fpCrypt.handleParam(param, urlPath);
var enParam = ""
if (handleParam["enVal"]){
enParam = JSON.stringify({'Jmbw': handleParam["enVal"]});
console.log(enParam)
}
// headers['security-mes-key'] = $e["enMesKey"]
let handleSuffix = fpCrypt.handleSuffix(urlPath);
return await get_los(handleSuffix, enParam,"");
}
async function get_los(url, param, _y_ds) {
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(js);
let internalVMContext = dom.getInternalVMContext();
// 执行 js
script.runInContext(internalVMContext, {timeout: 1000});
if (_y_ds){
window.$_y_ds = _y_ds
}
if (window.$dunm.$byno) {
window.$dunm.$byno();
}
let los = window[window["_d_ts"]](url, param);
console.log('js执行完成,返回结果 ', los)
// 关闭
dom.window.close()
console.timeEnd('js执行时长')
// console.log(cookieJar.getCookieStringSync(baseUrl))
var getPublicKey = await fetch(`${baseUrl + los.hurl}`, {
"headers" : {
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'sso_security_check_token': '76125dd04e1a413998f52d4fcf32ec55',
'x-requested-with': 'XMLHttpRequest',
'lzkqow23819': `${los.hd}`,
'nsrsbh': '91420112MA4KNXTP72',
"cookie": cookieJar.getCookieStringSync(baseUrl),
},
// "body": `${los.bd}`,
"method": "GET"
});
let newVar = await getPublicKey.json();
console.log('测试请求', newVar)
// if (newVar['data']) {
// console.log(newVar['data'])
// }
return newVar
}
module.exports = getRes