package do import ( "PaymentCenter/app/constants/errorcode" "PaymentCenter/app/services" "PaymentCenter/app/models/ordersmodel" "PaymentCenter/app/third/paymentService" ) type Pay struct { paycheck *PayCheck Order *ordersmodel.Orders PayCode int } func NewPay(paycheck *PayCheck) *Pay { return &Pay{ paycheck: paycheck, PayCode: errorcode.Success, } } func (w *Pay) CreateOrder() { w.Order, w.PayCode = services.OrderCreate(&ordersmodel.Orders{ MerchantId: w.paycheck.Merchant.Id, PayChannelId: w.paycheck.Channel.Id, AppId: w.paycheck.Channel.Id, OutTreadNo: w.paycheck.WebPayReqs.OutTradeNo, OrderType: w.paycheck.WebPayReqs.OrderType, Amount: w.paycheck.WebPayReqs.Amount, ExtJson: w.paycheck.WebPayReqs.ExtJson, Desc: w.paycheck.WebPayReqs.Desc, }, ) } func (w *Pay) Pay() { var ( payFunc func(commonPayInfo *paymentService.PayOrderRequest, ExtJson string) error ok bool ) thirdPay := &paymentService.PayOrderRequest{ PayChannelId: w.paycheck.WebPayReqs.PayChannelId, OrderId: w.Order.Id, ChannelType: w.paycheck.Channel.ChannelType, Description: w.Order.Desc, Amount: w.Order.Amount, PayerClientIp: w.paycheck.AppCheck.Ip, } if payFunc, ok = PayWayList[w.paycheck.Channel.ChannelType]; !ok { w.PayCode = errorcode.PayChannelNotBuild return } err := payFunc(thirdPay, w.paycheck.Channel.ExtJson) if err != nil { w.PayCode = errorcode.PayChannelExtJsonError return } res := paymentService.PaymentService(*w.paycheck.ctx, *thirdPay) w.PayCode = res.Code return }