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 7d36f044..0d5a38be 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -5,6 +5,7 @@ import ( "server/conf" "server/db" "server/msg" + "server/pkg/github.com/name5566/leaf/log" "time" ) @@ -21,9 +22,15 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { } OrderData := &db.SqlChargeOrderStruct{} var err error + 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) time.Sleep(1 * time.Second) continue } @@ -34,7 +41,12 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { if OrderData.PayStatus == MergeConst.ORDER_STATUS_PAY { break } + } + if OrderData == nil { + return + } + 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)) @@ -53,4 +65,5 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { "PayType": OrderData.PayType, } player.Kafka("pay", orderDataMap) + player.SendClientRes() }