修改了微信授权登录
This commit is contained in:
parent
3fcc745e83
commit
9aded38adc
@ -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),
|
||||||
|
|||||||
@ -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"` // (1:app 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 手机号登录
|
||||||
|
|||||||
@ -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{}
|
||||||
|
|||||||
@ -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
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user