import express, { urlencoded } from "express"; import { GetXToken, defaultConfig, Remark, CipherTable } from "./CipherStash-xToken.js"; import { defaultConfigh5st, handleH5stRequest } from './h5st.js'; import { readFile } from 'fs'; const app = express(); app.use(urlencoded({ extended: true })); // 读取配置文件 readFile(`${defaultConfig.ConfigName}.txt`, 'utf8', (err, data) => { if (err) { console.warn(`查无配置文件,将使用默认配置;配置文件名:${defaultConfig.ConfigName}.txt`); } else { const lines = data.split('\n'); if (lines.length >= 2) { defaultConfig.route = lines[0].trim(); defaultConfig.port = parseInt(lines[1].trim(), 10) || 6689; } } app.get(defaultConfig.route, function (req, res) { /** * 接口文档 */ const apiDoc = `

API 加密算法文档

重要提示:请勿将这些算法用于任何违法行为

请求概览

请求方法 POST
表单格式 x-www-form-urlencoded

API 接口详情

1. X-Api-Eid-Token算法

用于生成API请求的Eid Token

请求字段:

Key Value 说明
type 11 固定值
str Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 UserAgent参数

返回结果示例:

{"code":0,"msg":"成功","data":{"token":"jdd03CGY3XHRBUYYHUESZTTF3NUFTJCY35XFKI3IUEKMFIHWCAB4RFTZRNKR3GWD6UUOGNBMK6AFDAK3KLDJY5BJSBLFKI4AAAAMZ44RCAVAAAAAACRXJASXS2ZLTX4X","eid":"CGY3XHRBUYYHUESZTTF3NUFTJCY35XFKI3IUEKMFIHWCAB4RFTZRNKR3GWD6UUOGNBMK6AFDAK3KLDJY5BJSBLFKI4","gia_d":1,"deMap":null,"ds":120}}
`; // 返回 API 文档 res.send(apiDoc); }); app.post(defaultConfig.route, async function (req, res) { try { let { type, str, proxy } = req.body; let content = ''; console.log(`${new Date().toLocaleString()} --> 客户端:${req.ip} --> 代理:${proxy} --> 执行算法:${CipherTable[type]}`); // 创建对象映射 const algorithmMap = { '1': async () => await GetXToken(str, proxy) }; // 匹配对应的对象 const handler = algorithmMap[type]; content = handler ? await handler() : '查无此算法'; res.send(content); } catch (e) { console.log(`${new Date().toLocaleString()} --> 客户端:${req.ip} --> 执行异常:${e}`); res.send('解析异常,请检查请求参数'); } }); }); app.get(`${defaultConfigh5st.route}/apidoc`, (req, res) => { /** * 同意异常日志 * * @param {*} e */ function error(e) { console.log(`${new Date().toLocaleString()} --> 客户端:${req.ip} --> 解析异常:${e}`); res.send(defaultConfigh5st.errorStr); } try { // api 文档 apiDoc = ` API接口文档

API 接口文档

请勿将本API用于任何违法行为

接口请求模式

请求方法 表单格式 备注
GET
POST x-www-form-urlencoded 适用于数据量较大的请求

字段概述

参数计算所涉及的字段名(区分大小写)及其描述:

基础字段

字段名 描述 备注
khd 客户端代号(jx、pc、jm、m(不填写默认m)) 选填接口请求不通可选择对应的平台代号
ai 需求的官方接口抓包中的h5st数据进行拆分 - 第3个位置 必填原始抓包数据中的h5st参数值中提取
pin cookie中pin或者pt_pin字段的属性值 可选无需登录则不填
sua user-agent第一个括号内的参数 必填注意跟实际的一致(空格允许存在)

官方接口字段(字段名与官方接口一致)- 理论支持所有出现过的字段

提示 官方接口有出现对应字段时才需拼接到请求参数

示例 appid=xx&functionId=xx 以此类推;未出现字段无需拼接Key、Value

注意 区分大小写

字段名 备注
appid 选填
functionId 选填
body 选填数据过长可使用post模式请求、或者手动进行SHA256进行加密后再次填写
clientVersion 选填
client 选填
t 选填
jsonp 选填
api 选填
appId 选填
v 选填
metrics 选填
outputDimensions 选填
filters 选填
orderBy 选填
pageNum 选填
pageSize 选填

API 接口示例

例子1:jx端获取订单列表数据

注意 自行替换正确的IP地址,pin替换实际的参数,sua注意空格

字段名 示例值
khd jx
ai 25f73
pin 根据实际填写cookie中pin或者pt_pin字段的属性值
sua Windows NT 10.0; Win64; x64
functionId lite_newUserAllOrderList
appid jx_h5
t 1748489096059
clientVersion 1.2.5
client jxh5
body {"page":1,"pagesize":10,"buid":325,"appCode":"ms0ca95114","time":1748489096059,"signStr":"db3c8b3733006239b535be3975c072ab"}

GET请求示例

请求URL:
http://127.0.0.1:${defaultConfigh5st.port}${defaultConfigh5st.route}?khd=jx&ai=25f73&pin=&sua=Windows NT 10.0; Win64; x64&functionId=lite_newUserAllOrderList&appid=jx_h5&t=1748489096059&clientVersion=1.2.5&client=jxh5&body=

POST请求示例 (x-www-form-urlencoded)

请求URL:
http://127.0.0.1:${defaultConfigh5st.port}${defaultConfigh5st.route}
请求头:
Content-Type: application/x-www-form-urlencoded
请求体:
khd=jx&ai=25f73&pin=&sua=Windows NT 10.0; Win64; x64&functionId=lite_newUserAllOrderList&appid=jx_h5&t=1748489096059&clientVersion=1.2.5&client=jxh5&body=

提示 body参数带中文时需要将body属性值进行URL编码

例子2:j麦接口

注意 自行替换正确的IP地址,body,pin替换实际的参数,sua注意空格

字段名 示例值
khd jm
ai 0248a
pin 根据实际填写cookie中pin或者pt_pin字段的属性值
sua Windows NT 10.0; Win64; x64
api dsm.wareshopv2.ware.wareListService.queryWareList
v 1.0
appId 3MC69M4R3HFKCQ4S01DN
body {"a": "1"}

GET请求示例

请求URL:
http://127.0.0.1:${defaultConfigh5st.port}${defaultConfigh5st.route}?khd=jm&ai=0248a&pin=&sua=Windows NT 10.0; Win64&api=dsm.wareshopv2.ware.wareListService.queryWareList&v=1.0&appId=3MC69M4R3HFKCQ4S01DN&body={"a":"1"}

POST请求示例 (x-www-form-urlencoded)

请求URL:
http://127.0.0.1:${defaultConfigh5st.port}${defaultConfigh5st.route}
请求头:
Content-Type: application/x-www-form-urlencoded
请求体:
khd=jm&ai=0248a&pin=&sua=Windows NT 10.0; Win64&api=dsm.wareshopv2.ware.wareListService.queryWareList&v=1.0&appId=3MC69M4R3HFKCQ4S01DN&body={"a":"1"}

提示 body参数带中文时需要将body属性值进行URL编码

` res.send(apiDoc); } catch (e) { error(e); } }); app.post(defaultConfigh5st.route, (req, res) => handleH5stRequest(req, res, req.body)); app.get(defaultConfigh5st.route, (req, res) => handleH5stRequest(req, res, req.query)); app.listen(defaultConfig.port, '0.0.0.0', () => { console.log(`${defaultConfig.CipherName}服务端启动成功!!!`); console.log(`路由:${defaultConfig.route}`); console.log(`端口:${defaultConfig.port}`) });