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 BindWXWork extends API { constructor() { super(); this.setMethod("POST"); this.setPath("/User/BindWXWork"); } createSession(uuid, salt) { return md5(`${uuid}${salt}${new Date().getTime()}`); } async onRequest(req, 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 id, uuid, username, avatar, email FROM users WHERE wxid = ?'; let rows = await db.query(sql, [wxid]); let id, result, uuid, username, avatar, email; if (rows.length > 0) { ({ id, uuid, username, avatar, email } = rows[0]); avatar = avatar && avatar != '' ? avatar : 'https://vthc.cn/img/avatar.png'; const updateQuery = 'UPDATE users SET session = ? WHERE wxid = ?'; result = await db.query(updateQuery, [session, id]); } else { return res.json({ ...BaseStdResponse.USER_NOT_EXISTS }) } if (result && result.affectedRows > 0) { return res.json({ ...BaseStdResponse.OK, data: { uuid, username, wxid, email, avatar, session } }); } else { return res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '登录失败!' }); } } catch (error) { this.logger.error(`企业微信登录失败!${error.stack}`) return res.json({ ...BaseStdResponse.ERR, endpoint: 7894379, msg: '登录失败!' }); } } } module.exports.BindWXWork = BindWXWork;