From fad68b78dc4cc789617d8509a5a0fd86344726e7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:08:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 15 ++++++++++++++- src/server/game/Trigger.go | 8 +++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 990c4a94..bf403ffb 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -23,6 +23,7 @@ import ( proto "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" + "strings" ) // 处理玩家异步请求 @@ -420,6 +421,11 @@ func GoogleVerify(p *Player, OrderSn, ProduceId, Token string) (*db.SqlChargeOrd if err != nil { return nil, err } + // 将输出转换为字符串 + outputStr := string(output) + + // 替换单引号为双引号 + outputStr = strings.Replace(outputStr, "'", "\"", -1) type VerifyData struct { PurchaseState int `json:"purchaseState"` DeveloperPayload string `json:"developerPayload"` @@ -427,7 +433,14 @@ func GoogleVerify(p *Player, OrderSn, ProduceId, Token string) (*db.SqlChargeOrd ConsumptionState int `json:"consumptionState"` } r := &VerifyData{} - json.Unmarshal(output, r) + err = json.Unmarshal([]byte(outputStr), &r) + if err != nil { + log.Debug("output %s", string(output)) + return nil, err + } + if r.DeveloperPayload != OrderSn { + return nil, fmt.Errorf("订单号不匹配") + } if r.ConsumptionState != 1 { return nil, fmt.Errorf("订单未消费") } diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index ac0f2c48..1cc4d123 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -25,6 +25,9 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { n := 0 for { n++ + if n > 5 { + break + } OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token) if err != nil { log.Debug("GoogleVerify err:%v", err) @@ -38,10 +41,9 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { if OrderData.PayStatus == MergeConst.ORDER_STATUS_PAY { break } - if n > 5 { - break - } + } + log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId) player.lock.Lock() defer player.lock.Unlock() Charge(player, int(OrderData.ProductId))