package controllers import ( "encoding/json" "fmt" "hongze/hongze_cygxzs/models" "hongze/hongze_cygxzs/services" "hongze/hongze_cygxzs/utils" "strconv" "time" ) type WechatController struct { BaseAuthController } type WechatCommonController struct { BaseCommonController } // @Title 微信登录小助手接口 // @Description 微信登录小助手接口 // @Param Code query string true "微信唯一编码code" // @Success 200 {object} models.UserDetailByUserLogin // @router /loginByxzs [get] func (this *WechatCommonController) WechatLoginByxzs() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() code := this.GetString("Code") if code == "" { br.Msg = "参数错误" br.ErrMsg = "Code 为空" return } item, err := services.WxGetUserOpenIdByCodeXzs(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 if openId == "" { br.Msg = "获取用户信息失败" br.ErrMsg = "获取openid失败,openid:" + item.Openid return } resp := new(models.UserDetailByUserLogin) wxUserInfo, err := services.WxGetUserInfo(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 } unionId := wxUserInfo.Unionid if unionId == "" { br.Msg = "获取用户信息失败" br.ErrMsg = "获取unionid失败,unionid:" + item.Openid return } total, err := models.GetCygxUserRecordCount(openId) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "查询数量失败,Err:" + err.Error() return } if total == 0 { items := new(models.CygxUserRecord) items.OpenId = openId items.UnionId = unionId items.CreateTime = time.Now() _, err = models.AddCygxUserRecord(items) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "添加openid失败,Err:" + err.Error() return } } user, err := models.GetWxUserItemByUserUnionId(unionId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取用户信息失败" br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error() return } if user == nil { resp.HasPermission = 3 } else { permissionStr, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if permissionStr != "" { resp.Permission = permissionStr resp.Mobile = user.Mobile resp.RealName = user.RealName resp.CompanyName = user.CompanyName resp.HasPermission = 1 } else { resp.Mobile = user.Mobile resp.RealName = user.RealName resp.HasPermission = 2 } } resp.Headimgurl = wxUserInfo.Headimgurl 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 *WechatCommonController) GetWxSign() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() getUrl := this.GetString("Url") accessToken, err := services.GetWxAccessTokenByXzs() fmt.Println("getUrl:", accessToken) fmt.Println("getUrl:", getUrl) if err != nil { br.Msg = "获取用户信息失败" br.ErrMsg = "获取access_token失败,err:" + err.Error() return } if accessToken=="" { br.Msg = "获取用户信息失败" br.ErrMsg = "access_token 为空," 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) fmt.Println(ticket) signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr) resp := new(models.WechatSign) resp.AppId = utils.WxPublicAppId resp.NonceStr = nonceString resp.Timestamp = timestamp resp.Url = getUrl resp.Signature = signature br.Ret = 200 br.Success = true br.Msg = "获取签名成功" br.Data = resp }