|
@@ -53,39 +53,35 @@ func (this *WechatCommonController) WechatLogin() {
|
|
|
}
|
|
|
firstLogin := 1
|
|
|
userId := 0
|
|
|
- if wxInfo.OpenID != "" {
|
|
|
- wxUser, err := models.GetWxUserItemByOpenId(wxInfo.UnionID)
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
- br.Msg = "获取用户信息失败"
|
|
|
- br.ErrMsg = "根据openid获取用户信息失败,Eerr:" + err.Error()
|
|
|
+ wxUser, err := models.GetWxUserItemByUnionid(wxInfo.UnionID)
|
|
|
+ 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()) {
|
|
|
+ user := new(models.WxUser)
|
|
|
+ user.OpenId = wxInfo.OpenID
|
|
|
+ user.CompanyId = 1
|
|
|
+ user.CreatedTime = time.Now()
|
|
|
+ user.UnionId = wxInfo.UnionID
|
|
|
+ user.Unionid = wxInfo.UnionID
|
|
|
+ user.FirstLogin = 1
|
|
|
+ user.Enabled = 1
|
|
|
+ user.RegisterPlatform = 1
|
|
|
+ user.RegisterTime = time.Now()
|
|
|
+ user.SessionKey = wxInfo.SessionKey
|
|
|
+ newId, err := models.AddWxUser(user)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "登录失败"
|
|
|
+ br.ErrMsg = "登录失败,新增联系人失败,Eerr:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- if wxUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
|
|
|
- user := new(models.WxUser)
|
|
|
- user.OpenId = wxInfo.OpenID
|
|
|
- user.CompanyId = 1
|
|
|
- user.CreatedTime = time.Now()
|
|
|
- user.UnionId = wxInfo.UnionID
|
|
|
- user.Unionid = wxInfo.UnionID
|
|
|
- user.FirstLogin = 1
|
|
|
- user.Enabled = 1
|
|
|
- user.RegisterPlatform = 1
|
|
|
- user.RegisterTime = time.Now()
|
|
|
- newId, err := models.AddWxUser(user)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "登录失败"
|
|
|
- br.ErrMsg = "登录失败,新增联系人失败,Eerr:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- userId = int(newId)
|
|
|
- } else {
|
|
|
- firstLogin = wxUser.FirstLogin
|
|
|
- userId = wxUser.UserId
|
|
|
- }
|
|
|
+ userId = int(newId)
|
|
|
} else {
|
|
|
- br.Msg = "获取用户信息失败"
|
|
|
- br.ErrMsg = "获取unionId失败,unionId:" + wxInfo.UnionID
|
|
|
- return
|
|
|
+ firstLogin = wxUser.FirstLogin
|
|
|
+ userId = wxUser.UserId
|
|
|
+ models.ModifyWxUserSessionKey(wxInfo.SessionKey, userId)
|
|
|
}
|
|
|
|
|
|
var token string
|
|
@@ -102,8 +98,9 @@ func (this *WechatCommonController) WechatLogin() {
|
|
|
token = utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr)
|
|
|
//新增session
|
|
|
{
|
|
|
- session := new(models.Session)
|
|
|
+ session := new(models.CygxSession)
|
|
|
session.OpenId = wxInfo.OpenID
|
|
|
+ session.UnionId = wxInfo.UnionID
|
|
|
session.UserId = userId
|
|
|
session.CreatedTime = time.Now()
|
|
|
session.LastUpdatedTime = time.Now()
|
|
@@ -158,58 +155,182 @@ func (this *WechatCommonController) WechatLogin() {
|
|
|
br.Success = true
|
|
|
br.Msg = "登录成功"
|
|
|
br.Data = resp
|
|
|
- //登录日志
|
|
|
- //{
|
|
|
- // returnResult, err := json.Marshal(br)
|
|
|
- // if err != nil {
|
|
|
- // utils.FileLog.Info(this.Ctx.Input.URI() + " Err:%s" + err.Error())
|
|
|
- // }
|
|
|
- // utils.FileLog.Info(this.Ctx.Input.URI()+" code: %s , return data: %s", code, string(returnResult))
|
|
|
- //}
|
|
|
}
|
|
|
|
|
|
-// @Title 微信获取签名接口
|
|
|
-// @Description 微信获取签名接口
|
|
|
-// @Param Url query string true "url地址"
|
|
|
-// @Success 200 {object} models.WechatSign
|
|
|
-// @router /getWxSign [get]
|
|
|
-func (this *WechatController) GetWxSign() {
|
|
|
+// @Title 小程序获取用户信息
|
|
|
+// @Description 小程序获取用户信息接口(需要登录)
|
|
|
+// @Param request body models.WxGetUserInfoReq true "type json string"
|
|
|
+// @Success 200 {object} models.WxGetUserInfoResp
|
|
|
+// @router /getUserInfo [post]
|
|
|
+func (this *WechatController) GetUserInfo() {
|
|
|
br := new(models.BaseResponse).Init()
|
|
|
defer func() {
|
|
|
this.Data["json"] = br
|
|
|
this.ServeJSON()
|
|
|
}()
|
|
|
- //getUrl := this.GetString("Url")
|
|
|
+ var req models.WxGetUserInfoReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.RawData == "" || req.EncryptedData == "" || req.Signature == "" || req.Iv == "" {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ user := this.User
|
|
|
+ if user == nil {
|
|
|
+ br.Msg = "请登陆"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sessionKey := user.SessionKey
|
|
|
+ userInfo, err := weapp.DecryptUserInfo(sessionKey, req.RawData, req.EncryptedData, req.Signature, req.Iv)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "解析用户信息失败"
|
|
|
+ br.ErrMsg = "解析用户信息失败,DecryptUserInfo Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ userId := 0
|
|
|
+ //修改用户微信信息
|
|
|
+ oldUser, err := models.GetWxUserItemByUnionid(userInfo.UnionID)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取用户信息失败"
|
|
|
+ br.ErrMsg = "获取用户信息失败 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if oldUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
|
|
|
+ err = models.ModifyWxUserInfo(userInfo.UnionID, userInfo.Nickname, userInfo.Province, userInfo.City, userInfo.Country, userInfo.Avatar, userInfo.Gender, user.UserId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取用户信息失败"
|
|
|
+ br.ErrMsg = "修改用户信息失败 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ userId = user.UserId
|
|
|
+ } else {
|
|
|
+ if user.UserId == oldUser.UserId {
|
|
|
+ err = models.ModifyWxUserInfo(userInfo.UnionID, userInfo.Nickname, userInfo.Province, userInfo.City, userInfo.Country, userInfo.Avatar, userInfo.Gender, user.UserId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取用户信息失败"
|
|
|
+ br.ErrMsg = "修改用户信息失败 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ userId = user.UserId
|
|
|
+ } else {
|
|
|
+ userId = oldUser.UserId
|
|
|
+ err = models.ModifyWxUserInfo(userInfo.UnionID, userInfo.Nickname, userInfo.Province, userInfo.City, userInfo.Country, userInfo.Avatar, userInfo.Gender, oldUser.UserId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取用户信息失败"
|
|
|
+ br.ErrMsg = "修改用户信息失败 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = models.DeleteWxUserByUserId(user.UserId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "删除用户信息失败"
|
|
|
+ br.ErrMsg = "删除用户信息失败 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //accessToken, err := services.WxGetAccessToken()
|
|
|
- //if err != nil {
|
|
|
- // br.Msg = "获取用户信息失败"
|
|
|
- // br.ErrMsg = "获取access_token失败,err:" + err.Error()
|
|
|
- // 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)
|
|
|
- //signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
|
|
|
- //
|
|
|
- //resp := new(models.WechatSign)
|
|
|
- //resp.AppId = utils.WxAppId
|
|
|
- //resp.NonceStr = nonceString
|
|
|
- //resp.Timestamp = timestamp
|
|
|
- //resp.Url = getUrl
|
|
|
- //resp.Signature = signature
|
|
|
+ var token string
|
|
|
+ tokenItem, err := models.GetTokenByUid(userId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "登录失败"
|
|
|
+ br.ErrMsg = "登录失败,获取token失败:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
|
|
|
+ timeUnix := time.Now().Unix()
|
|
|
+ timeUnixStr := strconv.FormatInt(timeUnix, 10)
|
|
|
+ token = utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr)
|
|
|
+ //新增session
|
|
|
+ {
|
|
|
+ session := new(models.CygxSession)
|
|
|
+ session.OpenId = userInfo.OpenID
|
|
|
+ session.UnionId = userInfo.UnionID
|
|
|
+ session.UserId = userId
|
|
|
+ session.CreatedTime = time.Now()
|
|
|
+ session.LastUpdatedTime = time.Now()
|
|
|
+ session.ExpireTime = time.Now().AddDate(0, 3, 0)
|
|
|
+ session.AccessToken = token
|
|
|
+ err = models.AddSession(session)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "登录失败"
|
|
|
+ br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ token = tokenItem.AccessToken
|
|
|
+ }
|
|
|
+ resp := new(models.WxGetUserInfoResp)
|
|
|
+ resp.NickName = userInfo.Nickname
|
|
|
+ resp.Gender = userInfo.Gender
|
|
|
+ resp.Province = userInfo.Province
|
|
|
+ resp.Language = userInfo.Language
|
|
|
+ resp.Country = userInfo.Country
|
|
|
+ resp.City = userInfo.City
|
|
|
+ resp.AvatarUrl = userInfo.Avatar
|
|
|
+ resp.Unionid = userInfo.UnionID
|
|
|
+ resp.Appid = userInfo.Watermark.AppID
|
|
|
+ resp.Timestamp = userInfo.Watermark.Timestamp
|
|
|
+ resp.Authorization = token
|
|
|
+ br.Msg = "获取成功!"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 小程序获取用户绑定手机号
|
|
|
+// @Description 小程序获取用户绑定手机号接口(需要登录)
|
|
|
+// @Param request body models.WxGetPhoneNumberReq true "type json string"
|
|
|
+// @Success 200 {object} models.WxGetPhoneNumberResp
|
|
|
+// @router /getPhoneNumber [post]
|
|
|
+func (this *WechatController) GetPhoneNumber() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req models.WxGetPhoneNumberReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.EncryptedData == "" || req.Iv == "" {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ user := this.User
|
|
|
+ if user == nil {
|
|
|
+ br.Msg = "请登陆"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sessionKey := user.SessionKey
|
|
|
+ wxMobile, err := weapp.DecryptMobile(sessionKey, req.EncryptedData, req.Iv)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "解析用户手机号信息失败"
|
|
|
+ br.ErrMsg = "解析用户手机号信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = models.ModifyUsersMobile(user.UserId, wxMobile.PurePhoneNumber)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.WxGetPhoneNumberResp)
|
|
|
+ resp.Authorization = this.Token
|
|
|
+ resp.PhoneNumber = wxMobile.PhoneNumber
|
|
|
+ resp.PurePhoneNumber = wxMobile.PurePhoneNumber
|
|
|
+ resp.CountryCode = wxMobile.CountryCode
|
|
|
+ br.Msg = "获取成功!"
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
- br.Msg = "获取签名成功"
|
|
|
- //br.Data = resp
|
|
|
+ br.Data = resp
|
|
|
}
|