wechat.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_api/models"
  5. "eta/eta_mini_api/models/request"
  6. "eta/eta_mini_api/models/response"
  7. "eta/eta_mini_api/services/wx_app"
  8. "eta/eta_mini_api/utils"
  9. "fmt"
  10. "strconv"
  11. "time"
  12. )
  13. type WechatController struct {
  14. BaseCommonController
  15. }
  16. // Login
  17. // @Title 微信登录
  18. // @Description 微信登录
  19. // @Param request body models.LoginReq true "type json string"
  20. // @Success 200 {object} models.LoginResp
  21. // @router /login [post]
  22. func (this *WechatController) Login() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. if err := recover(); err != nil {
  26. fmt.Println(err)
  27. }
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. var req request.WeChatLoginReq
  32. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  33. if err != nil {
  34. br.Msg = "参数解析失败"
  35. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  36. return
  37. }
  38. if req.Code == "" {
  39. br.Msg = "授权码不存在"
  40. return
  41. }
  42. userInfo, err := wx_app.GetSession(req.Code)
  43. if err != nil {
  44. br.Msg = "登录失败,请重新尝试"
  45. br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error()
  46. return
  47. }
  48. session, err := models.GetWxSessionByOpenId(userInfo.OpenID)
  49. if err != nil && err.Error() != utils.ErrNoRow() {
  50. br.Msg = "登录失败,请重新尝试"
  51. br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error()
  52. return
  53. }
  54. if session == nil {
  55. session = &models.WxSession{
  56. OpenId: userInfo.OpenID,
  57. UnionId: userInfo.UnionID,
  58. CreateTime: time.Now(),
  59. }
  60. insertId, er := session.Insert()
  61. session.WxSessionId = int(insertId)
  62. if er != nil {
  63. br.Msg = "用户登录失败"
  64. br.ErrMsg = "用户登录获取失败,系统错误,Err:" + er.Error()
  65. return
  66. }
  67. }
  68. var token string
  69. timeUnix := time.Now().Unix()
  70. timeUnixStr := strconv.FormatInt(timeUnix, 10)
  71. token = utils.MD5(session.OpenId) + utils.MD5(timeUnixStr)
  72. session.AccessToken = token
  73. session.LastUpdateTime = time.Now()
  74. err = session.Update([]string{"access_token", "last_update_time"})
  75. if err != nil {
  76. br.Msg = "微信登录失败"
  77. br.ErrMsg = "微信登录失败,更新用户信息失败:" + err.Error()
  78. return
  79. }
  80. token = session.AccessToken
  81. resp := new(response.WeChatLoginResp)
  82. resp.Authorization = token
  83. br.Data = resp
  84. br.Msg = "登录成功"
  85. br.Success = true
  86. br.Ret = 200
  87. }