Skip to content
This repository was archived by the owner on Nov 27, 2025. It is now read-only.

Commit acd362a

Browse files
committed
修复签名算法,增加每日积分自动领取
1 parent 612916e commit acd362a

3 files changed

Lines changed: 56 additions & 4 deletions

File tree

src/api/consts/exceptions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export default {
99
API_CONTENT_FILTERED: [-2006, '内容由于合规问题已被阻止生成'],
1010
API_IMAGE_GENERATION_FAILED: [-2007, '图像生成失败'],
1111
API_VIDEO_GENERATION_FAILED: [-2008, '视频生成失败'],
12+
API_IMAGE_GENERATION_INSUFFICIENT_POINTS: [-2009, '即梦积分不足'],
1213
}

src/api/controllers/core.ts

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,51 @@ export function generateCookie(refreshToken: string) {
8585
].join("; ");
8686
}
8787

88+
/**
89+
* 获取积分信息
90+
*
91+
* @param refreshToken 用于刷新access_token的refresh_token
92+
*/
93+
export async function getCredit(refreshToken: string) {
94+
const {
95+
credit: { gift_credit, purchase_credit, vip_credit }
96+
} = await request("POST", "/commerce/v1/benefits/user_credit", refreshToken, {
97+
data: {},
98+
headers: {
99+
// Cookie: 'x-web-secsdk-uid=ef44bd0d-0cf6-448c-b517-fd1b5a7267ba; s_v_web_id=verify_m4b1lhlu_DI8qKRlD_7mJJ_4eqx_9shQ_s8eS2QLAbc4n; passport_csrf_token=86f3619c0c4a9c13f24117f71dc18524; passport_csrf_token_default=86f3619c0c4a9c13f24117f71dc18524; n_mh=9-mIeuD4wZnlYrrOvfzG3MuT6aQmCUtmr8FxV8Kl8xY; sid_guard=a7eb745aec44bb3186dbc2083ea9e1a6%7C1733386629%7C5184000%7CMon%2C+03-Feb-2025+08%3A17%3A09+GMT; uid_tt=59a46c7d3f34bda9588b93590cca2e12; uid_tt_ss=59a46c7d3f34bda9588b93590cca2e12; sid_tt=a7eb745aec44bb3186dbc2083ea9e1a6; sessionid=a7eb745aec44bb3186dbc2083ea9e1a6; sessionid_ss=a7eb745aec44bb3186dbc2083ea9e1a6; is_staff_user=false; sid_ucp_v1=1.0.0-KGRiOGY2ODQyNWU1OTk3NzRhYTE2ZmZhYmFjNjdmYjY3NzRmZGRiZTgKHgjToPCw0cwbEIXDxboGGJ-tHyAMMITDxboGOAhAJhoCaGwiIGE3ZWI3NDVhZWM0NGJiMzE4NmRiYzIwODNlYTllMWE2; ssid_ucp_v1=1.0.0-KGRiOGY2ODQyNWU1OTk3NzRhYTE2ZmZhYmFjNjdmYjY3NzRmZGRiZTgKHgjToPCw0cwbEIXDxboGGJ-tHyAMMITDxboGOAhAJhoCaGwiIGE3ZWI3NDVhZWM0NGJiMzE4NmRiYzIwODNlYTllMWE2; store-region=cn-gd; store-region-src=uid; user_spaces_idc={"7444764277623653426":"lf"}; ttwid=1|cxHJViEev1mfkjntdMziir8SwbU8uPNVSaeh9QpEUs8|1733966961|d8d52f5f56607427691be4ac44253f7870a34d25dd05a01b4d89b8a7c5ea82ad; _tea_web_id=7444838473275573797; fpk1=fa6c6a4d9ba074b90003896f36b6960066521c1faec6a60bdcb69ec8ddf85e8360b4c0704412848ec582b2abca73d57a; odin_tt=efe9dc150207879b88509e651a1c4af4e7ffb4cfcb522425a75bd72fbf894eda570bbf7ffb551c8b1de0aa2bfa0bd1be6c4157411ecdcf4464fcaf8dd6657d66',
100+
Referer: "https://jimeng.jianying.com/ai-tool/image/generate",
101+
// "Device-Time": 1733966964,
102+
// Sign: "f3dbb824b378abea7c03cbb152b3a365"
103+
}
104+
});
105+
logger.info(`\n积分信息: \n赠送积分: ${gift_credit}, 购买积分: ${purchase_credit}, VIP积分: ${vip_credit}`);
106+
return {
107+
giftCredit: gift_credit,
108+
purchaseCredit: purchase_credit,
109+
vipCredit: vip_credit,
110+
totalCredit: gift_credit + purchase_credit + vip_credit
111+
}
112+
}
113+
114+
/**
115+
* 接收今日积分
116+
*
117+
* @param refreshToken 用于刷新access_token的refresh_token
118+
*/
119+
export async function receiveCredit(refreshToken: string) {
120+
logger.info("正在收取今日积分...")
121+
const { cur_total_credits, receive_quota } = await request("POST", "/commerce/v1/benefits/credit_receive", refreshToken, {
122+
data: {
123+
time_zone: "Asia/Shanghai"
124+
},
125+
headers: {
126+
Referer: "https://jimeng.jianying.com/ai-tool/image/generate"
127+
}
128+
});
129+
logger.info(`\n今日${receive_quota}积分收取成功\n剩余积分: ${cur_total_credits}`);
130+
return cur_total_credits;
131+
}
132+
88133
/**
89134
* 请求jimeng
90135
*
@@ -102,7 +147,7 @@ export async function request(
102147
const token = await acquireToken(refreshToken);
103148
const deviceTime = util.unixTimestamp();
104149
const sign = util.md5(
105-
`9e2c|_config|${PLATFORM_CODE}|${VERSION_CODE}|${deviceTime}|11ac`
150+
`9e2c|${uri.slice(-7)}|${PLATFORM_CODE}|${VERSION_CODE}|${deviceTime}||11ac`
106151
);
107152
const response = await axios.request({
108153
method,
@@ -205,10 +250,11 @@ export async function uploadFile(
205250
* @param result 结果
206251
*/
207252
export function checkResult(result: AxiosResponse) {
208-
if (!result.data) return null;
209253
const { ret, errmsg, data } = result.data;
210254
if (!_.isFinite(Number(ret))) return result.data;
211-
if (ret === "0") return data;
255+
if (ret === '0') return data;
256+
if (ret === '5000')
257+
throw new APIException(EX.API_IMAGE_GENERATION_INSUFFICIENT_POINTS, `[无法生成图像]: 即梦积分可能不足,${errmsg}`);
212258
throw new APIException(EX.API_REQUEST_FAILED, `[请求jimeng失败]: ${errmsg}`);
213259
}
214260

src/api/controllers/images.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import _ from "lodash";
33
import APIException from "@/lib/exceptions/APIException.ts";
44
import EX from "@/api/consts/exceptions.ts";
55
import util from "@/lib/util.ts";
6-
import { request } from "./core.ts";
6+
import { getCredit, receiveCredit, request } from "./core.ts";
77
import logger from "@/lib/logger.ts";
88

99
const DEFAULT_ASSISTANT_ID = "513695";
@@ -39,6 +39,11 @@ export async function generateImages(
3939
) {
4040
const model = getModel(_model);
4141
logger.info(`使用模型: ${_model} 映射模型: ${model} ${width}x${height} 精细度: ${sampleStrength}`);
42+
43+
const { totalCredit } = await getCredit(refreshToken);
44+
if (totalCredit <= 0)
45+
await receiveCredit(refreshToken);
46+
4247
const componentId = util.uuid();
4348
const { aigc_data } = await request(
4449
"post",

0 commit comments

Comments
 (0)