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
+6 -5
View File
@@ -78,12 +78,13 @@ func (l *PayLogic) Pay(in *payment.PayReq) (*payment.Response, error) {
switch channelCode {
case pkgpay.ChannelWechat:
openid, oErr := loadOpenID(l.ctx, l.svcCtx.UserSvcName, loginUser.ID)
if oErr != nil || openid == utils.StringEmpty {
l.Errorf("pay openid: %v", oErr)
return outResponse(utils.Fail, "未绑定微信openid"), nil
if client == pkgpay.ClientApp {
break
}
prepayReq.OpenID = openid
if in.Openid == utils.StringEmpty {
return outResponse(utils.ErrorParams, "openid不能为空"), nil
}
prepayReq.OpenID = in.Openid
case pkgpay.ChannelAlipay, pkgpay.ChannelBank:
return outResponse(utils.Fail, "支付渠道暂未开通"), nil
}
@@ -1,35 +0,0 @@
package logic
import (
"context"
"fmt"
"lone-services/pkg/utils"
userpb "lone-services/rpc/user/pb"
"lone-services/services/payment/internal/svc"
)
func loadOpenID(ctx context.Context, userSvcName string, userID int64) (string, error) {
if userSvcName == utils.StringEmpty {
return utils.StringEmpty, fmt.Errorf("user service not configured")
}
if userID < utils.NumberOne {
return utils.StringEmpty, fmt.Errorf("invalid user id")
}
cli, err := svc.GetRpcClient(userSvcName)
if err != nil {
return utils.StringEmpty, err
}
info, err := userpb.NewUserClient(cli.Conn()).InternalGetUserInfo(ctx, &userpb.InternalGetUserInfoReq{
UserId: userID,
CredentialType: "openid",
})
if err != nil {
return utils.StringEmpty, err
}
if info == nil || info.Identifier == utils.StringEmpty {
return utils.StringEmpty, fmt.Errorf("openid credential not found")
}
return info.Identifier, nil
}
@@ -7,7 +7,7 @@ package server
import (
"context"
"lone-services/rpc/payment/pb"
payment "lone-services/rpc/payment/pb"
"lone-services/services/payment/internal/logic"
"lone-services/services/payment/internal/svc"
)
@@ -23,31 +23,26 @@ func NewPaymentServer(svcCtx *svc.ServiceContext) *PaymentServer {
}
}
// 发起支付
func (s *PaymentServer) Pay(ctx context.Context, in *payment.PayReq) (*payment.Response, error) {
l := logic.NewPayLogic(ctx, s.svcCtx)
return l.Pay(in)
}
// 查询支付状态
func (s *PaymentServer) Query(ctx context.Context, in *payment.QueryReq) (*payment.Response, error) {
l := logic.NewQueryLogic(ctx, s.svcCtx)
return l.Query(in)
}
// 关闭支付
func (s *PaymentServer) Close(ctx context.Context, in *payment.CloseReq) (*payment.Response, error) {
l := logic.NewCloseLogic(ctx, s.svcCtx)
return l.Close(in)
}
// 退款
func (s *PaymentServer) Refund(ctx context.Context, in *payment.RefundReq) (*payment.Response, error) {
l := logic.NewRefundLogic(ctx, s.svcCtx)
return l.Refund(in)
}
// 支付回调(由 BFF/网关转发原始 body + headers)
func (s *PaymentServer) Notify(ctx context.Context, in *payment.NotifyReq) (*payment.Response, error) {
l := logic.NewNotifyLogic(ctx, s.svcCtx)
return l.Notify(in)
-10
View File
@@ -22,15 +22,10 @@ type (
Response = payment.Response
Payment interface {
// 发起支付
Pay(ctx context.Context, in *PayReq, opts ...grpc.CallOption) (*Response, error)
// 查询支付状态
Query(ctx context.Context, in *QueryReq, opts ...grpc.CallOption) (*Response, error)
// 关闭支付
Close(ctx context.Context, in *CloseReq, opts ...grpc.CallOption) (*Response, error)
// 退款
Refund(ctx context.Context, in *RefundReq, opts ...grpc.CallOption) (*Response, error)
// 支付回调(由 BFF/网关转发原始 body + headers)
Notify(ctx context.Context, in *NotifyReq, opts ...grpc.CallOption) (*Response, error)
}
@@ -45,31 +40,26 @@ func NewPayment(cli zrpc.Client) Payment {
}
}
// 发起支付
func (m *defaultPayment) Pay(ctx context.Context, in *PayReq, opts ...grpc.CallOption) (*Response, error) {
client := payment.NewPaymentClient(m.cli.Conn())
return client.Pay(ctx, in, opts...)
}
// 查询支付状态
func (m *defaultPayment) Query(ctx context.Context, in *QueryReq, opts ...grpc.CallOption) (*Response, error) {
client := payment.NewPaymentClient(m.cli.Conn())
return client.Query(ctx, in, opts...)
}
// 关闭支付
func (m *defaultPayment) Close(ctx context.Context, in *CloseReq, opts ...grpc.CallOption) (*Response, error) {
client := payment.NewPaymentClient(m.cli.Conn())
return client.Close(ctx, in, opts...)
}
// 退款
func (m *defaultPayment) Refund(ctx context.Context, in *RefundReq, opts ...grpc.CallOption) (*Response, error) {
client := payment.NewPaymentClient(m.cli.Conn())
return client.Refund(ctx, in, opts...)
}
// 支付回调(由 BFF/网关转发原始 body + headers)
func (m *defaultPayment) Notify(ctx context.Context, in *NotifyReq, opts ...grpc.CallOption) (*Response, error) {
client := payment.NewPaymentClient(m.cli.Conn())
return client.Notify(ctx, in, opts...)