feat: payment refund

This commit is contained in:
zzw
2026-10-07 09:28:12 +08:00
parent a39ab003f4
commit a4c04b9c83
17 changed files with 258 additions and 116 deletions
+5
View File
@@ -6,6 +6,11 @@ type Token struct {
Info UserLoginSession `json:"info"`
}
type OpenidResult struct {
Openid string `json:"openid"`
Unionid string `json:"unionid"`
}
type UserLoginSession struct {
Id int64 `json:"id"`
Name string `json:"name"`
@@ -0,0 +1,66 @@
package logic
import (
"context"
"lone-services/pkg/utils"
"lone-services/pkg/validate"
user "lone-services/rpc/user/pb"
userconfig "lone-services/services/user/internal/config"
"lone-services/services/user/internal/dao"
"lone-services/services/user/internal/svc"
"lone-services/services/user/validator"
"github.com/zeromicro/go-zero/core/logx"
)
type GetOpenidLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetOpenidLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOpenidLogic {
return &GetOpenidLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *GetOpenidLogic) GetOpenid(in *user.GetOpenidReq) (*user.Response, error) {
loginUser := utils.GetUserFromCtx(l.ctx)
if loginUser.ID < utils.NumberOne {
return failResponse(utils.ErrorNoLoginInfo), nil
}
var req validator.GetOpenidValidator
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
return outResponse(utils.ErrorParams, msg), nil
}
if loginUser.ClientCode == utils.StringEmpty {
return outResponse(utils.ErrorParams, "端编码不能为空"), nil
}
if _, err := loadEnabledClient(loginUser.ClientCode); err != nil {
l.Errorf("get openid load client: %v", err)
return failResponse(utils.Fail), nil
}
wxClient, cfgErr := userconfig.NewWechatClient(loginUser.ClientCode)
if cfgErr != nil {
l.Errorf("get openid wechat config: %v", cfgErr)
return outResponse(utils.Fail, "微信配置缺失"), nil
}
session, wxErr := wxClient.Code2Session(req.Code)
if wxErr != nil {
l.Errorf("get openid code2session: %v", wxErr)
return outResponse(utils.Fail, "获取openid失败"), nil
}
return okResponse(dao.OpenidResult{
Openid: session.OpenID,
Unionid: session.UnionID,
}), nil
}
@@ -33,6 +33,11 @@ func (s *UserServer) Info(ctx context.Context, in *user.InfoReq) (*user.Response
return l.Info(in)
}
func (s *UserServer) GetOpenid(ctx context.Context, in *user.GetOpenidReq) (*user.Response, error) {
l := logic.NewGetOpenidLogic(ctx, s.svcCtx)
return l.GetOpenid(in)
}
func (s *UserServer) Client(ctx context.Context, in *user.ClientReq) (*user.Response, error) {
l := logic.NewClientLogic(ctx, s.svcCtx)
return l.Client(in)
+7
View File
@@ -15,6 +15,7 @@ import (
type (
ClientReq = user.ClientReq
GetOpenidReq = user.GetOpenidReq
InfoReq = user.InfoReq
InternalCheckCreateData = user.InternalCheckCreateData
InternalCheckCreateReq = user.InternalCheckCreateReq
@@ -41,6 +42,7 @@ type (
User interface {
Login(ctx context.Context, in *LoginReq, opts ...grpc.CallOption) (*Response, error)
Info(ctx context.Context, in *InfoReq, opts ...grpc.CallOption) (*Response, error)
GetOpenid(ctx context.Context, in *GetOpenidReq, opts ...grpc.CallOption) (*Response, error)
Client(ctx context.Context, in *ClientReq, opts ...grpc.CallOption) (*Response, error)
UserItems(ctx context.Context, in *UserItemsReq, opts ...grpc.CallOption) (*Response, error)
UserStatus(ctx context.Context, in *UserStatusReq, opts ...grpc.CallOption) (*Response, error)
@@ -75,6 +77,11 @@ func (m *defaultUser) Info(ctx context.Context, in *InfoReq, opts ...grpc.CallOp
return client.Info(ctx, in, opts...)
}
func (m *defaultUser) GetOpenid(ctx context.Context, in *GetOpenidReq, opts ...grpc.CallOption) (*Response, error) {
client := user.NewUserClient(m.cli.Conn())
return client.GetOpenid(ctx, in, opts...)
}
func (m *defaultUser) Client(ctx context.Context, in *ClientReq, opts ...grpc.CallOption) (*Response, error) {
client := user.NewUserClient(m.cli.Conn())
return client.Client(ctx, in, opts...)
+11
View File
@@ -24,6 +24,17 @@ func (p LoginValidator) GetMessage() validate.ValidatorMessages {
}
}
type GetOpenidValidator struct {
Code string `validate:"required,max=128"`
}
func (p GetOpenidValidator) GetMessage() validate.ValidatorMessages {
return validate.ValidatorMessages{
"Code.required": "Code 不能为空",
"Code.max": "Code 过长",
}
}
type UserItemsValidator struct {
Mobile string
Page int32 `validate:"omitempty,min=1"`