This commit is contained in:
2025-09-05 22:43:48 +08:00
parent 4e6fe9a456
commit 89cf5f0d57
6 changed files with 354 additions and 29 deletions
@@ -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
}