diff --git a/business/partner/purchase/jx/localjx/tonglianpay.go b/business/partner/purchase/jx/localjx/tonglianpay.go index 9a308cf3a..462ddf57e 100644 --- a/business/partner/purchase/jx/localjx/tonglianpay.go +++ b/business/partner/purchase/jx/localjx/tonglianpay.go @@ -12,29 +12,17 @@ import ( "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/platformapi/tonglianpayapi" - "git.rosy.net.cn/baseapi/platformapi/wxpayapi" "git.rosy.net.cn/baseapi/utils" "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/model" + "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals/api" ) func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayType string) (orderPay *model.OrderPay, err error) { payCreatedAt := time.Now() - // param := &wxpayapi.CreateOrderParam{ - // OutTradeNo: utils.Int64ToStr(GenPayOrderID(order)), - // Body: getOrderBrief(order), - // NotifyURL: globals.TLPayNotifyURL, - // SpbillCreateIP: ctx.GetRealRemoteIP(), - // TradeType: vendorPayType2WxpayType(vendorPayType), - // TotalFee: int(order.ActualPayPrice), - - // TimeStart: wxpayapi.Time2PayTime(payCreatedAt), - // // TimeExpire: wxpayapi.Time2PayTime(payCreatedAt.Add(PayWaitingTime)), - // ProfitSharing: wxpayapi.OptYes, - // } param := &tonglianpayapi.CreateUnitorderOrderParam{ Trxamt: int(order.ActualPayPrice), NotifyUrl: globals.TLPayNotifyURL, @@ -61,10 +49,11 @@ func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp CodeURL: utils.LimitUTF8StringLen(result.PayInfo, 3200), TotalFee: int(order.ActualPayPrice), } - plainText, err := RSADecrypt([]byte(result2.PaySign)) + plainText, err2 := RSADecrypt([]byte(result2.PaySign)) result2.PaySign = string(plainText) - str, err := json.Marshal(result2) + str, err2 := json.Marshal(result2) result.PayInfo = string(str) + err = err2 } return orderPay, err } @@ -92,13 +81,70 @@ func RSADecrypt(pub []byte) (plainText []byte, err error) { return plainText, err } -func OnTLPayCallback(msg *wxpayapi.CallbackMsg) (err error) { - globals.SugarLogger.Debugf("OnTLPayCallback msg:%s", utils.Format4Output(msg, true)) - switch msg.MsgType { - case wxpayapi.MsgTypePay: - err = onWxpayFinished(msg.Data.(*wxpayapi.PayResultMsg)) - case wxpayapi.MsgTypeRefund: - err = onWxpayRefund(msg.Data.(*wxpayapi.RefundResultMsg)) +func OnTLPayCallback(call *tonglianpayapi.CallBackResult) (err error) { + globals.SugarLogger.Debugf("OnTLPayCallback msg:%s", utils.Format4Output(call, true)) + switch call.TrxCode { + case tonglianpayapi.MsgTypePay: + err = onTLpayFinished(call) + case tonglianpayapi.MsgTypeRefund: + err = onTLpayRefund(call) } return err } + +func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) { + orderPay := &model.OrderPay{ + PayOrderID: call.CusorderID, + PayType: model.PayTypeTL, + } + orderPay.DeletedAt = utils.DefaultTimeValue + db := dao.GetDB() + if err = dao.GetEntity(db, orderPay, "PayOrderID", "PayType", "DeletedAt"); err == nil { + orderPay.PayFinishedAt = utils.Time2Pointer(utils.Str2Time(call.PayTime)) + orderPay.TransactionID = call.ChnlTrxID + orderPay.OriginalData = utils.Format4Output(call, true) + if call.TrxStatus == tonglianpayapi.TrxStatusSuccess { + orderPay.Status = model.PayStatusYes + } else { + orderPay.Status = model.PayStatusFailed + } + dao.UpdateEntity(db, orderPay) + if call.TrxStatus == tonglianpayapi.TrxStatusSuccess { + err = OnPayFinished(orderPay) + } + } else { + globals.SugarLogger.Debugf("onTLpayFinished msg:%s, err:%v", utils.Format4Output(call, true), err) + } + return err +} + +func onTLpayRefund(call *tonglianpayapi.CallBackResult) (err error) { + // orderPayRefund := &model.OrderPayRefund{ + // RefundID: call.CusorderID, + // } + // db := dao.GetDB() + // if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil { + // if msg.ResultCode == wxpayapi.ResponseCodeSuccess { + // orderPayRefund.Status = model.RefundStatusYes + // } else { + // orderPayRefund.Status = model.RefundStatusFailed + // } + // orderPayRefund.OriginalData = utils.Format4Output(msg, true) + // dao.UpdateEntity(db, orderPayRefund) + // } else if dao.IsNoRowsError(err) { + // globals.SugarLogger.Warnf("收到异常的退款事件, msg:%s", utils.Format4Output(msg, true)) + // } + + // orderPay := &model.OrderPay{ + // VendorOrderID: orderPayRefund.VendorOrderID, + // VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(orderPayRefund.VendorOrderID), + // PayType: model.PayTypeWX, + // Status: model.PayStatusYes, + // } + // orderPay.DeletedAt = utils.DefaultTimeValue + // if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "Status", "DeletedAt"); err == nil { + // orderPay.Status = model.PayStatusRefund + // dao.UpdateEntity(db, orderPay) + // } + return err +} diff --git a/conf/app.conf b/conf/app.conf index fce62d3ba..6108f6c7d 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -59,7 +59,7 @@ wxpayNotifyURL = "http://callback.test.jxc4.com/wxpay/msg/" tonglianPayAppID = "00183083" tonglianPayKey = "18048531223" tonglianPayCusID = "56065105499TVAH" -tonglianPayNotifyURL = "http://callback.test.jxc4.com/tonglian/msg/" +tonglianPayNotifyURL = "http://callback.jxc4.com/tonglian/msg/" backstageHost = "http://www.jxc4.com" wxBackstageHost = "http://wx.jxc4.com" diff --git a/controllers/tonglian_callback.go b/controllers/tonglian_callback.go index 82ea6519b..95ad531ad 100644 --- a/controllers/tonglian_callback.go +++ b/controllers/tonglian_callback.go @@ -3,6 +3,12 @@ package controllers import ( "net/http" + "git.rosy.net.cn/jx-callback/globals/api" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" + "git.rosy.net.cn/jx-callback/globals" + "github.com/astaxie/beego" ) @@ -12,23 +18,13 @@ type TongLianController struct { func (c *TongLianController) Msg() { if c.Ctx.Input.Method() == http.MethodPost { - // msg, callbackResponse := api.TLpayAPI.GetCallbackMsg(c.Ctx.Request) - // globals.SugarLogger.Debugf("tonglianapi callback msg:%s, callbackResponse:%s, %t", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true), callbackResponse == nil) - // var err error - // if callbackResponse == nil { - // if msg.MsgType == wxpayapi.MsgTypeUnkown { - // err = fmt.Errorf("未知的通联宝支付回调类型:%d", msg.MsgType) - // } else { - // err = localjx.OnTLPayCallback(msg) - // } - // } - // if callbackResponse == nil { - // callbackResponse = wxpayapi.SuccessResponse - // } else if err != nil { - // callbackResponse = wxpayapi.Err2CallbackResponse(err, "") - // } - // c.Data["json"] = callbackResponse - // c.ServeJSON() + call, err := api.TLpayAPI.GetCallbackMsg(c.Ctx.Request) + globals.SugarLogger.Debugf("tonglianapi callback callbackResponse:%s", utils.Format4Output(call, true)) + if err == nil { + err = localjx.OnTLPayCallback(call) + } + c.Data["json"] = call + c.ServeJSON() } else { c.Abort("404") }