75 lines
2.3 KiB
Go
75 lines
2.3 KiB
Go
package wxpay
|
|
|
|
import (
|
|
"git.rosy.net.cn/baseapi/platformapi/wxpayapi"
|
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
"git.rosy.net.cn/jx-callback/business/partner/pay"
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
"git.rosy.net.cn/jx-callback/globals/api"
|
|
)
|
|
|
|
type PayHandler struct {
|
|
responseHandler pay.ResponseHandler
|
|
}
|
|
|
|
var (
|
|
payHandler *PayHandler
|
|
)
|
|
|
|
func New(responseHandler pay.ResponseHandler) (handler *PayHandler) {
|
|
return &PayHandler{
|
|
responseHandler: responseHandler,
|
|
}
|
|
}
|
|
|
|
func vendorPayType2WxpayType(vendorPayType string) string {
|
|
return vendorPayType
|
|
}
|
|
|
|
func (p *PayHandler) CreatePay(ctx *jxcontext.Context, createParam *pay.CreatePayParam, isOffline bool) (prepayID, qrCodeURL string, err error) {
|
|
param := &wxpayapi.CreateOrderParam{
|
|
OutTradeNo: createParam.PayOrderID,
|
|
Body: createParam.ProductDesc,
|
|
NotifyURL: globals.WxpayNotifyURL,
|
|
SpbillCreateIP: ctx.GetRealRemoteIP(),
|
|
TradeType: vendorPayType2WxpayType(createParam.VendorPayType),
|
|
TotalFee: createParam.TotalFee,
|
|
|
|
TimeStart: wxpayapi.Time2PayTime(createParam.TimeStart),
|
|
TimeExpire: wxpayapi.Time2PayTime(createParam.TimeExpire),
|
|
ProfitSharing: wxpayapi.OptYes,
|
|
}
|
|
if isOffline {
|
|
param.TradeType = wxpayapi.TradeTypeNative
|
|
}
|
|
if authInfo, err := ctx.GetV2AuthInfo(); err == nil && authInfo.GetAuthType() == weixin.AuthTypeMini {
|
|
param.OpenID = authInfo.GetAuthID()
|
|
}
|
|
if result, err := api.WxpayAPI.CreateUnifiedOrder(param); err == nil {
|
|
prepayID = result.PrepayID
|
|
qrCodeURL = result.CodeURL
|
|
}
|
|
return prepayID, qrCodeURL, err
|
|
}
|
|
|
|
func (p *PayHandler) ClosePay(ctx *jxcontext.Context, payOrderID, vendorPayOrderID string) (err error) {
|
|
return api.WxpayAPI.CloseOrder(payOrderID)
|
|
}
|
|
|
|
func (p *PayHandler) RefundPay(ctx *jxcontext.Context, payOrderID, vendorPayOrderID, refundID, reason string, totalFee, refundFee int) (vendorRefundID string, err error) {
|
|
param := &wxpayapi.PayRefundParam{
|
|
OutTradeNo: payOrderID,
|
|
NotifyURL: globals.WxpayNotifyURL,
|
|
OutRefundNo: refundID,
|
|
TotalFee: totalFee,
|
|
RefundFee: refundFee,
|
|
RefundDesc: wxpayapi.CData(reason),
|
|
}
|
|
retVal, err := api.WxpayAPI.PayRefund(param)
|
|
if err == nil {
|
|
vendorRefundID = retVal.RefundID
|
|
}
|
|
return vendorRefundID, err
|
|
}
|