package controller import ( "fmt" "github.com/gin-gonic/gin" "hepa-calc-api/api/dao" "hepa-calc-api/api/model" "hepa-calc-api/api/requests" "hepa-calc-api/api/responses" "hepa-calc-api/api/service" "hepa-calc-api/extend/weChat" "hepa-calc-api/global" "hepa-calc-api/utils" "strconv" "time" ) type Login struct{} // LoginPhone 手机号登录 func (r *Login) LoginPhone(c *gin.Context) { token := &utils.Token{ UserId: strconv.FormatInt(1, 10), } // 生成jwt jwt, err := token.NewJWT() if err != nil { responses.FailWithMessage("登陆失败", c) return } responses.OkWithData(jwt, c) } // LoginWx 微信授权登录 func (r *Login) LoginWx(c *gin.Context) { userService := service.UserService{} // 处理用户头像 avatar, err := userService.HandleUserAvatar("https://thirdwx.qlogo.cn/mmopen/vi_32/dzhWq43iaB5GyJJUbajibSQtIt6d4Y9QPk5ImB1C14fPk6AOtcgaPztUzjKwb9kmPtqNpyCal5cEyw0YyTr1QEbdtHiaOViay4RgSpdm2XaduXA/132") if err != nil { responses.FailWithMessage(err.Error(), c) return } fmt.Println(avatar) responses.Ok(c) return loginRequest := requests.LoginRequest{} req := loginRequest.LoginWx if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 获取微信网页授权access_token webAccessToken, err := weChat.GetWebAccessToken(req.Code) if err != nil { responses.FailWithMessage(err.Error(), c) return } fmt.Println(webAccessToken) // 网页授权拉取用户信息 userInfo, err := weChat.GetUserInfo(webAccessToken.AccessToken, webAccessToken.OpenId) if err != nil { responses.FailWithMessage(err.Error(), c) return } fmt.Println(userInfo) // 检测用户信息 userDao := dao.UserDao{} maps := make(map[string]interface{}) maps["open_id"] = webAccessToken.OpenId user, _ := userDao.GetUser(maps) // 新用户处理方式 if user == nil { // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() userService := service.UserService{} // 处理用户头像 avatar, err := userService.HandleUserAvatar(userInfo.HeadImgUrl) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 新增用户 user := &model.User{ UserName: userInfo.Nickname, Mobile: "", RegisterSource: req.Source, OpenId: userInfo.OpenId, UnionId: userInfo.UnionId, Age: nil, Sex: userInfo.Sex, Avatar: avatar, IsMember: 0, MemberExpireDate: nil, LoginAt: model.LocalTime(time.Now()), LoginIp: req.LoginIp, } user, err = userDao.AddUser(tx, user) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 获取app用户信息 var result *string if result == nil { // 新增app用户信息 } tx.Commit() } // 下发token token := &utils.Token{ UserId: fmt.Sprintf("%d", user.UserId), } // 生成jwt jwt, err := token.NewJWT() if err != nil { responses.FailWithMessage("登陆失败", c) return } responses.OkWithData(jwt, c) }