42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
const Controller = require("egg").Controller
|
|
|
|
const wxmpConfig = {
|
|
appid: "wx68ef6cfaa104652a",
|
|
secret: "4dccf2429685eb8787b984d61ae69119"
|
|
}
|
|
const table = "sys_user"
|
|
/**
|
|
* 微信小程序code转unionid
|
|
* @param ctx
|
|
* @returns {Promise<*>}
|
|
*/
|
|
const code2Openid = async ctx => {
|
|
const result = await ctx.curl("https://api.weixin.qq.com/sns/jscode2session", {
|
|
data: {
|
|
...wxmpConfig,
|
|
js_code: ctx.query.code, // 登录时获取的 code
|
|
grant_type: 'authorization_code' // 授权类型,此处只需填写 authorization_code
|
|
},
|
|
dataType: "json"
|
|
})
|
|
return result.data?.openid
|
|
}
|
|
|
|
class WeixinMP extends Controller {
|
|
async token() {
|
|
const {ctx: {query}, app} = this
|
|
if (!!query.code) {
|
|
const wechatOpenId = await code2Openid(this.ctx)
|
|
if (!wechatOpenId) return this.ctx.body = {code: 1, msg: "鉴权失败,无法获取openid"}
|
|
const user = await app.mysql.get(table, {wechatOpenId})
|
|
const {name, avatar} = query
|
|
const result = await this.service.db.addOrUpdate(table, {name, avatar, wechatOpenId, id: user?.id})
|
|
const token = app.jwt.sign({id: result.data?.id}, app.config.jwt.secret)
|
|
this.ctx.body = {code: 0, data: "bearer " + token}
|
|
} else this.ctx.body = {code: 1, msg: "缺少必要参数(code)"}
|
|
this.ctx.status = 200
|
|
}
|
|
}
|
|
|
|
module.exports = WeixinMP
|