明树Git Lab

Commit 708d7635 authored by zfp1's avatar zfp1

update

parent f3821347
...@@ -2,82 +2,89 @@ const express = require('express'); ...@@ -2,82 +2,89 @@ const express = require('express');
const crypto = require('crypto'); const crypto = require('crypto');
const { OpenAI } = require('openai'); const { OpenAI } = require('openai');
const xml2js = require('xml2js'); const xml2js = require('xml2js');
const app = express(); const app = express();
app.use(express.text({ type: 'text/xml' })); app.use(express.text({ type: 'text/xml' }));
// 配置参数 [5]() // 配置参数 [5]()
const openai = new OpenAI({ const openai = new OpenAI({
baseURL: 'https://api.deepseek.com/v1', baseURL: 'https://api.deepseek.com/v1',
apiKey: 'sk-14f0cf16bad245169cd2563e0f9b678e' apiKey: 'sk-14f0cf16bad245169cd2563e0f9b678e'
}); });
// 微信服务号验证 // 微信服务号验证
app.get('/wechat', (req, res) => { app.get('/wechat', (req, res) => {
const { signature, timestamp, nonce, echostr } = req.query; const { signature, timestamp, nonce, echostr } = req.query;
const token = 'deepseektest'; const token = 'deepseektest';
const sorted = [token, timestamp, nonce].sort().join(''); const sorted = [token, timestamp, nonce].sort().join('');
const sha1 = crypto.createHash('sha1').update(sorted).digest('hex'); const sha1 = crypto.createHash('sha1').update(sorted).digest('hex');
sha1 === signature ? res.send(echostr) : res.status(403).send(' 验证失败'); sha1 === signature ? res.send(echostr) : res.status(403).send(' 验证失败');
}); });
const msgIdCache = new Set();
// 消息处理流程 // 消息处理流程
app.post('/wechat', async (req, res) => { app.post('/wechat', async (req, res) => {
// try { // try {
// XML解析 // XML解析
const result = await xml2js.parseStringPromise(req.body); const result = await xml2js.parseStringPromise(req.body);
const message = result.xml.Content[0]; const message = result.xml.Content[0];
const fromUser = result.xml.FromUserName[0]; const fromUser = result.xml.FromUserName[0];
console.log(message, "------------------") const MsgId = result.xml.MsgId[0];
// API调用 [5]()
const completion = await openai.chat.completions.create({
model: "deepseek-chat",
messages: [{
role: "user",
content: `${message} , 你是一个微信服务号智能助手,你输出的字符要低于2048个字节`
}],
stream: false
});
console.log("completion:::", completion); if (msgIdCache.has(MsgId)) {
const xmlEntities = { return res.send(''); // 拦截重复请求
'&': '&', }
'<': '&lt;', msgIdCache.add(MsgId);
'>': '&gt;', console.log(message, "------------------")
'"': '&quot;', // API调用 [5]()
"'": '&apos;' const completion = await openai.chat.completions.create({
}; model: "deepseek-chat",
messages: [{
function escapeWechatContent(text) { role: "user",
// 处理换行符[1]()[2]() content: `${message} , 你是一个微信服务号智能助手,你输出的字符要低于2048个字节`
// let escaped = text.replace(/\n/g, '&#10;'); }],
stream: false
// 转义XML特殊字符[3]()[5]() });
text = text.replace(/[&<>"']/g, (char) => xmlEntities[char]);
console.log("completion:::", completion);
return text; const xmlEntities = {
} '&': '&amp;',
let fullContent = escapeWechatContent(completion.choices[0].message.content); '<': '&lt;',
// 响应构造 '>': '&gt;',
const responseXML = ` '"': '&quot;',
"'": '&apos;'
};
function escapeWechatContent(text) {
// 处理换行符[1]()[2]()
// let escaped = text.replace(/\n/g, '&#10;');
// 转义XML特殊字符[3]()[5]()
text = text.replace(/[&<>"']/g, (char) => xmlEntities[char]);
return text;
}
let fullContent = escapeWechatContent(completion.choices[0].message.content);
// 响应构造
const responseXML = `
<xml> <xml>
<ToUserName><![CDATA[${fromUser}]]></ToUserName> <ToUserName><![CDATA[${fromUser}]]></ToUserName>
<FromUserName><![CDATA[${result.xml.ToUserName[0]}]]></FromUserName> <FromUserName><![CDATA[${result.xml.ToUserName[0]}]]></FromUserName>
<CreateTime>${Math.floor(Date.now()/1000)}</CreateTime> <CreateTime>${Math.floor(Date.now() / 1000)}</CreateTime>
<MsgType><![CDATA[text]]></MsgType> <MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${fullContent}]]></Content> <Content><![CDATA[${fullContent}]]></Content>
</xml> </xml>
`; `;
console.log(xml2js.parseString(responseXML)) console.log(xml2js.parseString(responseXML))
res.set('Content-Type', 'text/xml'); res.set('Content-Type', 'text/xml');
console.log(responseXML) console.log(responseXML)
return res.send(responseXML); return res.send(responseXML);
// } catch (error) { // } catch (error) {
// console.error(error); // console.error(error);
// res.status(500).send(' 服务异常'); // res.status(500).send(' 服务异常');
// } // }
}); });
app.listen(3001, () => console.log(' 服务运行在3001端口')); app.listen(3001, () => console.log(' 服务运行在3001端口'));
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment