71 lines
2.2 KiB
Go
71 lines
2.2 KiB
Go
package localjx
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/wxpay"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
"git.rosy.net.cn/jx-callback/business/model"
|
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
"git.rosy.net.cn/jx-callback/globals/api"
|
|
)
|
|
|
|
func vendorPayType2WxpayType(vendorPayType string) string {
|
|
return vendorPayType
|
|
}
|
|
|
|
func pay4OrderByWX(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayType string) (orderPay *model.OrderPay, err error) {
|
|
payCreatedAt := time.Now()
|
|
param := &wxpay.CreateOrderParam{
|
|
Body: "",
|
|
NotifyURL: "http://callback.test.jxc4.com/wxpay/msg/",
|
|
OutTradeNo: order.VendorOrderID,
|
|
SpbillCreateIP: ctx.GetRealRemoteIP(),
|
|
TradeType: vendorPayType2WxpayType(vendorPayType),
|
|
TotalFee: int(order.ActualPayPrice),
|
|
|
|
TimeStart: wxpay.Time2PayTime(payCreatedAt),
|
|
// TimeExpire: wxpay.Time2PayTime(payCreatedAt.Add(PayWaitingTime)),
|
|
}
|
|
result, err := api.WxpayAPI.CreateUnifiedOrder(param)
|
|
if err == nil {
|
|
orderPay = &model.OrderPay{
|
|
VendorOrderID: order.VendorOrderID,
|
|
VendorID: order.VendorID,
|
|
PayType: model.PayTypeWX,
|
|
VendorPayType: vendorPayType,
|
|
Status: 0,
|
|
PayCreatedAt: payCreatedAt,
|
|
PrepayID: result.PrepayID,
|
|
CodeURL: result.CodeURL,
|
|
}
|
|
dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName())
|
|
err = dao.CreateEntity(dao.GetDB(), orderPay)
|
|
}
|
|
return orderPay, err
|
|
}
|
|
|
|
func OnWxPayCallback(msg *wxpay.CallbackMsg) (err error) {
|
|
return err
|
|
}
|
|
|
|
func onWxpayFinished(msg *wxpay.PayResultMsg) (err error) {
|
|
orderPay := &model.OrderPay{
|
|
VendorOrderID: msg.OutTradeNo,
|
|
VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(msg.OutTradeNo),
|
|
PayType: model.PayTypeWX,
|
|
}
|
|
orderPay.DeletedAt = utils.DefaultTimeValue
|
|
db := dao.GetDB()
|
|
if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "DeletedAt"); err == nil {
|
|
orderPay.VendorPayType = msg.TradeType
|
|
orderPay.PayFinishedAt = utils.Time2Pointer(wxpay.PayTime2Time(msg.TimeEnd))
|
|
orderPay.Status = model.PayStatusYes
|
|
dao.UpdateEntity(db, orderPay)
|
|
err = OnPayFinished(orderPay)
|
|
}
|
|
return err
|
|
}
|