package wechat import ( "github.com/gin-gonic/gin" "hongze/hongze_yb/controller/response" response2 "hongze/hongze_yb/models/response" userResp "hongze/hongze_yb/models/response/user" "hongze/hongze_yb/services/user" userService "hongze/hongze_yb/services/user" "hongze/hongze_yb/services/wechat" "hongze/hongze_yb/services/wx_app" "strconv" ) func GetQrCode(c *gin.Context) { //wxApp := wx_app.GetWxApp() //response.OkData("获取成功", qrCode, c) } func GetUserInfo(c *gin.Context) { openid := `oN0jD1S3P-FVosLhq-YiVOXldtRo` userInfo, err := wechat.GetUserInfo(openid) if err != nil { response.Fail("获取失败,Err:"+err.Error(), c) return } response.OkData("获取成功", userInfo, c) } func GetUserSession(c *gin.Context) { code, _ := c.GetQuery("code") //c.Sho //fmt.Println(c.Request.) userInfo, err := wx_app.GetSession(code) if err != nil { response.Fail("获取失败,Err:"+err.Error(), c) return } response.OkData("获取成功", userInfo, c) } // Login 微信登录 // @Tags 微信相关接口 // @Summary 微信登录 // @Description 微信登录 // @Accept json // @Product json // @Param code query string true "微信code" // @Success 200 {object} response.LoginResp // @Router /wechat/login [get] func Login(c *gin.Context) { //code, _ := c.GetQuery("code") code := c.DefaultQuery("code", "") wxUserInfo, err := wx_app.GetSession(code) if err != nil { response.Fail("获取失败,Err:"+err.Error(), c) return } token, userId, isBind, err := user.WxLogin(wx_app.WxPlatform, wxUserInfo) if err != nil { response.Fail("登录失败,Err:"+err.Error(), c) return } response.OkData("获取成功", response2.LoginResp{ UserId: userId, IsBind: isBind, Authorization: token, }, c) } // 消息解密请求参数 type EncryptReq struct { EncryptedData string Iv string IsBind bool `json:"isBind" description:"是否需要去授权绑定"` } // GetEncryptInfo 消息解密 // @Tags 微信相关接口 // @Summary 消息解密 // @Description 消息解密 // @Accept json // @Product json // @Param encryptedData query string true "加密数据" // @Param iv query string true "加密算法初始向量" // @Success 200 {string} string "获取成功" // @Router /wechat/getEncryptInfo [post] func GetEncryptInfo(c *gin.Context) { var req EncryptReq err := c.ShouldBind(&req) if err != nil { response.Fail("参数异常", c) return } if req.EncryptedData == "" { response.Fail("参数异常:encryptedData", c) return } if req.Iv == "" { response.Fail("参数异常:iv", c) return } // 获取登录用户信息 userInfo := user.GetInfoByClaims(c) if userInfo.RecordInfo.SessionKey == "" { response.Fail("请重新登录", c) return } decryptData, err := wx_app.GetDecryptInfo(userInfo.RecordInfo.SessionKey, req.EncryptedData, req.Iv) if err != nil { response.Fail("获取失败,Err:"+err.Error(), c) return } if !req.IsBind { response.OkData("获取成功", decryptData, c) return } //如果需要静默授权绑定,那么就去走静默绑定手机号流程 openId := userInfo.OpenID //国际区号 countryCode, _ := strconv.Atoi(decryptData.CountryCode) token, newUserInfo, err, errMsg := userService.BindWxUser(openId, decryptData.PurePhoneNumber, "", "", 3, countryCode, 1) if err != nil { if errMsg == "" { errMsg = "登录失败" } response.Fail(errMsg, c) return } response.OkData("登录成功", userResp.LoginResp{ UserID: int(newUserInfo.UserID), Token: token, Email: newUserInfo.Email, Mobile: newUserInfo.Mobile, }, c) } // GetWxJsConf // @Title 微信获取签名接口 // @Description 微信获取签名接口 // @Param Url query string true "url地址" // @Success 200 {string} string "获取成功" // @router /getWxJsConf [get] func GetWxJsConf(c *gin.Context) { getUrl := c.DefaultQuery("Url", "") jsConf, err := wechat.GetJsConfig(getUrl) if err != nil { response.Fail("获取失败,Err:"+err.Error(), c) return } //resp := new(models.WechatSign) //resp.AppId = utils.WxAppId //resp.NonceStr = nonceString //resp.Timestamp = timestamp //resp.Url = getUrl //resp.Signature = signature //jsConf.AppID response.OkData("获取成功", jsConf, c) }