require('dotenv').config(); const express = require('express'); const cors = require('cors'); const https = require('https'); const signer = require('./APIGW-javascript-sdk-2.0.6/signer'); const app = express(); const PORT = 3001; app.use(cors()); app.use(express.json()); const METASTUDIO_API_BASE = 'https://metastudio.cn-north-4.myhuaweicloud.com'; async function createOnceCodeWithAKSK() { const accessKey = process.env.HUAWEI_AK; const secretKey = process.env.HUAWEI_SK; const projectId = process.env.HUAWEI_PROJECT_ID; if (!accessKey || !secretKey) { throw new Error('请配置环境变量: HUAWEI_AK 和 HUAWEI_SK'); } if (!projectId) { throw new Error('请配置环境变量: HUAWEI_PROJECT_ID'); } const uri = `/v1/${projectId}/digital-human-chat/once-code`; const sig = new signer.Signer(); sig.Key = accessKey; sig.Secret = secretKey; const req = new signer.HttpRequest( 'POST', `${METASTUDIO_API_BASE}${uri}`, { 'content-type': 'application/json', 'x-project-id': projectId }, '{}' ); const options = sig.Sign(req); return new Promise((resolve, reject) => { const request = https.request(options, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { if (res.statusCode !== 200) { reject(new Error(`API调用失败: ${res.statusCode} - ${data}`)); return; } const response = JSON.parse(data); resolve(response.once_code); }); }); request.on('error', (e) => { reject(e); }); request.write('{}'); request.end(); }); } app.post('/api/once-code', async (req, res) => { try { console.log('使用 AK/SK 认证获取授权码...'); const onceCode = await createOnceCodeWithAKSK(); res.json({ once_code: onceCode }); } catch (error) { console.error('获取授权码失败:', error); res.status(500).json({ error_code: 'INTERNAL_ERROR', error_msg: error.message }); } }); app.get('/health', (req, res) => { res.json({ status: 'ok' }); }); app.listen(PORT, () => { console.log(`后端服务已启动: http://localhost:${PORT}`); console.log('使用 AK/SK 认证方式'); });