From d654777a02883e651a1c2bd6e7b36f10aea4e9d4 Mon Sep 17 00:00:00 2001 From: ziin Date: Fri, 10 Apr 2026 14:30:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor(googleplay):=20=E6=94=AF=E6=8C=81purch?= =?UTF-8?q?aseOptionId=E4=BD=9C=E4=B8=BA=E5=A4=87=E9=80=89=E5=95=86?= =?UTF-8?q?=E5=93=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yolo/keyborad/googleplay/GooglePlayApiClient.java | 3 ++- .../com/yolo/keyborad/googleplay/GooglePlayStateService.java | 5 ++++- .../googleplay/model/GooglePlayPurchaseSnapshot.java | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yolo/keyborad/googleplay/GooglePlayApiClient.java b/src/main/java/com/yolo/keyborad/googleplay/GooglePlayApiClient.java index fc0f838..ea24924 100644 --- a/src/main/java/com/yolo/keyborad/googleplay/GooglePlayApiClient.java +++ b/src/main/java/com/yolo/keyborad/googleplay/GooglePlayApiClient.java @@ -146,7 +146,7 @@ public class GooglePlayApiClient { JsonNode offerDetails = firstLineItem.path("productOfferDetails"); String state = mapOneTimeState(text(root.path("purchaseStateContext"), "purchaseState")); - + String purchaseOptionId = text(offerDetails, "purchaseOptionId"); // 修正:一次性购买的订单号字段名为 "orderId" String googleOrderId = text(root, "orderId"); @@ -156,6 +156,7 @@ public class GooglePlayApiClient { .productId(text(firstLineItem, "productId")) .productType(GooglePlayConstants.PRODUCT_TYPE_ONE_TIME) .purchaseToken(purchaseToken) + .purchaseOptionId(purchaseOptionId) .orderKey(resolveOrderKey(googleOrderId, purchaseToken)) .googleOrderId(googleOrderId) .linkedPurchaseToken(null) diff --git a/src/main/java/com/yolo/keyborad/googleplay/GooglePlayStateService.java b/src/main/java/com/yolo/keyborad/googleplay/GooglePlayStateService.java index ae05137..d62d76f 100644 --- a/src/main/java/com/yolo/keyborad/googleplay/GooglePlayStateService.java +++ b/src/main/java/com/yolo/keyborad/googleplay/GooglePlayStateService.java @@ -32,7 +32,10 @@ public class GooglePlayStateService { @Transactional(rollbackFor = Exception.class) public GooglePlaySyncResult sync(GooglePlaySyncCommand command, GooglePlayPurchaseSnapshot snapshot) { - KeyboardProductItems product = loadProduct(snapshot.getBasePlanId()); + String productId = (snapshot.getBasePlanId() != null) ? + snapshot.getBasePlanId() : + snapshot.getPurchaseOptionId(); + KeyboardProductItems product = loadProduct(productId); GooglePlayOrder order = buildOrder(command, snapshot); GooglePlayPurchaseToken token = buildToken(command, snapshot); // 先保存订单以确保 order.id 已生成,钱包充值等权益分发依赖 order.id 写入交易流水 diff --git a/src/main/java/com/yolo/keyborad/googleplay/model/GooglePlayPurchaseSnapshot.java b/src/main/java/com/yolo/keyborad/googleplay/model/GooglePlayPurchaseSnapshot.java index 2e3b480..c7b55d2 100644 --- a/src/main/java/com/yolo/keyborad/googleplay/model/GooglePlayPurchaseSnapshot.java +++ b/src/main/java/com/yolo/keyborad/googleplay/model/GooglePlayPurchaseSnapshot.java @@ -56,4 +56,6 @@ public class GooglePlayPurchaseSnapshot { private Date lastSyncedAt; private String rawResponse; + + private String purchaseOptionId; }