修改了微信授权登录

This commit is contained in:
wucongxing8150 2024-08-16 15:39:09 +08:00
parent 3fcc745e83
commit 9aded38adc
4 changed files with 124 additions and 49 deletions

View File

@ -10,7 +10,6 @@ import (
"hepa-calc-api/api/responses" "hepa-calc-api/api/responses"
"hepa-calc-api/api/service" "hepa-calc-api/api/service"
"hepa-calc-api/config" "hepa-calc-api/config"
"hepa-calc-api/extend/weChat"
"hepa-calc-api/global" "hepa-calc-api/global"
"hepa-calc-api/utils" "hepa-calc-api/utils"
"time" "time"
@ -66,9 +65,6 @@ func (r *Login) LoginPhone(c *gin.Context) {
user, _ := userDao.GetUser(maps) user, _ := userDao.GetUser(maps)
// 新用户处理方式 // 新用户处理方式
if user == nil { if user == nil {
// 头像
avatar := "www.baidu.com"
// 登录ip // 登录ip
publicService := service.PublicService{} publicService := service.PublicService{}
loginIp := publicService.GetUserIP(c.Request) loginIp := publicService.GetUserIP(c.Request)
@ -83,7 +79,7 @@ func (r *Login) LoginPhone(c *gin.Context) {
UnionId: "", UnionId: "",
Age: nil, Age: nil,
Sex: nil, Sex: nil,
Avatar: avatar, Avatar: "",
IsMember: 0, IsMember: 0,
MemberExpireDate: nil, MemberExpireDate: nil,
LoginIp: loginIp, LoginIp: loginIp,
@ -187,65 +183,53 @@ func (r *Login) LoginWx(c *gin.Context) {
return return
} }
// 获取微信网页授权access_token // 开始事务
webAccessToken, err := weChat.GetWebAccessToken(req.Code) tx := global.Db.Begin()
if err != nil { defer func() {
responses.FailWithMessage(err.Error(), c) if r := recover(); r != nil {
return fmt.Println(r)
} tx.Rollback()
}
}()
// 网页授权拉取用户信息 var userInfo *model.UserInfo
userInfo, err := weChat.GetUserInfo(webAccessToken.AccessToken, webAccessToken.OpenId) var err error
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
fmt.Println(userInfo)
// 检测用户信息 // 检测用户信息
userDao := dao.UserDao{} userDao := dao.UserDao{}
maps := make(map[string]interface{}) maps := make(map[string]interface{})
maps["open_id"] = webAccessToken.OpenId maps["mobile"] = req.Mobile
user, _ := userDao.GetUser(maps) user, _ := userDao.GetUser(maps)
// 新用户处理方式 // 新用户处理方式
if user == nil { if user == nil {
// 开始事务 // 登录ip
tx := global.Db.Begin() publicService := service.PublicService{}
defer func() { loginIp := publicService.GetUserIP(c.Request)
if r := recover(); r != nil {
fmt.Println(r)
tx.Rollback()
}
}()
// 处理用户头像 // 处理用户头像
userService := service.UserService{} userService := service.UserService{}
avatar, err := userService.HandleUserAvatar(userInfo.HeadImgUrl) avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl)
if err != nil { if err != nil {
tx.Rollback() tx.Rollback()
responses.FailWithMessage(err.Error(), c) responses.FailWithMessage(err.Error(), c)
return return
} }
// 登录ip
publicService := service.PublicService{}
loginIp := publicService.GetUserIP(c.Request)
// 新增用户 // 新增用户
user = &model.User{ user = &model.User{
UserName: userInfo.Nickname, UserName: "",
Mobile: "", AppIden: "",
RegisterSource: req.Source, Mobile: req.Mobile,
OpenId: userInfo.OpenId, RegisterSource: 2,
UnionId: userInfo.UnionId, OpenId: req.OpenId,
UnionId: req.UnionId,
Age: nil, Age: nil,
Sex: &userInfo.Sex, Sex: nil,
Avatar: avatar, Avatar: avatarOssPath,
IsMember: 0, IsMember: 0,
MemberExpireDate: nil, MemberExpireDate: nil,
LoginIp: loginIp, LoginIp: loginIp,
} }
loginAt := model.LocalTime(time.Now()) loginAt := model.LocalTime(time.Now())
user.LoginAt = &loginAt user.LoginAt = &loginAt
@ -255,9 +239,51 @@ func (r *Login) LoginWx(c *gin.Context) {
responses.FailWithMessage(err.Error(), c) responses.FailWithMessage(err.Error(), c)
return return
} }
tx.Commit()
// 新增用户详情
userInfo = &model.UserInfo{
UserId: user.UserId,
Height: "",
Weight: "",
NationId: nil,
IsFamilyHistory: nil,
IsPregnant: nil,
ExpectedDate: nil,
ProvinceId: nil,
Province: "",
CityId: nil,
City: "",
CountyId: nil,
County: "",
}
userInfoDao := dao.UserInfoDao{}
userInfo, err = userInfoDao.AddUserInfo(tx, userInfo)
if err != nil {
tx.Rollback()
responses.FailWithMessage(err.Error(), c)
return
}
} }
// 处理app用户数据
userService := service.UserService{}
err = userService.HandleAppUserInfo(tx, user, userInfo)
if err != nil {
tx.Rollback()
responses.FailWithMessage(err.Error(), c)
return
}
// 处理app用户病例数据
err = userService.HandleAppUserCase(tx, user)
if err != nil {
tx.Rollback()
responses.FailWithMessage(err.Error(), c)
return
}
tx.Commit()
// 下发token // 下发token
token := &utils.Token{ token := &utils.Token{
UserId: fmt.Sprintf("%d", user.UserId), UserId: fmt.Sprintf("%d", user.UserId),

View File

@ -7,8 +7,11 @@ type LoginRequest struct {
// LoginWx 微信授权登录 // LoginWx 微信授权登录
type LoginWx struct { type LoginWx struct {
Code string `json:"code" form:"code" label:"授权码" validate:"required"` Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"`
Source int `json:"source" form:"source" label:"来源" validate:"required,oneof=1 2"` // 1app 2公众号 OpenId string `json:"openid" form:"openid" label:"openid"`
Nickname string `json:"nickname" form:"nickname" label:"用户昵称"`
HeadImgUrl string `json:"headimgurl" form:"headimgurl" label:"头像"`
UnionId string `json:"unionid" form:"unionid" label:"unionid"`
} }
// LoginPhone 手机号登录 // LoginPhone 手机号登录

View File

@ -18,8 +18,8 @@ import (
type UserService struct { type UserService struct {
} }
// HandleUserAvatar 处理用户头像 // HandleUserImage 处理用户图片
func (r *UserService) HandleUserAvatar(wxAvatar string) (avatar string, err error) { func (r *UserService) HandleUserImage(wxAvatar string) (ossPath string, err error) {
if wxAvatar == "" { if wxAvatar == "" {
return "", nil return "", nil
} }
@ -48,7 +48,7 @@ func (r *UserService) HandleUserAvatar(wxAvatar string) (avatar string, err erro
now := time.Now() now := time.Now()
dateTimeString := now.Format("20060102150405") // 当前时间字符串 dateTimeString := now.Format("20060102150405") // 当前时间字符串
rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数
ossPath := "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png" ossPath = "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png"
// 上传oss // 上传oss
_, err = aliyun.PutObjectByte(ossPath, respBody) _, err = aliyun.PutObjectByte(ossPath, respBody)
@ -375,6 +375,25 @@ func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo
} }
} }
// 头像
if appUserInfo.Data.Photo != "" && user.Avatar == "" {
// 处理app图片前缀
photo, err := app.HandleImagePrefix(appUserInfo.Data.Photo)
if err != nil {
return err
}
if photo != "" {
// 处理用户图片上传至oss
ossPath, err := r.HandleUserImage(appUserInfo.Data.Photo)
if err != nil {
return err
}
userData["avatar"] = ossPath
}
}
// 修改用户数据 // 修改用户数据
if len(userData) > 0 { if len(userData) > 0 {
userDao := dao.UserDao{} userDao := dao.UserDao{}

View File

@ -2,14 +2,18 @@ package app
import ( import (
"encoding/json" "encoding/json"
"hepa-calc-api/config"
"hepa-calc-api/utils" "hepa-calc-api/utils"
"sort" "sort"
"strings"
) )
const ( const (
apiUrl = "https://dev-wx.igandan.com" // 本机认证服务身份证实人认证在线检测接口地址 apiUrl = "https://dev-wx.igandan.com" // 本机认证服务身份证实人认证在线检测接口地址
secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
platform = "suanyisuan" // 所属平台 platform = "suanyisuan" // 所属平台
devImagePrefix = "https://dev-doc.igandan.com/app" // 测试环境图片地址前缀
prodImagePrefix = "https://dev-doc.igandan.com/app" // 正式环境图片地址前缀
) )
// GenSignature 生成签名信息 // GenSignature 生成签名信息
@ -63,3 +67,26 @@ func sortMapRecursively(data map[string]interface{}) map[string]interface{} {
return sortedMap return sortedMap
} }
// HandleImagePrefix 处理app图片前缀
func HandleImagePrefix(u string) (string, error) {
if u == "" {
return "", nil
}
// 去除oss前缀
u = utils.RemoveOssDomain(u)
var imgPath string
if config.C.Env == "prod" {
imgPath = strings.Replace(u, devImagePrefix, "", 1)
} else {
imgPath = strings.Replace(u, prodImagePrefix, "", 1)
}
if imgPath == "/null" {
return "", nil
}
return imgPath, nil
}