package controllers import ( "fmt" "github.com/silenceper/wechat" "github.com/silenceper/wechat/cache" "hongze/hongze_api/models" "hongze/hongze_api/services" "hongze/hongze_api/utils" "strconv" "time" offConfig "github.com/silenceper/wechat/v2/officialaccount/config" ) 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 { utils.FileLog.Info("%s", err.Error()) } 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 } wc := wechat.NewWechat() memory := cache.NewMemory() cfg := &offConfig.Config{ AppID: utils.WxAppId, AppSecret: utils.WxAppSecret, Token: accessToken, Cache: memory, } oa := wc.GetOfficialAccount(cfg) j:=oa.GetJs() config,err:=j.GetConfig(getUrl) if err!=nil { fmt.Println("获取失败:Err:"+err.Error()) return } fmt.Println(config) resp := new(models.WechatSign) resp.AppId=config.AppID resp.NonceStr=config.NonceStr resp.Timestamp=config.Timestamp resp.Url=getUrl resp.Signature=config.Signature br.Ret = 200 br.Success = true br.Msg = "获取签名成功" br.Data = resp } /* $app->bag('api/wechat/getWxSign',"WechatController@getWxSign"); $app->bag('api/wechat/check', "WechatController@check"); */