package services import ( "errors" "eta/eta_mini_api/models" "eta/eta_mini_api/services/go_redis" "eta/eta_mini_api/utils" "time" "github.com/silenceper/wechat/v2/miniprogram/auth" ) type UserInfo struct { } func WxLogin(wxSession auth.ResCode2Session) (token string, userId int, isBind bool, err error) { // openId := wxSession.OpenID // unionId := wxSession.UnionID // sessionKey := wxSession.SessionKey return } // GetWxUserItemByOpenId 通过openid获取用户信息 func GetWxUserItemByOpenId(openid string) (userInfo UserInfo, err error) { return } // BindWxUser 用户绑定 func BindWxUser(unionId, openId, phone, email, areaCode string) (userItem *models.UserItem, errMsg string, err error) { if phone == "" && email == "" { err = errors.New("手机号或邮箱必填一个") return } // 根据openid获取用户信息 if openId == "" { err = errors.New("openid不能为空") return } userItem, err = models.GetUserItemByOpenId(openId) if err != nil && err.Error() != utils.ErrNoRow() { return } var userId int64 curTime := time.Now() if userItem != nil { if userItem.Phone != "" && userItem.Phone != phone { errMsg = "该手机号已绑定其他微信号" return } if userItem.Email != "" && userItem.Email != email { errMsg = "该邮箱已绑定其他微信号" return } if userItem.Phone == "" && phone != "" { user := &models.User{ UserId: userItem.UserId, Phone: phone, AreaCode: areaCode, RegisterTime: curTime, ModifyTime: curTime, } tmpUserId, updateUserErr := user.Update([]string{"phone", "area_code", "register_time", "modify_time"}) userId = tmpUserId err = updateUserErr } if userItem.Email == "" && email != "" { user := &models.User{ UserId: userItem.UserId, Email: email, RegisterTime: curTime, ModifyTime: curTime, } tmpUserId, updateUserErr := user.Update([]string{"email", "modify_time", "register_time"}) userId = tmpUserId err = updateUserErr } } else { //根据手机号获取用户信息 if phone != "" { tmpWxUser, wxUserErr := models.GetUserItemByPhone(phone) if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() { err = wxUserErr return } userItem = tmpWxUser } //根据邮箱获取用户信息 if userItem == nil && email != "" { tmpWxUser, wxUserErr := models.GetUserItemByEmail(email) if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() { err = wxUserErr return } userItem = tmpWxUser } var userId int //如果查询出来的用户是nil,那么需要新增用户 if userItem == nil { key := utils.CACHE_ACCESS_WX_BIND + phone + ":" + email isHas := go_redis.IsExist(key) if isHas { err = errors.New("多次提交,请关闭页面重新进入") return } go_redis.SetNX(key, "ok", time.Second*300) user := &models.User{ Phone: phone, AreaCode: areaCode, Email: email, OpenId: openId, UnionId: unionId, } tmpUserId, addUserErr := user.Insert() //添加完成,清除缓存 _ = go_redis.Delete(key) if addUserErr != nil { err = addUserErr return } user.UserId = int(tmpUserId) userId = int(tmpUserId) userItem, err = models.GetUserItemByUserId(userId) } else { userId = userItem.UserId } } //如果该用户 绑定注册状态 字段处于 未注册 的情况下,那么去修改该数据 if !userItem.IsRegistered { err = models.ModifyUserRegisterStatus(int(userId), true, curTime, curTime) if err != nil { return } } return }