package pay import ( "context" "strings" "chatappgateway/internal/apperr" commonpb "gitea.haiyihy.com/hy/chatappcommon/proto" ) // Client 定义支付服务 gRPC 客户端能力。 type Client interface { Pay(ctx context.Context, request *commonpb.PayRequest) (*commonpb.PayResponse, error) } // Request 描述客户端发起支付的请求。 type Request struct { OrderNo string `json:"order_no"` UserID string `json:"user_id"` Amount string `json:"amount"` Currency string `json:"currency"` PayMethod string `json:"pay_method"` Subject string `json:"subject"` } // Service 负责支付请求校验和下游支付调用。 type Service struct { client Client } // New 创建支付查询服务。 func New(client Client) *Service { return &Service{client: client} } // Pay 校验支付请求并调用支付服务。 func (s *Service) Pay(ctx context.Context, request Request) (*commonpb.PayResponse, error) { normalized := Request{ OrderNo: strings.TrimSpace(request.OrderNo), UserID: strings.TrimSpace(request.UserID), Amount: strings.TrimSpace(request.Amount), Currency: strings.TrimSpace(request.Currency), PayMethod: strings.TrimSpace(request.PayMethod), Subject: strings.TrimSpace(request.Subject), } if normalized.OrderNo == "" { return nil, apperr.New(400, "bad_request", "order_no is required") } if normalized.UserID == "" { return nil, apperr.New(400, "bad_request", "user_id is required") } if normalized.Amount == "" { return nil, apperr.New(400, "bad_request", "amount is required") } return s.client.Pay(ctx, &commonpb.PayRequest{ OrderNo: normalized.OrderNo, UserId: normalized.UserID, Amount: normalized.Amount, Currency: normalized.Currency, PayMethod: normalized.PayMethod, Subject: normalized.Subject, }) }