update server/routers/back-new/features/image/image.controller.js

This commit is contained in:
xingzhe.ru
2025-07-02 09:45:02 +00:00
parent 7b9e7d0a99
commit 5ac9559b8f

View File

@@ -2,45 +2,44 @@ const axios = require('axios');
const makeLinks = require('../../shared/hateoas');
const { v4: uuidv4 } = require('uuid');
const qs = require('qs');
require('dotenv').config();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
// 获取access_token
async function fetchAccessToken(apiKey) {
// 获取GigaChat access_token,严格按官方文档
async function getGigaChatToken() {
const apiKey = process.env.GIGACHAT_API_KEY;
const scope = process.env.GIGACHAT_SCOPE || 'GIGACHAT_API_PERS';
if (!apiKey) throw new Error('GIGACHAT_API_KEY 未配置');
const rqUID = uuidv4();
const auth = Buffer.from(apiKey.trim()).toString('base64');
try {
console.log('请求token参数:', {
url: 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
data: qs.stringify({ scope: 'GIGACHAT_API_PERS' }),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'Authorization': `Basic ${apiKey}`,
'RqUID': uuidv4()
}
});
const tokenResp = await axios.post(
const resp = await axios.post(
'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
qs.stringify({ scope: 'GIGACHAT_API_PERS' }),
new URLSearchParams({ scope }),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'Authorization': `Basic ${apiKey}`,
'RqUID': uuidv4()
'RqUID': rqUID,
'Authorization': `Basic ${auth}`,
},
timeout: 10000,
}
);
return tokenResp.data.access_token;
} catch (err) {
console.error('AI生成图片出错: 获取access_token失败');
if (err.response) {
console.error('status:', err.response.status);
console.error('headers:', err.response.headers);
console.error('data:', err.response.data);
console.error('config:', err.config);
} else {
console.error('AI生成图片出错:', err.message);
if (!resp.data.access_token) {
console.error('GigaChat token响应异常:', resp.data);
throw new Error('GigaChat token响应异常');
}
throw new Error('获取access_token失败: ' + err.message);
return resp.data.access_token;
} catch (err) {
if (err.response) {
console.error('获取access_token失败:', err.response.status, err.response.data);
} else {
console.error('获取access_token异常:', err.message);
}
throw new Error('获取access_token失败');
}
}
@@ -116,9 +115,13 @@ exports.generate = async (req, res) => {
if (!prompt) {
return res.status(400).json({ error: 'Prompt parameter is required' });
}
let accessToken;
try {
accessToken = await getGigaChatToken();
} catch (e) {
return res.status(500).json({ error: e.message });
}
try {
const apiKey = process.env.GIGACHAT_API_KEY;
const accessToken = await fetchAccessToken(apiKey);
const content = await fetchChatContent(accessToken, prompt);
const match = content.match(/<img src=\"(.*?)\"/);
if (!match) {