package controllers import ( "fmt" "hongze/hongze_api/models" "hongze/hongze_api/services" "hongze/hongze_api/utils" "strconv" "time" ) type WechatController struct { BaseAuthController } type WechatCommonController struct { BaseCommonController } // @Title 微信登录接口 // @Description 微信登录接口 // @Param Code query string true "微信唯一编码code" // @Success 200 {object} models.WxLoginResp // @router /login [get] func (this *WechatCommonController) WechatLogin() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() code := this.GetString("Code") fmt.Println("code:", code) item, err := services.WxGetUserOpenIdByCode(code) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取用户信息失败,Err:" + err.Error() return } if item.Errcode != "" { br.Msg = "获取用户信息失败" br.ErrMsg = "获取access_token 失败 errcode:" + item.Errcode + " ;errmsg:" + item.Errmsg return } openId := item.Openid firstLogin := 1 userId := 0 //获取成功 if openId != "" { wxUser, err := models.GetWxUserItemByOpenId(openId) 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()) { accessToken, err := services.WxGetAccessToken() if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取access_token失败,err:" + err.Error() return } //获取用户信息 wxUserInfo, err := services.WxGetUserInfo(openId, accessToken) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } if wxUserInfo.Errcode != "" { br.Msg = "获取用户信息失败" br.ErrMsg = "获取用户信息失败 errcode:" + item.Errcode + " ;errmsg:" + item.Errmsg return } user := new(models.WxUser) user.OpenId = openId user.CompanyId = 1 user.CreatedTime = time.Now() user.UnionId = wxUserInfo.Unionid user.Subscribe = wxUserInfo.SubscribeScene user.SubscribeTime = wxUserInfo.SubscribeTime 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.Remark = wxUserInfo.Remark user.FirstLogin = 1 err = models.AddWxUser(user) if wxUserInfo.Unionid != "" { wxUser, err = models.GetWxUserItemByUnionid(wxUserInfo.Unionid) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } } else { wxUser, err = models.GetWxUserItemByOpenId(openId) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error() return } } userId = wxUser.UserId } else { firstLogin = wxUser.FirstLogin userId = wxUser.UserId } } else { br.Msg = "获取用户信息失败" br.ErrMsg = "获取openid失败,openid:" + item.Openid return } timeUnix := time.Now().Unix() timeUnixStr := strconv.FormatInt(timeUnix, 10) token := utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr) //新增session { session := new(models.Session) session.OpenId = openId session.UserId = userId session.CreatedTime = time.Now() session.LastUpdatedTime = time.Now() session.ExpireTime = time.Now().AddDate(1, 0, 0) session.AccessToken = token err = models.AddSession(session) if err != nil { br.Msg = "登录失败" br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error() return } } permission, err := services.CheckUserPermission(userId) if err != nil { br.Msg = "登录失败" br.ErrMsg = "登录失败,判断权限失败:" + err.Error() return } resp := new(models.WxLoginResp) resp.UserId = userId resp.OpenId = openId resp.Code = 0 resp.FirstLogin = firstLogin resp.Authorization = token resp.UserPermission = permission br.Ret = 200 br.Success = true br.Msg = "登录成功" br.Data = resp } // @Title 微信登录接口 // @Description 微信登录接口 // @Param Url query string true "url地址" // @Success 200 {object} models.WechatSign // @router /getWxSign [get] func (this *WechatController) GetWxSign() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() getUrl := this.GetString("Url") accessToken, err := services.WxGetAccessToken() if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取access_token失败,err:" + err.Error() return } ticket, err := services.GetWxTicket(accessToken) if err != nil { br.Msg = "获取Ticket失败,请联系客服" br.ErrMsg = "获取Ticket失败,Err" + err.Error() return } if ticket == "" { br.Msg = "获取Ticket失败,请联系客服" br.ErrMsg = "ticket为空" + ticket return } nonceStr := utils.GetRandStringNoSpecialChar(16) signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr) resp := new(models.WechatSign) resp.AppId = utils.WxAppId resp.NonceStr = nonceString resp.Timestamp = timestamp resp.Url = getUrl resp.Signature = signature br.Ret = 200 br.Success = true br.Msg = "获取签名成功" br.Data = resp } /* $app->bag('api/wechat/check', "WechatController@check"); */ //func init() { // fmt.Println("start") // accessToken, err := services.WxGetAccessToken() // fmt.Println(accessToken,err) // ticket, err := services.GetWxTicket(accessToken) // fmt.Println(ticket,err) // fmt.Println("end") //}