package controllers import ( "encoding/json" "eta/eta_mini_api/models" "eta/eta_mini_api/models/request" "eta/eta_mini_api/models/response" "eta/eta_mini_api/services/wx_app" "eta/eta_mini_api/utils" "fmt" "strconv" "time" ) type WechatController struct { BaseCommonController } // Login // @Title 微信登录 // @Description 微信登录 // @Param request body models.LoginReq true "type json string" // @Success 200 {object} models.LoginResp // @router /login [post] func (this *WechatController) Login() { br := new(models.BaseResponse).Init() defer func() { if err := recover(); err != nil { fmt.Println(err) } this.Data["json"] = br this.ServeJSON() }() var req request.WeChatLoginReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析失败" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Code == "" { br.Msg = "授权码不存在" return } userInfo, err := wx_app.GetSession(req.Code) if err != nil { br.Msg = "登录失败,请重新尝试" br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error() return } session, err := models.GetWxSessionByOpenId(userInfo.OpenID) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "登录失败,请重新尝试" br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error() return } if session == nil { session = &models.WxSession{ OpenId: userInfo.OpenID, UnionId: userInfo.UnionID, CreateTime: time.Now(), } insertId, er := session.Insert() session.WxSessionId = int(insertId) if er != nil { br.Msg = "用户登录失败" br.ErrMsg = "用户登录获取失败,系统错误,Err:" + er.Error() return } } var token string timeUnix := time.Now().Unix() timeUnixStr := strconv.FormatInt(timeUnix, 10) token = utils.MD5(session.OpenId) + utils.MD5(timeUnixStr) session.AccessToken = token session.LastUpdateTime = time.Now() err = session.Update([]string{"access_token", "last_update_time"}) if err != nil { br.Msg = "微信登录失败" br.ErrMsg = "微信登录失败,更新用户信息失败:" + err.Error() return } token = session.AccessToken resp := new(response.WeChatLoginResp) resp.Authorization = token br.Data = resp br.Msg = "登录成功" br.Success = true br.Ret = 200 }