Files

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