From 79723bd9455d8e2a3d641dd9995870af481705e1 Mon Sep 17 00:00:00 2001 From: Rzy <465386466@qq.com> Date: Mon, 5 Aug 2024 17:07:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/constants/errorcode/error_code.go | 8 ++++++++ app/data/orders.go | 9 +++++++++ app/data/pay_channel.go | 9 +++++++++ app/services/order.go | 26 ++++++++++++++++++++++++++ app/services/pay_channel.go | 25 +++++++++++++++++++++++++ app/services/request_log.go | 14 ++++++++++++++ app/services/web_pay.go | 25 +++++++++++++++++++++++-- 7 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 app/services/request_log.go diff --git a/app/constants/errorcode/error_code.go b/app/constants/errorcode/error_code.go index 43a5715..06a5b5a 100644 --- a/app/constants/errorcode/error_code.go +++ b/app/constants/errorcode/error_code.go @@ -49,6 +49,12 @@ const ( //渠道 PayChannelNotFound = 1300 + + //订单 + OrdersNotFound = 1300 + + //网页支付 + RequestLogErrors = 1400 ) var MsgEN = map[int]string{ @@ -89,6 +95,8 @@ var MsgZH = map[int]string{ AppSM4EncryptFail: "sm4加密失败", PayChannelNotFound: "支付方式不存在", + + RequestLogErrors: "请求日志错误", } var MsgMap map[string]map[int]string = map[string]map[int]string{"en": MsgZH} diff --git a/app/data/orders.go b/app/data/orders.go index 9bc6c7e..eda2d8d 100644 --- a/app/data/orders.go +++ b/app/data/orders.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/ordersmodel" + "database/sql" "xorm.io/builder" "xorm.io/xorm" ) @@ -59,3 +60,11 @@ func (m *OrderRepo) OrdersLeftPayChannelList(conn builder.Cond, pageFilter entit repo = repo.Join("left", "pay_channel", "pay_channel.id = orders.pay_id") return repo.Find(orderList) } + +func (m *OrderRepo) OrderFindOne(order *ordersmodel.Orders, conn builder.Cond, columns ...string) (*ordersmodel.Orders, error) { + has, err := m.repo.Where(conn).Get(order) + if !has { + return nil, sql.ErrNoRows + } + return order, err +} diff --git a/app/data/pay_channel.go b/app/data/pay_channel.go index 8647765..b6438c8 100644 --- a/app/data/pay_channel.go +++ b/app/data/pay_channel.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/paychannelmodel" + "database/sql" "xorm.io/builder" "xorm.io/xorm" ) @@ -41,3 +42,11 @@ func (m *PayChannelRepo) PayChannelUpdate(payChannel *paychannelmodel.PayChannel func (m *PayChannelRepo) PayChannelGet(payChannel *paychannelmodel.PayChannel, conn builder.Cond) (bool, error) { return m.repo.Where(conn).Get(payChannel) } + +func (m *PayChannelRepo) PayChannelFindOne(payChannel *paychannelmodel.PayChannel, conn builder.Cond, columns ...string) (*paychannelmodel.PayChannel, error) { + has, err := m.repo.Where(conn).Get(payChannel) + if !has { + return nil, sql.ErrNoRows + } + return payChannel, err +} diff --git a/app/services/order.go b/app/services/order.go index c653105..c02d463 100644 --- a/app/services/order.go +++ b/app/services/order.go @@ -1,12 +1,15 @@ package services import ( + "PaymentCenter/app/constants/common" + "PaymentCenter/app/constants/errorcode" "PaymentCenter/app/data" "PaymentCenter/app/http/entities/backend" "PaymentCenter/app/models/orderrequestlogmodel" "PaymentCenter/app/models/ordersmodel" "PaymentCenter/app/models/orderthirdpaylogmodel" "PaymentCenter/app/models/paychannelmodel" + "database/sql" "xorm.io/builder" ) @@ -72,3 +75,26 @@ func OrderLogsList(req backend.OrderLogsListRequest) (requestLog []orderrequestl return orderLogList, thirdLogList, code } + +func OrderFindOne(order *ordersmodel.Orders, conn builder.Cond, col ...string) (merchantInfo *ordersmodel.Orders, code int) { + repo := data.NewOrderRepo(ordersmodel.GetInstance().GetDb()) + // 拼接查询条件 + orderInfo, err := repo.OrderFindOne(order, conn, col...) + if err != nil { + if err == sql.ErrNoRows { + return nil, errorcode.OrdersNotFound + } + return nil, errorcode.SystemError + } + return orderInfo, errorcode.Success +} + +func HadSameValueOrder(order *ordersmodel.Orders) (exist bool, code int) { + conn := builder.NewCond() + conn = conn.And(builder.Neq{"Status": common.ORDER_STATUS_CLOSE}) + _, code = OrderFindOne(order, conn) + if code != errorcode.OrdersNotFound { + return false, errorcode.Success + } + return true, code +} diff --git a/app/services/pay_channel.go b/app/services/pay_channel.go index 6cfe4f6..7d0a4c8 100644 --- a/app/services/pay_channel.go +++ b/app/services/pay_channel.go @@ -7,6 +7,7 @@ import ( "PaymentCenter/app/http/entities/backend" "PaymentCenter/app/models/merchantmodel" "PaymentCenter/app/models/paychannelmodel" + "database/sql" "xorm.io/builder" ) @@ -92,3 +93,27 @@ func PayChannelGet(payChannel *paychannelmodel.PayChannel) (code int) { code = errorcode.Success return } + +func PayChannelFindOne(channel *paychannelmodel.PayChannel, conn builder.Cond, col ...string) (merchantInfo *paychannelmodel.PayChannel, code int) { + repo := data.NewPayChannelRepo(paychannelmodel.GetInstance().GetDb()) + // 拼接查询条件 + channelInfo, err := repo.PayChannelFindOne(channel, conn, col...) + if err != nil { + if err == sql.ErrNoRows { + return nil, errorcode.MerchantNotFound + } + return nil, errorcode.SystemError + } + return channelInfo, errorcode.Success +} + +func GetAndCheckPayChannel(channel *paychannelmodel.PayChannel, conn builder.Cond, col ...string) (code int) { + merchantInfo, code := PayChannelFindOne(channel, conn, col...) + if code != errorcode.Success { + return code + } + if merchantInfo.DeleteTime.Location() != nil { + return errorcode.PayChannelNotFound + } + return +} diff --git a/app/services/request_log.go b/app/services/request_log.go new file mode 100644 index 0000000..8f3f122 --- /dev/null +++ b/app/services/request_log.go @@ -0,0 +1,14 @@ +package services + +import ( + "PaymentCenter/app/data" + "PaymentCenter/app/models/orderrequestlogmodel" +) + +func RequestLogCreate(log *orderrequestlogmodel.OrderRequestLog) (code int) { + db := orderrequestlogmodel.GetInstance().GetDb() + repo := data.NewOrderRequestLogRepo(db) + _, err := repo.OrderRequestLogInsertOne(log) + code = handErr(err) + return +} diff --git a/app/services/web_pay.go b/app/services/web_pay.go index ab1c9d7..6fe8660 100644 --- a/app/services/web_pay.go +++ b/app/services/web_pay.go @@ -5,6 +5,10 @@ import ( "PaymentCenter/app/data" "PaymentCenter/app/http/entities/front" "PaymentCenter/app/models/merchantmodel" + "PaymentCenter/app/models/orderrequestlogmodel" + "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/models/paychannelmodel" + "github.com/bytedance/sonic" ) type WebPay struct { @@ -29,13 +33,30 @@ func NewWebPay(resp *front.PayWebReqs, appCheck *AppCheck) *WebPay { } func (w *WebPay) AddPayLog() { - w.PayCode = GetAndCheckMerchant(&merchantmodel.Merchant{Id: w.AppCheck.App.MerchantId}, nil) + requestJson, err := sonic.Marshal(w.WebPayReqs) + if err != nil { + w.PayCode = errorcode.RequestLogErrors + return + } + code := RequestLogCreate(&orderrequestlogmodel.OrderRequestLog{ + IpAddress: w.AppCheck.Ip, + MerchantRequest: string(requestJson), + }) + w.PayCode = code + return } func (w *WebPay) CheckMerchant() { - w.PayCode = GetAndCheckMerchant(&merchantmodel.Merchant{Id: w.AppCheck.App.MerchantId}, nil) + w.PayCode = GetAndCheckPayChannel(&paychannelmodel.PayChannel{Id: w.WebPayReqs.PayChannelId}, nil) } func (w *WebPay) CheckPayChannel() { w.PayCode = GetAndCheckMerchant(&merchantmodel.Merchant{Id: w.AppCheck.App.MerchantId}, nil) } + +func (w *WebPay) CheckOrder() { + exist, code := HadSameValueOrder(&ordersmodel.Orders{OutTreadNo: w.WebPayReqs.OutTradeNo}) + if exist { + w.PayCode = code + } +}