const md5 = require("md5"); const API = require("../../lib/API"); const { BaseStdResponse } = require("../../BaseStdResponse"); const db = require("../../plugin/DataBase/db"); const { getUserInfo, getUserID } = require("../../plugin/WXWork/GetInfo"); class WXWorkLogin extends API { constructor() { super(); this.setMethod("POST"); this.setPath("/User/WXWorkLogin"); } createSession(uuid, salt) { return md5(`${uuid}${salt}${new Date().getTime()}`); } async onRequest(req, res) { this.setAllowCORS(res); const { code } = req.body; if (!code) { res.json({ ...BaseStdResponse.MISSING_PARAMETER, endpoint: 7841686 }); return; } try { const idRes = await getUserID(code); if (!idRes || !idRes.success) { return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: `登录失败!${idRes.msg}` }); } const wxid = idRes.userid; const session = this.createSession(wxid, Math.random().toFixed(6).slice(-6)); let sql = 'SELECT uuid, username, avatar FROM users WHERE wxid = ?'; let [rows] = await db.query(sql, [wxid]); let result, uuid, username, avatar; if (rows.length > 0) { // 用户存在,更新 session ({ uuid, username, avatar } = rows[0]); const updateQuery = 'UPDATE users SET session = ? WHERE wxid = ?'; result = await db.query(updateQuery, [session, wxid]); } else { // 用户不存在,注册用户 const infoRes = await getUserInfo(wxid); if (!infoRes || !infoRes.success) { return res.json({ ...BaseStdResponse.ERR, endpoint: 7894198, msg: `登录失败!${infoRes.msg}` }); } ({ name: username, avatar } = infoRes); uuid = md5(Date.now() + wxid + code); const insertQuery = 'INSERT INTO users (uuid, username, wxid, avatar, session) VALUES (?, ?, ?, ?, ?)'; result = await db.query(insertQuery, [uuid, username, wxid, avatar, session]); } if (result && result.affectedRows > 0) { return res.json({ ...BaseStdResponse.OK, data: { uuid, username, wxid, avatar, session } }); } else { return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' }); } } catch (error) { return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' }); } } } module.exports.WXWorkLogin = WXWorkLogin;