feature/worker #111
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user