update server/routers/back-new/features/image/image.controller.js
This commit is contained in:
@@ -2,45 +2,44 @@ const axios = require('axios');
|
|||||||
const makeLinks = require('../../shared/hateoas');
|
const makeLinks = require('../../shared/hateoas');
|
||||||
const { v4: uuidv4 } = require('uuid');
|
const { v4: uuidv4 } = require('uuid');
|
||||||
const qs = require('qs');
|
const qs = require('qs');
|
||||||
|
require('dotenv').config();
|
||||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
||||||
|
|
||||||
// 获取access_token
|
// 获取GigaChat access_token,严格按官方文档
|
||||||
async function fetchAccessToken(apiKey) {
|
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 {
|
try {
|
||||||
console.log('请求token参数:', {
|
const resp = await axios.post(
|
||||||
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(
|
|
||||||
'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
|
'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
|
||||||
qs.stringify({ scope: 'GIGACHAT_API_PERS' }),
|
new URLSearchParams({ scope }),
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
'Accept': 'application/json',
|
'Accept': 'application/json',
|
||||||
'Authorization': `Basic ${apiKey}`,
|
'RqUID': rqUID,
|
||||||
'RqUID': uuidv4()
|
'Authorization': `Basic ${auth}`,
|
||||||
},
|
},
|
||||||
|
timeout: 10000,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return tokenResp.data.access_token;
|
if (!resp.data.access_token) {
|
||||||
} catch (err) {
|
console.error('GigaChat token响应异常:', resp.data);
|
||||||
console.error('AI生成图片出错: 获取access_token失败');
|
throw new Error('GigaChat 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);
|
|
||||||
}
|
}
|
||||||
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) {
|
if (!prompt) {
|
||||||
return res.status(400).json({ error: 'Prompt parameter is required' });
|
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 {
|
try {
|
||||||
const apiKey = process.env.GIGACHAT_API_KEY;
|
|
||||||
const accessToken = await fetchAccessToken(apiKey);
|
|
||||||
const content = await fetchChatContent(accessToken, prompt);
|
const content = await fetchChatContent(accessToken, prompt);
|
||||||
const match = content.match(/<img src=\"(.*?)\"/);
|
const match = content.match(/<img src=\"(.*?)\"/);
|
||||||
if (!match) {
|
if (!match) {
|
||||||
|
|||||||
Reference in New Issue
Block a user