PaymentCenter/app/services/thirdpay/do/pay.go

67 lines
1.7 KiB
Go

package do
import (
"PaymentCenter/app/constants/common"
"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,
Status: common.ORDER_STATUS_WAITPAY,
},
)
}
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)
// payCommon.PAY_SUCCESS_CODE
w.PayCode = res.Code
return
}