From d72ed7d0a33ef247d18623084b596613fd18cac2 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sat, 26 Apr 2025 15:10:01 +0800 Subject: [PATCH] fix wxpayment and login --- app/user/cmd/api/etc/main.dev.yaml | 2 +- .../cmd/api/internal/logic/agent/applyforagentlogic.go | 5 +++-- .../cmd/api/internal/logic/query/queryservicelogic.go | 5 +++-- .../api/internal/logic/user/agentmobilecodeloginlogic.go | 5 +++-- app/user/cmd/api/internal/logic/user/detaillogic.go | 8 +++++--- .../cmd/api/internal/logic/user/mobilecodeloginlogic.go | 5 +++-- app/user/cmd/api/internal/logic/user/mobileloginlogic.go | 3 ++- app/user/cmd/api/internal/logic/user/registerlogic.go | 5 +++-- app/user/cmd/api/internal/logic/user/wxh5authlogic.go | 7 ++++--- app/user/cmd/api/internal/service/wechatpayService.go | 4 +++- app/user/model/userModel_gen.go | 6 +++--- deploy/script/gen_models.ps1 | 4 ++-- 12 files changed, 35 insertions(+), 24 deletions(-) diff --git a/app/user/cmd/api/etc/main.dev.yaml b/app/user/cmd/api/etc/main.dev.yaml index 923da8c..1e13851 100644 --- a/app/user/cmd/api/etc/main.dev.yaml +++ b/app/user/cmd/api/etc/main.dev.yaml @@ -40,7 +40,7 @@ Alipay: ReturnURL: "http://192.168.10.13:5679/payment/result" Wxpay: - AppID: "wxba8424db4771cc18" + AppID: "wx442ee1ac1ee75917" MchID: "1682635136" MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" diff --git a/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go b/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go index 95a76a9..980e908 100644 --- a/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go +++ b/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go @@ -2,6 +2,7 @@ package agent import ( "context" + "database/sql" "fmt" "qnc-server/app/user/model" jwtx "qnc-server/common/jwt" @@ -58,12 +59,12 @@ func (l *ApplyForAgentLogic) ApplyForAgent(req *types.AgentApplyReq) (resp *type var userID int64 transErr := l.svcCtx.AgentAuditModel.Trans(l.ctx, func(transCtx context.Context, session sqlx.Session) error { // 两种情况,1. 已注册账号然后申请代理 2. 未注册账号申请代理 - user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile) + user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true}) if findUserErr != nil && !errors.Is(findUserErr, model.ErrNotFound) { return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "代理申请, 读取数据库获取用户失败, mobile: %s, err: %+v", encryptedMobile, err) } if user == nil { - user = &model.User{Mobile: encryptedMobile} + user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} // if len(user.Nickname) == 0 { // user.Nickname = encryptedMobile // } diff --git a/app/user/cmd/api/internal/logic/query/queryservicelogic.go b/app/user/cmd/api/internal/logic/query/queryservicelogic.go index d949105..0f663c5 100644 --- a/app/user/cmd/api/internal/logic/query/queryservicelogic.go +++ b/app/user/cmd/api/internal/logic/query/queryservicelogic.go @@ -2,6 +2,7 @@ package query import ( "context" + "database/sql" "encoding/hex" "encoding/json" "fmt" @@ -1401,13 +1402,13 @@ func (l *QueryServiceLogic) GetOrCreateUser(mobile string) (int64, error) { return userID, nil } - userModel, err := l.svcCtx.UserModel.FindOneByMobile(l.ctx, mobile) + userModel, err := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: mobile, Valid: true}) if err != nil && !errors.Is(err, model.ErrNotFound) { return 0, err } // 没有则创建账号 if userModel == nil { - userModel = &model.User{Mobile: mobile} + userModel = &model.User{Mobile: sql.NullString{String: mobile, Valid: true}} // if len(userModel.Nickname) == 0 { // userModel.Nickname = mobile // } diff --git a/app/user/cmd/api/internal/logic/user/agentmobilecodeloginlogic.go b/app/user/cmd/api/internal/logic/user/agentmobilecodeloginlogic.go index ffe4b82..d6a547c 100644 --- a/app/user/cmd/api/internal/logic/user/agentmobilecodeloginlogic.go +++ b/app/user/cmd/api/internal/logic/user/agentmobilecodeloginlogic.go @@ -2,6 +2,7 @@ package user import ( "context" + "database/sql" "fmt" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" @@ -51,12 +52,12 @@ func (l *AgentMobileCodeLoginLogic) AgentMobileCodeLogin(req *types.MobileCodeLo return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "手机登录, 验证码不正确") } - user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile) + user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true}) if findUserErr != nil && findUserErr != model.ErrNotFound { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机登录, 读取数据库获取用户失败, mobile: %s, err: %+v", encryptedMobile, err) } if user == nil { - user = &model.User{Mobile: encryptedMobile} + user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} // if len(user.Nickname) == 0 { // user.Nickname = "" // } diff --git a/app/user/cmd/api/internal/logic/user/detaillogic.go b/app/user/cmd/api/internal/logic/user/detaillogic.go index a972fc2..fb4b7b1 100644 --- a/app/user/cmd/api/internal/logic/user/detaillogic.go +++ b/app/user/cmd/api/internal/logic/user/detaillogic.go @@ -46,9 +46,11 @@ func (l *DetailLogic) Detail() (resp *types.UserInfoResp, err error) { if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, 用户信息结构体复制失败, %v", err) } - userInfo.Mobile, err = crypto.DecryptMobile(userInfo.Mobile, l.svcCtx.Config.Encrypt.SecretKey) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, 解密手机号失败, %v", err) + if user.Mobile.Valid { + userInfo.Mobile, err = crypto.DecryptMobile(user.Mobile.String, l.svcCtx.Config.Encrypt.SecretKey) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, 解密手机号失败, %v", err) + } } return &types.UserInfoResp{ UserInfo: userInfo, diff --git a/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go b/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go index ad72718..d2c05db 100644 --- a/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go +++ b/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go @@ -2,6 +2,7 @@ package user import ( "context" + "database/sql" "fmt" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" @@ -53,12 +54,12 @@ func (l *MobileCodeLoginLogic) MobileCodeLogin(req *types.MobileCodeLoginReq) (r } } - user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile) + user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true}) if findUserErr != nil && findUserErr != model.ErrNotFound { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机登录, 读取数据库获取用户失败, mobile: %s, err: %+v", encryptedMobile, err) } if user == nil { - user = &model.User{Mobile: encryptedMobile} + user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} // if len(user.Nickname) == 0 { // user.Nickname = encryptedMobile // } diff --git a/app/user/cmd/api/internal/logic/user/mobileloginlogic.go b/app/user/cmd/api/internal/logic/user/mobileloginlogic.go index 5f9f520..14d6534 100644 --- a/app/user/cmd/api/internal/logic/user/mobileloginlogic.go +++ b/app/user/cmd/api/internal/logic/user/mobileloginlogic.go @@ -2,6 +2,7 @@ package user import ( "context" + "database/sql" "qnc-server/app/user/model" jwtx "qnc-server/common/jwt" "qnc-server/common/tool" @@ -38,7 +39,7 @@ func (l *MobileLoginLogic) MobileLogin(req *types.MobileLoginReq) (resp *types.M if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机登录, 加密手机号失败: %+v", err) } - user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile) + user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true}) if findUserErr != nil && findUserErr != model.ErrNotFound { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机登录, 读取数据库获取用户失败, mobile%s, err: %+v", encryptedMobile, err) } diff --git a/app/user/cmd/api/internal/logic/user/registerlogic.go b/app/user/cmd/api/internal/logic/user/registerlogic.go index 6c8781b..39924c4 100644 --- a/app/user/cmd/api/internal/logic/user/registerlogic.go +++ b/app/user/cmd/api/internal/logic/user/registerlogic.go @@ -2,6 +2,7 @@ package user import ( "context" + "database/sql" "fmt" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" @@ -52,7 +53,7 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe if cacheCode != req.Code { return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "手机注册, 验证码不正确: %s", encryptedMobile) } - hasUser, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile) + hasUser, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true}) if findUserErr != nil && findUserErr != model.ErrNotFound { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 读取数据库获取用户失败, mobile%s, err: %+v", encryptedMobile, err) } @@ -62,7 +63,7 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe var userId int64 if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { user := new(model.User) - user.Mobile = encryptedMobile + user.Mobile = sql.NullString{String: encryptedMobile, Valid: true} // if len(user.Nickname) == 0 { // user.Nickname = encryptedMobile // } diff --git a/app/user/cmd/api/internal/logic/user/wxh5authlogic.go b/app/user/cmd/api/internal/logic/user/wxh5authlogic.go index 09449be..84d8964 100644 --- a/app/user/cmd/api/internal/logic/user/wxh5authlogic.go +++ b/app/user/cmd/api/internal/logic/user/wxh5authlogic.go @@ -40,7 +40,9 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取access_token失败: %v", err) } - + if accessTokenResp.AccessToken == "" || accessTokenResp.Openid == "" { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取access_token失败: %v", err) + } // Step 2: 查找用户授权信息 userAuth, findErr := l.svcCtx.UserAuthModel.FindOneByAuthTypeAuthKey(l.ctx, model.UserAuthTypeWxh5, accessTokenResp.Openid) if findErr != nil && !errors.Is(findErr, model.ErrNotFound) { @@ -59,7 +61,6 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe } else { // 授权信息不存在,创建新用户 user = &model.User{} - user.Mobile = accessTokenResp.Openid if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(context context.Context, session sqlx.Session) error { // 插入数据库 insertResult, insertErr := l.svcCtx.UserModel.Insert(l.ctx, session, user) @@ -108,7 +109,7 @@ type AccessTokenResp struct { // GetAccessToken 通过code获取access_token func GetAccessToken(code string) (*AccessTokenResp, error) { - appID := "wxba8424db4771cc18" + appID := "wx442ee1ac1ee75917" appSecret := "c80474909db42f63913b7a307b3bee17" url := fmt.Sprintf("https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code", appID, appSecret, code) diff --git a/app/user/cmd/api/internal/service/wechatpayService.go b/app/user/cmd/api/internal/service/wechatpayService.go index 7045632..76aa07f 100644 --- a/app/user/cmd/api/internal/service/wechatpayService.go +++ b/app/user/cmd/api/internal/service/wechatpayService.go @@ -135,7 +135,6 @@ func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amo if err != nil { return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode) } - // 返回预支付交易会话标识 return resp, nil } @@ -159,6 +158,9 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64 return "", findAuthModelErr } prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, userAuthModel.AuthKey) + if err != nil { + return "", err + } case "h5-weixin": userID, getUidErr := ctxdata.GetUidFromCtx(ctx) if getUidErr != nil { diff --git a/app/user/model/userModel_gen.go b/app/user/model/userModel_gen.go index 6ea265a..937d340 100644 --- a/app/user/model/userModel_gen.go +++ b/app/user/model/userModel_gen.go @@ -34,7 +34,7 @@ type ( userModel interface { Insert(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) FindOne(ctx context.Context, id int64) (*User, error) - FindOneByMobile(ctx context.Context, mobile string) (*User, error) + FindOneByMobile(ctx context.Context, mobile sql.NullString) (*User, error) Update(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *User) error Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error @@ -62,7 +62,7 @@ type ( DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 DelState int64 `db:"del_state"` Version int64 `db:"version"` // 版本号 - Mobile string `db:"mobile"` + Mobile sql.NullString `db:"mobile"` Password sql.NullString `db:"password"` Nickname sql.NullString `db:"nickname"` Info string `db:"info"` @@ -107,7 +107,7 @@ func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error) } } -func (m *defaultUserModel) FindOneByMobile(ctx context.Context, mobile string) (*User, error) { +func (m *defaultUserModel) FindOneByMobile(ctx context.Context, mobile sql.NullString) (*User, error) { qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, mobile) var resp User err := m.QueryRowIndexCtx(ctx, &resp, qncUserMobileKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { diff --git a/deploy/script/gen_models.ps1 b/deploy/script/gen_models.ps1 index ef68ffc..ba06e32 100644 --- a/deploy/script/gen_models.ps1 +++ b/deploy/script/gen_models.ps1 @@ -29,9 +29,9 @@ $tables = @( # "product", # "product_feature", # "query", - # "user" + "user" # "user_auth" - "example" + # "example" ) # 为每个表生成模型