This commit is contained in:
@@ -52,7 +52,7 @@ func (w *MiniService) Code2Session(code string) (*model.MiniUser, error) {
|
||||
|
||||
// 查找或创建用户
|
||||
var user model.MiniUser
|
||||
err = global.GVA_DB.Where("openid = ?", session.OpenID).First(&user).Error
|
||||
err = global.GVA_DB.Where("open_id = ?", session.OpenID).First(&user).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// 创建新用户
|
||||
@@ -98,7 +98,20 @@ func (w *MiniService) Code2Session(code string) (*model.MiniUser, error) {
|
||||
// GetUserInfo 获取用户信息
|
||||
func (w *MiniService) GetUserInfo(openid string) (*model.MiniUser, error) {
|
||||
var user model.MiniUser
|
||||
err := global.GVA_DB.Where("openid = ?", openid).First(&user).Error
|
||||
err := global.GVA_DB.Where("open_id = ?", openid).First(&user).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, errors.New("用户不存在")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
// GetUserByID 根据用户ID获取用户信息
|
||||
func (w *MiniService) GetUserByID(userID uint) (*model.MiniUser, error) {
|
||||
var user model.MiniUser
|
||||
err := global.GVA_DB.Where("id = ?", userID).First(&user).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, errors.New("用户不存在")
|
||||
@@ -152,7 +165,7 @@ func (w *MiniService) UpdateUserInfo(openid string, userInfo map[string]interfac
|
||||
return errors.New("没有需要更新的信息")
|
||||
}
|
||||
|
||||
err := global.GVA_DB.Model(&model.MiniUser{}).Where("openid = ?", openid).Updates(updates).Error
|
||||
err := global.GVA_DB.Model(&model.MiniUser{}).Where("open_id = ?", openid).Updates(updates).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("更新微信小程序用户信息失败: " + err.Error())
|
||||
return err
|
||||
@@ -200,7 +213,7 @@ func (w *MiniService) GetUserByUnionID(unionid string) (*model.MiniUser, error)
|
||||
// BindPhone 绑定手机号
|
||||
func (w *MiniService) BindPhone(openid, phone string) (*model.MiniUser, error) {
|
||||
// 更新小程序用户的手机号
|
||||
err := global.GVA_DB.Model(&model.MiniUser{}).Where("openid = ?", openid).Update("phone", phone).Error
|
||||
err := global.GVA_DB.Model(&model.MiniUser{}).Where("open_id = ?", openid).Update("phone", phone).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("更新手机号失败: " + err.Error())
|
||||
return nil, err
|
||||
@@ -208,7 +221,7 @@ func (w *MiniService) BindPhone(openid, phone string) (*model.MiniUser, error) {
|
||||
|
||||
// 获取更新后的用户信息
|
||||
var user model.MiniUser
|
||||
err = global.GVA_DB.Where("openid = ?", openid).First(&user).Error
|
||||
err = global.GVA_DB.Where("open_id = ?", openid).First(&user).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -237,7 +250,7 @@ func (w *MiniService) CheckUnionIDExists(unionid string) (*model.MiniUser, error
|
||||
}
|
||||
|
||||
var user model.MiniUser
|
||||
err := global.GVA_DB.Where("unionid = ?", unionid).First(&user).Error
|
||||
err := global.GVA_DB.Where("union_id = ?", unionid).First(&user).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil // 不存在,返回 nil 但不报错
|
||||
@@ -246,3 +259,52 @@ func (w *MiniService) CheckUnionIDExists(unionid string) (*model.MiniUser, error
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
// UpdatePhoneByEncryption 通过加密数据更新用户手机号
|
||||
func (w *MiniService) UpdatePhoneByEncryption(openid, encryptedData, iv string) (string, error) {
|
||||
// 1. 获取用户信息
|
||||
var user model.MiniUser
|
||||
err := global.GVA_DB.Where("open_id = ?", openid).First(&user).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return "", errors.New("用户不存在")
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
if user.SessionKey == nil || *user.SessionKey == "" {
|
||||
return "", errors.New("用户 SessionKey 不存在,请重新登录")
|
||||
}
|
||||
|
||||
// 2. 获取微信小程序实例
|
||||
mini, err := w.GetWechatMiniProgram()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// 3. 使用 session_key 解密手机号
|
||||
encryptor := mini.GetEncryptor()
|
||||
plainData, err := encryptor.Decrypt(*user.SessionKey, encryptedData, iv)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("解密手机号失败: " + err.Error())
|
||||
return "", errors.New("解密手机号失败")
|
||||
}
|
||||
|
||||
// 4. 从解密数据中获取手机号
|
||||
phoneNumber := ""
|
||||
if plainData.PhoneNumber != "" {
|
||||
phoneNumber = plainData.PhoneNumber
|
||||
} else {
|
||||
return "", errors.New("解密数据中未找到手机号")
|
||||
}
|
||||
|
||||
// 5. 更新用户手机号
|
||||
err = global.GVA_DB.Model(&user).Update("phone", phoneNumber).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("更新手机号失败: " + err.Error())
|
||||
return "", err
|
||||
}
|
||||
|
||||
global.GVA_LOG.Info("用户手机号更新成功: " + phoneNumber + ", openid: " + openid)
|
||||
return phoneNumber, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user