82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package do
|
|
|
|
import (
|
|
"PaymentCenter/app/constants/common"
|
|
"PaymentCenter/app/constants/errorcode"
|
|
"PaymentCenter/app/services"
|
|
"xorm.io/builder"
|
|
|
|
"PaymentCenter/app/http/entities/front"
|
|
"PaymentCenter/app/models/merchantmodel"
|
|
"PaymentCenter/app/models/orderrequestlogmodel"
|
|
"PaymentCenter/app/models/ordersmodel"
|
|
"PaymentCenter/app/models/paychannelmodel"
|
|
"context"
|
|
)
|
|
|
|
type PayCheck struct {
|
|
ctx *context.Context
|
|
WebPayReqs *front.PayReqs
|
|
AppCheck *services.AppCheck
|
|
RequestLog *orderrequestlogmodel.OrderRequestLog
|
|
Channel *paychannelmodel.PayChannel
|
|
Merchant *merchantmodel.Merchant
|
|
OldOrder *ordersmodel.Orders
|
|
CheckCode int
|
|
}
|
|
|
|
func NewPayCheck(ctx *context.Context, reqs *front.PayReqs, appCheck *services.AppCheck, ip string) *PayCheck {
|
|
if appCheck == nil {
|
|
appCheck = services.GetAppCheck(reqs.AppId, ip)
|
|
}
|
|
return &PayCheck{
|
|
ctx: ctx,
|
|
WebPayReqs: reqs,
|
|
AppCheck: appCheck,
|
|
CheckCode: appCheck.Code,
|
|
}
|
|
}
|
|
|
|
func (w *PayCheck) CheckForm() {
|
|
if _, ok := common.OrderTypeList[w.WebPayReqs.OrderType]; !ok { //判断是否是支持的支付渠道
|
|
w.CheckCode = errorcode.PayChannelNotFound
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
func (w *PayCheck) CheckPayChannel() {
|
|
conn := builder.NewCond()
|
|
conn = conn.And(builder.Eq{"id": w.WebPayReqs.PayChannelId})
|
|
w.Channel, w.CheckCode = services.GetAndCheckPayChannel(&paychannelmodel.PayChannel{}, conn)
|
|
}
|
|
|
|
func (w *PayCheck) CheckMerchant() {
|
|
conn := builder.NewCond()
|
|
conn = conn.And(builder.Eq{"id": w.AppCheck.App.MerchantId})
|
|
w.Merchant, w.CheckCode = services.GetAndCheckMerchant(&merchantmodel.Merchant{}, conn)
|
|
}
|
|
|
|
func (w *PayCheck) CheckOrder() {
|
|
cond := builder.NewCond()
|
|
cond = cond.And(builder.Eq{"out_tread_no": w.WebPayReqs.OutTradeNo}, builder.Eq{"app_id": w.AppCheck.AppId})
|
|
order, code := services.OrderFindOne(&ordersmodel.Orders{}, cond)
|
|
if code == errorcode.SystemError {
|
|
w.CheckCode = code
|
|
return
|
|
}
|
|
if code == errorcode.OrdersExist {
|
|
w.OldOrder = order
|
|
switch order.Status {
|
|
case common.ORDER_STATUS_CLOSE:
|
|
w.CheckCode = errorcode.OrderClosed
|
|
case common.ORDER_STATUS_FAILED:
|
|
w.CheckCode = errorcode.OrderFailed
|
|
case common.ORDER_STATUS_PAYED:
|
|
w.CheckCode = errorcode.OrderPayed
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|