<feat>解除pay和paycheck之间的强关联性

This commit is contained in:
Rzy 2024-08-09 10:43:00 +08:00
parent 50ef2fd13a
commit 1630304f3d
3 changed files with 56 additions and 34 deletions

View File

@ -7,24 +7,46 @@ import (
"PaymentCenter/app/models/paychannelmodel" "PaymentCenter/app/models/paychannelmodel"
"PaymentCenter/app/services" "PaymentCenter/app/services"
"PaymentCenter/app/third/paymentService/payCommon" "PaymentCenter/app/third/paymentService/payCommon"
"context"
"PaymentCenter/app/models/ordersmodel" "PaymentCenter/app/models/ordersmodel"
"PaymentCenter/app/third/paymentService" "PaymentCenter/app/third/paymentService"
) )
type Pay struct { type PayParam struct {
Merchant *merchantmodel.Merchant Merchant *merchantmodel.Merchant
Channel *paychannelmodel.PayChannel Channel *paychannelmodel.PayChannel
App_id int64
OutTradeNo string
Amount int
ExtJson string
Desc string
ClientIp string
}
paycheck *PayCheck type Pay struct {
ctx *context.Context
PayParam *PayParam
RelationOrder *ordersmodel.Orders
Order *ordersmodel.Orders Order *ordersmodel.Orders
PayCode int PayCode int
Url string Url string
} }
func NewPay(paycheck *PayCheck) *Pay { func NewPayWithPayCheck(paycheck *PayCheck) *Pay {
return &Pay{ return &Pay{
paycheck: paycheck, ctx: paycheck.ctx,
PayParam: &PayParam{
Merchant: paycheck.Merchant,
Channel: paycheck.Channel,
App_id: paycheck.Reqs.AppId,
OutTradeNo: paycheck.Reqs.OutTradeNo,
Amount: paycheck.Reqs.Amount,
ExtJson: paycheck.Reqs.ExtJson,
Desc: paycheck.Reqs.Desc,
ClientIp: paycheck.AppCheck.Ip,
},
RelationOrder: paycheck.OldOrder,
PayCode: errorcode.Success, PayCode: errorcode.Success,
} }
} }
@ -35,14 +57,14 @@ func (w *Pay) CreateOrder(order_type int) {
return return
} }
w.Order, w.PayCode = services.OrderCreate(&ordersmodel.Orders{ w.Order, w.PayCode = services.OrderCreate(&ordersmodel.Orders{
MerchantId: w.paycheck.Merchant.Id, MerchantId: w.PayParam.Merchant.Id,
PayChannelId: w.paycheck.Channel.Id, PayChannelId: w.PayParam.Channel.Id,
AppId: w.paycheck.Reqs.AppId, AppId: w.PayParam.App_id,
OutTreadNo: w.paycheck.Reqs.OutTradeNo, OutTreadNo: w.PayParam.OutTradeNo,
OrderType: order_type, OrderType: order_type,
Amount: w.paycheck.Reqs.Amount, Amount: w.PayParam.Amount,
ExtJson: w.paycheck.Reqs.ExtJson, ExtJson: w.PayParam.ExtJson,
Desc: w.paycheck.Reqs.Desc, Desc: w.PayParam.Desc,
Status: common.ORDER_STATUS_WAITPAY, Status: common.ORDER_STATUS_WAITPAY,
}, },
) )
@ -54,23 +76,23 @@ func (w *Pay) PayUrl() (url string) {
ok bool ok bool
) )
thirdPay := &paymentService.PayOrderRequest{ thirdPay := &paymentService.PayOrderRequest{
PayChannelId: w.paycheck.Reqs.PayChannelId, PayChannelId: w.PayParam.Channel.Id,
OrderId: w.Order.Id, OrderId: w.Order.Id,
ChannelType: w.paycheck.Channel.ChannelType, ChannelType: w.PayParam.Channel.ChannelType,
Description: w.Order.Desc, Description: w.Order.Desc,
Amount: w.Order.Amount, Amount: w.Order.Amount,
PayerClientIp: w.paycheck.AppCheck.Ip, PayerClientIp: w.PayParam.ClientIp,
} }
if payFunc, ok = PayWayList[w.paycheck.Channel.ChannelType]; !ok { if payFunc, ok = PayWayList[w.PayParam.Channel.ChannelType]; !ok {
w.PayCode = errorcode.PayChannelNotBuild w.PayCode = errorcode.PayChannelNotBuild
return return
} }
err := payFunc(thirdPay, w.paycheck.Channel) err := payFunc(thirdPay, w.PayParam.Channel)
if err != nil { if err != nil {
w.PayCode = errorcode.PayChannelExtJsonError w.PayCode = errorcode.PayChannelExtJsonError
return return
} }
res := paymentService.PaymentService(*w.paycheck.ctx, *thirdPay) res := paymentService.PaymentService(*w.ctx, *thirdPay)
if res.Code == payCommon.PAY_SUCCESS_CODE { if res.Code == payCommon.PAY_SUCCESS_CODE {
w.Order.Status = common.ORDER_STATUS_PAYING w.Order.Status = common.ORDER_STATUS_PAYING
@ -93,21 +115,21 @@ func (w *Pay) Refund() {
) )
thirdPayRefund := &paymentService.OrderRefundRequest{ thirdPayRefund := &paymentService.OrderRefundRequest{
OrderId: w.Order.Id, OrderId: w.Order.Id,
RefundOrderId: w.paycheck.OldOrder.Id, RefundOrderId: w.RelationOrder.Id,
RefundReason: w.paycheck.Reqs.Desc, RefundReason: w.PayParam.Desc,
RefundAmount: int64(w.paycheck.Reqs.Amount), RefundAmount: int64(w.PayParam.Amount),
PayChannel: w.paycheck.Channel.ChannelType, PayChannel: w.PayParam.Channel.ChannelType,
} }
if refundFunc, ok = RefundWayList[w.paycheck.Channel.ChannelType]; !ok { if refundFunc, ok = RefundWayList[w.PayParam.Channel.ChannelType]; !ok {
w.PayCode = errorcode.PayChannelNotBuild w.PayCode = errorcode.PayChannelNotBuild
return return
} }
err := refundFunc(thirdPayRefund, w.paycheck.Channel) err := refundFunc(thirdPayRefund, w.PayParam.Channel)
if err != nil { if err != nil {
w.PayCode = errorcode.PayChannelExtJsonError w.PayCode = errorcode.PayChannelExtJsonError
return return
} }
res := paymentService.OrderRefund(*w.paycheck.ctx, *thirdPayRefund) res := paymentService.OrderRefund(*w.ctx, *thirdPayRefund)
if res.Code == payCommon.PAY_SUCCESS_CODE { if res.Code == payCommon.PAY_SUCCESS_CODE {
w.Order.Status = common.ORDER_STATUS_PAYING w.Order.Status = common.ORDER_STATUS_PAYING
code := services.OrderUpdate(w.Order, "status") code := services.OrderUpdate(w.Order, "status")

View File

@ -104,7 +104,7 @@ func (w *PayCheck) GetOrder() {
w.CheckCode = code w.CheckCode = code
return return
} }
if code == errorcode.OrdersExist { if code == errorcode.Success {
w.OldOrder = order w.OldOrder = order
} }

View File

@ -58,14 +58,14 @@ func ThirdPayRefund(ctx context.Context, refundReq *front.RefundReqs, appCheck *
if check.CheckCode != errorcode.Success { if check.CheckCode != errorcode.Success {
return return
} }
refund = thirdpay.NewPay(check) refund = thirdpay.NewPayWithPayCheck(check)
refund.CreateOrder(common.ORDER_TYPE_REFUND) refund.CreateOrder(common.ORDER_TYPE_REFUND)
refund.Refund() refund.Refund()
return return
} }
func ThirdPay(check *thirdpay.PayCheck) (pay *thirdpay.Pay) { func ThirdPay(check *thirdpay.PayCheck) (pay *thirdpay.Pay) {
pay = thirdpay.NewPay(check) pay = thirdpay.NewPayWithPayCheck(check)
// 创建订单 // 创建订单
if &check.OldOrder != nil { if &check.OldOrder != nil {
pay.CreateOrder(common.ORDER_TYPE_PAY) pay.CreateOrder(common.ORDER_TYPE_PAY)