package controllers import ( "encoding/json" "fmt" "hongze/hongze_api/models" "hongze/hongze_api/services" "hongze/hongze_api/utils" "strconv" "time" ) // @Title pc端微信登录接口 // @Description pc端微信登录接口 // @Param Code query string true "微信唯一编码code" // @Success 200 {object} models.WxLoginResp // @router /pc/login [get] func (this *WechatCommonController) PcWechatLogin() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() code := this.GetString("Code") fmt.Println("code:", code) item, err := services.PcWxGetUserOpenIdByCode(code) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取用户信息失败,Err:" + err.Error() return } if item.Errcode != 0 { br.Msg = "获取用户信息失败" br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg return } openId := item.Openid //accessToken, err := services.PcWxGetAccessToken() //utils.FileLog.Info("accessToken:%s", accessToken) //if err != nil { // br.Msg = "获取用户信息失败" // br.ErrMsg = "获取access_token失败,err:" + err.Error() // return //} utils.FileLog.Info("item.AccessToken):%s", item.AccessToken) //获取用户信息 wxUserInfo, err := services.PcWxGetUserInfo(openId, item.AccessToken) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } if wxUserInfo.Errcode != 0 { userInfoJson, _ := json.Marshal(wxUserInfo) br.Msg = "登录失败" br.ErrMsg = "获取用户信息失败,err:" + string(userInfoJson) return } var unionid string unionid = item.Unionid utils.FileLog.Info("item unionid:%s", unionid) if unionid == "" { unionid = wxUserInfo.Unionid } utils.FileLog.Info("openId:%s", openId) utils.FileLog.Info("unionid:%s", unionid) firstLogin := 1 userId := 0 //获取成功 if unionid != "" { wxUser, err := models.GetWxUserItemByUnionid(unionid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取用户信息失败" br.ErrMsg = "根据openid获取用户信息失败,Eerr:" + err.Error() return } if wxUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) { utils.FileLog.Info("用户不存在,注册") user := new(models.WxUser) user.OpenId = openId user.CompanyId = 1 user.CreatedTime = time.Now() user.UnionId = unionid user.Unionid = unionid user.NickName = wxUserInfo.Nickname user.Sex = wxUserInfo.Sex user.City = wxUserInfo.City user.Province = wxUserInfo.Province user.Country = wxUserInfo.Country user.Headimgurl = wxUserInfo.Headimgurl user.FirstLogin = 1 user.Enabled = 1 user.RegisterTime = time.Now() user.RegisterPlatform = 2 _, err = models.AddWxUser(user) wxUser, err = models.GetWxUserItemByUnionid(wxUserInfo.Unionid) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } userId = wxUser.UserId } else { utils.FileLog.Info("用户已经存在") firstLogin = wxUser.FirstLogin userId = wxUser.UserId utils.FileLog.Info("用户已经存在,用户id:%d", userId) } } else { if openId != "" { wxUser, err := models.GetWxUserItemByOpenId(openId) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } if wxUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) { user := new(models.WxUser) user.OpenId = openId user.CompanyId = 1 user.CreatedTime = time.Now() user.UnionId = unionid user.Unionid = unionid user.NickName = wxUserInfo.Nickname user.Sex = wxUserInfo.Sex user.City = wxUserInfo.City user.Province = wxUserInfo.Province user.Country = wxUserInfo.Country user.Headimgurl = wxUserInfo.Headimgurl user.FirstLogin = 1 user.Enabled = 1 user.RegisterPlatform = 1 user.RegisterTime = time.Now() _, err = models.AddWxUser(user) wxUser, err = models.GetWxUserItemByOpenId(openId) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "unionid登录,获取微信用户信息失败,Err:" + err.Error() return } userId = wxUser.UserId } else { userId = wxUser.UserId } } } permission, err := services.CheckUserPermission(userId) if err != nil { br.Msg = "登录失败" br.ErrMsg = "登录失败,判断权限失败:" + err.Error() return } //更新用户微信信息 if wxUserInfo != nil { models.ModifyWxUserInfo(wxUserInfo.Nickname, wxUserInfo.Headimgurl, wxUserInfo.City, wxUserInfo.Province, wxUserInfo.Country, wxUserInfo.Sex, userId) } newUser, _ := models.GetWxUserItemByUserId(userId) utils.FileLog.Info("获取用户信息:%d", userId) var token string tokenItem, err := models.GetTokenByUid(userId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "登录失败" br.ErrMsg = "登录失败,获取token失败:" + err.Error() return } if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) { timeUnix := time.Now().Unix() timeUnixStr := strconv.FormatInt(timeUnix, 10) token = utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr) //新增session { session := new(models.Session) session.UserId = userId session.CreatedTime = time.Now() session.LastUpdatedTime = time.Now() session.ExpireTime = time.Now().AddDate(0, 1, 0) session.AccessToken = token err = models.AddSession(session) if err != nil { br.Msg = "登录失败" br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error() return } } } else { token = tokenItem.AccessToken } cp, err := models.GetCompanyProductsByUserId(userId) if err != nil { br.Msg = "登录失败" br.ErrMsg = "登录失败,获取客户信息失败:" + err.Error() return } var companyName, status, endDate, productName string for _, v := range cp { companyName = v.CompanyName if v.EndDate == "0000-00-00" { v.EndDate = "" } if status != "" { status = status + "/" + v.Status if v.EndDate != "" { endDate = endDate + "/" + v.Status + ":" + v.EndDate } productName = productName + "/" + v.ProductName } else { status = v.Status if v.EndDate != "" { endDate = v.Status + ":" + v.EndDate } productName = v.ProductName } } //新增登录日志 { loginLog := new(models.WxUserLog) loginLog.UserId = userId loginLog.OpenId = openId loginLog.CreateTime = time.Now() loginLog.Handle="wechat_pc_login" loginLog.Remark=token go models.AddWxUserLog(loginLog) } resp := new(models.WxLoginResp) resp.UserId = userId resp.Code = 0 resp.FirstLogin = firstLogin resp.Authorization = token resp.UserPermission = permission resp.Email = newUser.Email resp.Headimgurl = newUser.Headimgurl resp.Mobile = newUser.Mobile resp.CompanyName = companyName resp.EndDate = endDate resp.Status = status resp.ProductName = productName br.Ret = 200 br.Success = true br.Msg = "登录成功" br.Data = resp } //func init() { // accessToken:=`40_6_YtSyR4Kg9MYbODrNVc1mpztpbZDPWb8aiNzgq96vfvSLGb59dTZk6dprQuhCdsPrqYRKFvaAAij0_NzR-rnMCb0Bxsngov9eLBuk4WQoI` // openId:=`oNUl652NjgjPz_C4M1ezCIro_s98` // item,err:=services.WxGetUserInfo(openId, accessToken) // fmt.Println(err) // fmt.Println(item) //} //func init() { // fmt.Println("start accessToken") // accessToken, err := services.PcWxGetAccessToken() // fmt.Println(err) // utils.FileLog.Info("accessToken:%s",accessToken) // fmt.Println("end accessToken") //}