123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- package controllers
- import (
- "encoding/json"
- "eta/eta_mini_api/models"
- "eta/eta_mini_api/models/request"
- "eta/eta_mini_api/models/response"
- "eta/eta_mini_api/services"
- "eta/eta_mini_api/services/go_redis"
- "eta/eta_mini_api/utils"
- "fmt"
- "strconv"
- "time"
- )
- type UserController struct {
- BaseCommonController
- }
- type UserAuthController struct {
- BaseAuthController
- }
- // AreaCodeList
- // @Title 手机号区号列表
- // @Description 手机号区号列表
- // @Success 200 Ret=200 获取成功
- // @router /area_code/list [get]
- func (this *UserController) AreaCodeList() {
- br := new(models.BaseResponse).Init()
- defer func() {
- if br.ErrMsg == "" {
- br.IsSendEmail = false
- }
- this.Data["json"] = br
- this.ServeJSON()
- }()
- resp := make([]response.AreaCodeListResp, 0)
- confValue, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey)
- if e != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()
- return
- }
- if confValue == "" {
- br.Msg = "获取失败"
- br.ErrMsg = "手机号区号配置为空"
- return
- }
- if e := json.Unmarshal([]byte(confValue), &resp); e != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "手机号区号配置有误"
- return
- }
- br.Data = resp
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- }
- // GetVerifyCode
- // @Title 获取短信/邮箱验证码
- // @Description 用户登录
- // @Param request body models.LoginReq true "type json string"
- // @Success 200 {object} models.LoginResp
- // @router /get_verify_code [post]
- func (this *UserController) GetVerifyCode() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- var req request.VerifyCodeReq
- if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
- return
- }
- if req.AreaCode == "" {
- br.Msg = "请选择区号"
- return
- }
- if req.Phone == "" {
- br.Msg = "请输入手机号"
- return
- }
- if req.AreaCode == utils.TelAreaCodeHome && !utils.ValidateMobileFormatat(req.Phone) {
- br.Msg = "您的手机号输入有误, 请检查"
- return
- }
- phoneKey := utils.CACHE_ACCESS_PHONE_LOGIN_CODE + req.AreaCode + req.Phone
- res, _ := go_redis.RedisInt(phoneKey)
- if res >= 5 {
- br.Msg = "验证码发送太频繁,请稍后重试"
- return
- }
- phoneCountKey := utils.CACHE_ACCESS_PHONE_COUNT_LOGIN_CODE + req.AreaCode + req.Phone
- resCount, _ := go_redis.RedisInt(phoneCountKey)
- if resCount >= utils.VerifyCodeSendLimit {
- br.Msg = fmt.Sprintf("一天最多获取%s次,已超限", strconv.Itoa(utils.VerifyCodeSendLimit))
- return
- }
- code := utils.GetRandDigit(6)
- var (
- sendOk bool
- sendResult string
- err error
- )
- if utils.RunMode == "release" {
- var pars services.SmsApiPars
- pars.PhoneList = append(pars.PhoneList, req.Phone)
- pars.ServiceProvider = services.SmsApiServiceProviderDefault
- pars.SmsContent = fmt.Sprintf("验证码短信:<br>【金瑞期货】您的短信验证码是%s,有效期15分钟", code)
- pars.Sender = "金瑞小程序"
- pars.Department = "信息技术部"
- pars.Purpose = "小程序登录短信验证码"
- result, e := services.PostSmsApi(pars)
- sendOk = true
- if e != nil {
- err = fmt.Errorf("发送短信验证码失败, %v", e)
- sendOk = false
- }
- sendResult = result
- } else {
- // 测试环境用聚合
- ok, result, e := services.SendSmsCode(req.Phone, code)
- if e != nil {
- err = fmt.Errorf("发送短信验证码失败, %v", e)
- }
- sendOk = ok
- sendResult = result
- }
- item := new(models.MsgCode)
- item.Code = code
- item.Mobile = req.AreaCode + req.Phone
- item.ApiResult = sendResult
- item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix()
- item.CreateTime = time.Now()
- if e := item.Insert(); e != nil {
- br.Msg = "发送失败"
- br.ErrMsg = fmt.Sprintf("新增短信发送记录失败, %v", e)
- return
- }
- if err != nil || !sendOk {
- br.Msg = "发送失败"
- br.ErrMsg = fmt.Sprintf("发送短信验证码失败, %v", err)
- return
- }
- // 设置缓存
- if go_redis.IsExist(phoneKey) {
- if e := go_redis.Incr(phoneKey); e != nil {
- utils.FileLog.Info(fmt.Sprintf("验证码手机号临时缓存失败, %v", e))
- }
- } else {
- go_redis.Set(phoneKey, 1, 15*time.Minute)
- }
- if go_redis.IsExist(phoneCountKey) {
- if e := go_redis.Incr(phoneCountKey); e != nil {
- utils.FileLog.Info(fmt.Sprintf("验证码手机号当日缓存失败, %v", e))
- }
- } else {
- go_redis.Set(phoneCountKey, 1, utils.SetKeyExpireToday())
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "发送成功"
- }
- // Login
- // @Title 用户登录
- // @Description 用户登录接口
- // @Param request body models.LoginReq true "type json string"
- // @Success 200 {object} models.Users
- // @router /login [post]
- func (this *UserAuthController) Login() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- session := this.Session
- var req request.LoginReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析失败"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.Phone == "" {
- br.Msg = "请输入手机号"
- br.ErrMsg = "请输入手机号"
- return
- }
- if req.SmsCode == "" {
- br.Msg = "请输入验证码"
- br.ErrMsg = "请输入验证码"
- return
- }
- if session.OpenId == "" {
- br.Msg = "登录失败"
- br.ErrMsg = fmt.Sprintf("用户open_id为空")
- return
- }
- phone := req.AreaCode + req.Phone
- _, e := models.GetMsgCode(phone, req.SmsCode)
- if e != nil {
- br.Msg = "验证码有误,请重新输入"
- br.ErrMsg = fmt.Sprintf("获取验证码失败, %v", e)
- return
- }
- users, tips, e := services.BindUser(session.UnionId, session.OpenId, req.Phone, req.AreaCode)
- if e != nil {
- br.Msg = "登录失败"
- br.ErrMsg = fmt.Sprintf("登录失败, %v", e)
- if tips != "" {
- br.Msg = tips
- }
- return
- }
- br.Data = users
- br.Ret = 200
- br.Msg = "登录成功"
- br.Success = true
- }
- // Info
- // @Title 用户信息
- // @Description 获取用户信息
- // @Success 200 {object} response.UserInfoResp
- // @router /info [post]
- func (this *UserAuthController) Info() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- session := this.Session
- if session == nil || (session != nil && session.OpenId == "") {
- br.Msg = "参数有误"
- return
- }
- resp := new(response.UserInfoResp)
- usersOb := new(models.Users)
- {
- cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().OpenId)
- pars := make([]interface{}, 0)
- pars = append(pars, session.OpenId)
- item, e := usersOb.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- br.Msg = "获取失败"
- br.ErrMsg = fmt.Sprintf("OpenId获取用户失败, %v", e)
- return
- }
- if item != nil {
- resp.User = item.Format2Item()
- resp.LoginStatus = utils.UserStatusIsLogin
- }
- }
- br.Data = resp
- br.Ret = 200
- br.Msg = "获取成功"
- br.Success = true
- }
|