package do import ( "PaymentCenter/app/constants/common" "PaymentCenter/app/constants/errorcode" "PaymentCenter/app/models/paychannelmodel" "PaymentCenter/app/services" "PaymentCenter/app/third/paymentService/payCommon" "PaymentCenter/app/models/ordersmodel" "PaymentCenter/app/third/paymentService" ) type Pay struct { paycheck *PayCheck Order *ordersmodel.Orders PayCode int Url string } 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, Status: common.ORDER_STATUS_WAITPAY, }, ) } func (w *Pay) PayUrl() (url string) { var ( payFunc func(commonPayInfo *paymentService.PayOrderRequest, channel *paychannelmodel.PayChannel) 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) if err != nil { w.PayCode = errorcode.PayChannelExtJsonError return } res := paymentService.PaymentService(*w.paycheck.ctx, *thirdPay) if res.Code == payCommon.PAY_SUCCESS_CODE { w.Order.Status = common.ORDER_STATUS_PAYING code := services.OrderUpdate(w.Order, "status") if code != errorcode.Success { w.PayCode = code } w.Url = res.Result } else { w.PayCode = errorcode.PrePayFail } return }