92 lines
1.9 KiB
TypeScript
92 lines
1.9 KiB
TypeScript
import { WxServices } from "./modules/wx-services.ts";
|
|
import { app, redis } from "@/app.ts";
|
|
app
|
|
.route({
|
|
path: 'wx',
|
|
key: 'checkLogin',
|
|
})
|
|
.define(async (ctx) => {
|
|
const state = ctx.query.state;
|
|
if (!state) {
|
|
ctx.throw(400, 'state is required');
|
|
return;
|
|
}
|
|
const token = await redis.get(`wx:mp:login:${state}`);
|
|
if (!token) {
|
|
ctx.throw(400, 'Invalid state');
|
|
return;
|
|
}
|
|
try {
|
|
ctx.body = JSON.parse(token);
|
|
} catch (error) {
|
|
ctx.throw(500, 'Invalid token get');
|
|
}
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'wx',
|
|
key: 'mplogin',
|
|
})
|
|
.define(async (ctx) => {
|
|
const state = ctx.query.state;
|
|
const code = ctx.query.code;
|
|
try {
|
|
const wx = new WxServices();
|
|
const token = await wx.login(code, 'mp');
|
|
await redis.set(`wx:mp:login:${state}`, JSON.stringify(token), 'EX', 10000); // 30秒过期
|
|
ctx.body = {
|
|
token,
|
|
};
|
|
} catch (error) {
|
|
console.error(error);
|
|
ctx.throw(500, 'Invalid code');
|
|
}
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'wx',
|
|
key: 'mp-get-openid',
|
|
isDebug: true,
|
|
})
|
|
.define(async (ctx) => {
|
|
const code = ctx.query.code;
|
|
if (!code) {
|
|
ctx.throw(400, 'code is required');
|
|
return;
|
|
}
|
|
const wx = new WxServices();
|
|
const mpInfo = await wx.getOpenid(code, 'mp');
|
|
ctx.body = mpInfo;
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'wx',
|
|
key: 'open-login',
|
|
isDebug: true,
|
|
})
|
|
.define(async (ctx) => {
|
|
const code = ctx.query.code;
|
|
const wx = new WxServices();
|
|
if (!code) {
|
|
ctx.throw(400, 'code is required');
|
|
return;
|
|
}
|
|
try {
|
|
const token = await wx.login(code);
|
|
ctx.body = token;
|
|
if (!token.accessToken) {
|
|
ctx.throw(500, 'Invalid code');
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
ctx.throw(500, 'Invalid code');
|
|
}
|
|
})
|
|
.addTo(app);
|