Files
jx-callback/business/partner/purchase/jx/localjx/wxpay.go
2019-11-20 15:55:09 +08:00

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
}