feat(payment): 优化支付成功逻辑并添加回调信息
- 在多个支付回调处理中添加"支付成功"的备注信息 - 更新 SolvePaySuccess 函数以接收 cardReturnData 参数 - 优化部分代码结构以提高可读性
This commit is contained in:
1
go.mod
1
go.mod
@@ -13,6 +13,7 @@ require (
|
||||
github.com/duke-git/lancet/v2 v2.3.4
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
github.com/go-stomp/stomp/v3 v3.1.3
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
|
||||
github.com/pkg/profile v1.7.0
|
||||
github.com/rs/xid v1.6.0
|
||||
|
||||
6
go.sum
6
go.sum
@@ -6,8 +6,6 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb h1:glte+Ka6C5efXn/QlEAE/wwNrvE+3mYo/ce69fpvtrE=
|
||||
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
|
||||
github.com/bytedance/sonic v1.12.7 h1:CQU8pxOy9HToxhndH0Kx/S1qU/CuS9GnKYrGioDcU1Q=
|
||||
github.com/bytedance/sonic v1.12.7/go.mod h1:tnbal4mxOMju17EGfknm2XyYcpyCnIROYOEYuemj13I=
|
||||
github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs=
|
||||
github.com/bytedance/sonic v1.12.8/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
|
||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||
@@ -44,6 +42,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
||||
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
|
||||
@@ -115,8 +115,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA=
|
||||
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
|
||||
@@ -34,15 +34,17 @@ func (c *OrderController) OrderUpdate() {
|
||||
solveType := c.GetString("solveType")
|
||||
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
|
||||
orderInfo.Operator = c.GetString("operator")
|
||||
|
||||
flag := false
|
||||
|
||||
if orderInfo.BankOrderId == "" {
|
||||
logs.Error("该订单不存在,bankOrderId=", bankOrderId)
|
||||
} else {
|
||||
switch solveType {
|
||||
case config.SUCCESS:
|
||||
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId)
|
||||
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId, "手动修正至成功")
|
||||
case config.FAIL:
|
||||
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId, "")
|
||||
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId, "手动修正至失败")
|
||||
case config.FREEZE_AMOUNT:
|
||||
// 将这笔订单进行冻结
|
||||
flag = service.SolveOrderFreeze(bankOrderId)
|
||||
|
||||
@@ -22,20 +22,15 @@ type PayForGateway struct {
|
||||
|
||||
// PayFor 接受下游商户的代付请求
|
||||
func (c *PayForGateway) PayFor() {
|
||||
params := make(map[string]any)
|
||||
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
|
||||
params["realname"] = strings.TrimSpace(c.GetString("realname"))
|
||||
params["cardNo"] = strings.TrimSpace(c.GetString("cardNo"))
|
||||
// params["bankCode"] = strings.TrimSpace(c.GetString("bankCode"))
|
||||
params["accType"] = strings.TrimSpace(c.GetString("accType"))
|
||||
// params["province"] = strings.TrimSpace(c.GetString("province"))
|
||||
// params["city"] = strings.TrimSpace(c.GetString("city"))
|
||||
// params["bankAccountAddress"] = strings.TrimSpace(c.GetString("bankAccountAddress"))
|
||||
params["amount"] = strings.TrimSpace(c.GetString("amount"))
|
||||
// params["mobileNo"] = strings.TrimSpace(c.GetString("mobileNo"))
|
||||
params["merchantOrderId"] = strings.TrimSpace(c.GetString("merchantOrderId"))
|
||||
params["sign"] = strings.TrimSpace(c.GetString("sign"))
|
||||
|
||||
params := map[string]any{
|
||||
"merchantKey": strings.TrimSpace(c.GetString("merchantKey")),
|
||||
"realname": strings.TrimSpace(c.GetString("realname")),
|
||||
"cardNo": strings.TrimSpace(c.GetString("cardNo")),
|
||||
"accType": strings.TrimSpace(c.GetString("accType")),
|
||||
"amount": strings.TrimSpace(c.GetString("amount")),
|
||||
"merchantOrderId": strings.TrimSpace(c.GetString("merchantOrderId")),
|
||||
"sign": strings.TrimSpace(c.GetString("sign")),
|
||||
}
|
||||
payForResponse := new(response.PayForResponse)
|
||||
res, msg := checkParams(params)
|
||||
if !res {
|
||||
@@ -50,12 +45,12 @@ func (c *PayForGateway) PayFor() {
|
||||
|
||||
// PayForQuery 代付结果查询,
|
||||
func (c *PayForGateway) PayForQuery() {
|
||||
params := make(map[string]any)
|
||||
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
|
||||
params["timestamp"] = strings.TrimSpace(c.GetString("timestamp"))
|
||||
params["merchantOrderId"] = strings.TrimSpace(c.GetString("merchantOrderId"))
|
||||
params["sign"] = strings.TrimSpace(c.GetString("sign"))
|
||||
|
||||
params := map[string]any{
|
||||
"merchantKey": strings.TrimSpace(c.GetString("merchantKey")),
|
||||
"timestamp": strings.TrimSpace(c.GetString("timestamp")),
|
||||
"merchantOrderId": strings.TrimSpace(c.GetString("merchantOrderId")),
|
||||
"sign": strings.TrimSpace(c.GetString("sign")),
|
||||
}
|
||||
c.Data["json"] = pay_for.PayForResultQuery(params)
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
@@ -106,11 +101,11 @@ func (c *PayForGateway) SolvePayForResult() {
|
||||
|
||||
// Balance 商户查找余额
|
||||
func (c *PayForGateway) Balance() {
|
||||
params := make(map[string]any)
|
||||
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
|
||||
params["timestamp"] = strings.TrimSpace(c.GetString("timestamp"))
|
||||
params["sign"] = strings.TrimSpace(c.GetString("sign"))
|
||||
|
||||
params := map[string]any{
|
||||
"merchantKey": strings.TrimSpace(c.GetString("merchantKey")),
|
||||
"timestamp": strings.TrimSpace(c.GetString("timestamp")),
|
||||
"sign": strings.TrimSpace(c.GetString("sign")),
|
||||
}
|
||||
balanceResponse := new(response.BalanceResponse)
|
||||
res, msg := checkParams(params)
|
||||
if !res {
|
||||
|
||||
@@ -217,7 +217,7 @@ func (c *AppleCardImpl) PayNotify() {
|
||||
orderInfo.BankTransId = params["merchantId"]
|
||||
if params["status"] == "1" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"])
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"], "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -180,7 +180,7 @@ func (c *AppleCardSharkImpl) PayNotify() {
|
||||
orderInfo.BankTransId = params["merchantId"]
|
||||
if params["status"] == "1" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"])
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"], "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -152,7 +152,7 @@ func (c *DaiLiImpl) PayNotify() {
|
||||
logs.Notice("快付回调,该订单还处于等待支付,订单id=", orderNo)
|
||||
} else if tradeStatus == "SUCCESS" {
|
||||
// 订单支付成功,需要搞很多事情 TODO
|
||||
service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, c.GetString("trxNo"))
|
||||
service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, c.GetString("trxNo"), "支付成功")
|
||||
}
|
||||
c.Ctx.WriteString("success")
|
||||
}
|
||||
@@ -163,7 +163,7 @@ func (c *DaiLiImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
|
||||
factAmount := 100.00
|
||||
if tradeStatus == "SUCCESS" {
|
||||
// 调用支付成功的接口,做加款更新操作,需要把实际支付金额传入
|
||||
if !service.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo) {
|
||||
if !service.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo, "支付成功") {
|
||||
return false
|
||||
}
|
||||
} else if tradeStatus == "FAILED" {
|
||||
|
||||
@@ -186,7 +186,7 @@ func (f *FatSixImpl) PayNotify() {
|
||||
logs.Error("金额转换失败", err)
|
||||
f.Ctx.WriteString("fail")
|
||||
}
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, money, resp.Tid)
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, money, resp.Tid, "支付成功")
|
||||
if isOk {
|
||||
f.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
14
internal/entities/supplier/third_party/jd.go
vendored
14
internal/entities/supplier/third_party/jd.go
vendored
@@ -169,21 +169,13 @@ func (c *JDCardImpl) PayNotify() {
|
||||
params := map[string]string{
|
||||
"merchantId": strings.TrimSpace(c.GetString("merchantId")),
|
||||
"amount": strings.TrimSpace(c.GetString("amount")), // 时间戳
|
||||
//"timestamp": strings.TrimSpace(c.GetString("timestamp")),
|
||||
"status": strings.TrimSpace(c.GetString("status")),
|
||||
//"sign": strings.TrimSpace(c.GetString("sign")),
|
||||
"remark": strings.TrimSpace(c.GetString("remark")),
|
||||
"status": strings.TrimSpace(c.GetString("status")),
|
||||
"remark": strings.TrimSpace(c.GetString("remark")),
|
||||
}
|
||||
//tmpSign := utils.TmpEncrypt(attach + params["merchantId"] + params["timestamp"])
|
||||
//if tmpSign != params["sign"] {
|
||||
// logs.Error("【APPLE】回调签名错误,签名=", params["sign"], "计算签名=", tmpSign)
|
||||
// c.Ctx.WriteString("FAIL")
|
||||
// return
|
||||
//}
|
||||
orderInfo.BankTransId = params["merchantId"]
|
||||
if params["status"] == "1" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"])
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"], "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -106,7 +106,7 @@ func (c *KuaiFuImpl) Scan(orderInfo order.OrderInfo, roadInfo road.RoadInfo, mer
|
||||
return scanData
|
||||
}
|
||||
|
||||
// 支付回调
|
||||
// PayNotify 支付回调
|
||||
func (c *KuaiFuImpl) PayNotify() {
|
||||
orderNo := strings.TrimSpace(c.GetString("orderNo"))
|
||||
orderInfo := order.GetOrderByBankOrderId(orderNo)
|
||||
@@ -164,7 +164,7 @@ func (c *KuaiFuImpl) PayNotify() {
|
||||
logs.Notice("快付回调,该订单还处于等待支付,订单id=", orderNo)
|
||||
} else if tradeStatus == "SUCCESS" {
|
||||
// 订单支付成功,需要搞很多事情 TODO
|
||||
service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, c.GetString("trxNo"))
|
||||
service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, c.GetString("trxNo"), "支付成功")
|
||||
}
|
||||
c.Ctx.WriteString("success")
|
||||
}
|
||||
@@ -208,7 +208,7 @@ func (c *KuaiFuImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
|
||||
trxNo := gojson.Json(response).Get("trxNo").Tostring()
|
||||
if tradeStatus == "SUCCESS" {
|
||||
// 调用支付成功的接口,做加款更新操作,需要把实际支付金额传入
|
||||
if !service.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo) {
|
||||
if !service.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo, "支付成功") {
|
||||
return false
|
||||
}
|
||||
} else if tradeStatus == "FAILED" {
|
||||
|
||||
@@ -232,7 +232,7 @@ func (c *MFCardV2Impl) PayNotify() {
|
||||
}
|
||||
} else if params["status"] == "9" && factAmount == orderInfo.FactAmount {
|
||||
// TODO 订单支付成功
|
||||
service.SolvePaySuccess(convertor.ToString(params["order_id"]), factAmount, convertor.ToString(params["order_id"]))
|
||||
service.SolvePaySuccess(convertor.ToString(params["order_id"]), factAmount, convertor.ToString(params["order_id"]), "支付成功")
|
||||
}
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ func (c *SelfThirdImpl) PayNotify() {
|
||||
orderInfo.BankTransId = params["trxNo"].(string)
|
||||
if params["statusCode"] == "01" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["trxNo"].(string))
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["trxNo"].(string), "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -144,7 +144,7 @@ func (c *StarSilenceImpl) PayNotify() {
|
||||
}
|
||||
//判断实付金额是否与订单金额一致
|
||||
if params["code"] == "1" && factAmount == orderInfo.OrderAmount {
|
||||
service.SolvePaySuccess(convertor.ToString(params["supplierOrderId"]), factAmount, "")
|
||||
service.SolvePaySuccess(convertor.ToString(params["supplierOrderId"]), factAmount, "", "支付成功")
|
||||
} else if params["code"] == "1" && factAmount != orderInfo.OrderAmount {
|
||||
service.SolvePayFail(convertor.ToString(params["supplierOrderId"]), "", fmt.Sprintf("实付金额与订单金额不一致,实际金额%.2f,卡面金额:%.2f", factAmount, orderInfo.OrderAmount))
|
||||
} else {
|
||||
|
||||
@@ -187,7 +187,7 @@ func (c *TMAllGameImpl) PayNotify() {
|
||||
logs.Info("【TMALLGAME】回调参数:", params)
|
||||
if params["status"] == "finished" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["orderId"])
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["orderId"], "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -238,7 +238,7 @@ func (c *WalMartImpl) PayNotify() {
|
||||
}
|
||||
orderInfo.BankTransId = response.Data.BizOrderNo
|
||||
if WalMartOrderStatus(response.Data.BindState) == WalMartOrderSuccess {
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, response.Data.BizOrderNo)
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, response.Data.BizOrderNo, "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("success")
|
||||
} else {
|
||||
|
||||
@@ -179,7 +179,7 @@ func (c *WalmartSelfImpl) PayNotify() {
|
||||
orderInfo.BankTransId = params["merchantId"]
|
||||
if params["status"] == "1" {
|
||||
// TODO 订单支付成功
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"])
|
||||
isOk := service.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, params["merchantId"], "支付成功")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -30,7 +30,7 @@ var (
|
||||
)
|
||||
|
||||
// SolvePaySuccess 处理支付成功的加款等各项操作
|
||||
func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string) bool {
|
||||
func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string, cardReturnData string) bool {
|
||||
|
||||
o := orm.NewOrm()
|
||||
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
|
||||
@@ -67,6 +67,7 @@ func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string) bool
|
||||
orderInfo.FactAmount = factAmount
|
||||
orderInfo.Status = config.SUCCESS
|
||||
orderInfo.BankTransId = trxNo
|
||||
orderInfo.CardReturnData = cardReturnData
|
||||
orderInfo.UpdateTime = time.Now()
|
||||
if _, err := txOrm.Update(&orderInfo); err != nil || orderInfo.BankOrderId == "" {
|
||||
logs.Error(fmt.Sprintf("solve pay success, update order info fail: %s, bankOrderId = %s", err, bankOrderId))
|
||||
|
||||
Reference in New Issue
Block a user