Переглянути джерело

167083887153913800138000 套餐购买特殊处理

linhaohong 8 місяців тому
батько
коміт
d9737999d2

+ 10 - 17
Controller/InAppPurchaseController.py

@@ -8,7 +8,7 @@ import threading
 
 import requests
 from appstoreserverlibrary.models.Environment import Environment
-from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion
+from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion, APIException
 from appstoreserverlibrary.models.AccountTenure import AccountTenure
 from appstoreserverlibrary.models.ConsumptionRequest import ConsumptionRequest
 from appstoreserverlibrary.models.ConsumptionStatus import ConsumptionStatus
@@ -153,22 +153,15 @@ class InAppPurchaseView(View):
                                        access_result="SUCCESS")
 
             # 查询交易信息
-            transaction_info = ""
-            attempts = 0
-            while attempts < 6:
-                try:
-                    transaction_info = client.get_transaction_info(transaction_id)
-                    break
-                except ConnectionError as err:
-                    attempts += 1
-                    if attempts == 5:
-                        OrderPayLog.objects.create(order_id=order_id, order_no=transaction_id,
-                                                   business_name=f"{order_id}获取transactionInfo超时",
-                                                   created_time=int(time.time()), updated_time=int(time.time()),
-                                                   access_result="ERROR")
-                        return response.json(5)
-                    logger.info(
-                        f"订单orderId:{order_id}, transaction_id:{transaction_id}, 第{attempts}次获取支付信息超时")
+            try:
+                transaction_info = client.get_transaction_info(transaction_id)
+            except APIException:
+                in_app_purchase = InAppPurchase(bundle_id=bundle_id, user_id=user_id)
+                # AppStoreServerAPIClient 用于查询交易信息
+                client = in_app_purchase.client
+                # SignedDataVerifier 用于解析查询到的交易信息
+                signed_data_verifier = in_app_purchase.verifier
+                transaction_info = client.get_transaction_info(transaction_id)
 
             signed_transaction_info = transaction_info.signedTransactionInfo
             # 解析交易信息

+ 7 - 4
Object/AppleInAppPurchaseSubscriptionObject.py

@@ -14,7 +14,7 @@ ENV = Environment.SANDBOX if CONFIG_INFO == CONFIG_TEST else Environment.PRODUCT
 
 
 class InAppConfig:
-    def __init__(self, bundle_id: str):
+    def __init__(self, bundle_id: str, user_id=""):
         """
        初始化 AppConfig,加载与指定 bundle_id 对应的配置。
        :param bundle_id: 应用的 bundle ID,用于检索相关配置。
@@ -27,16 +27,19 @@ class InAppConfig:
         self.key_filename = config['key_filename']
         self.cert_names = config['cert_names']
         self.app_apple_id = config.get("app_apple_id")
-        self.environment = ENV
+        if user_id == "167083887153913800138000":
+            self.environment = Environment.SANDBOX
+        else:
+            self.environment = ENV
 
 
 class InAppPurchase:
-    def __init__(self, bundle_id="com.ansjer.zccloud"):
+    def __init__(self, bundle_id="com.ansjer.zccloud", user_id=""):
         """
         初始化 InAppSubscription,加载私钥并初始化客户端和解码器。
         :param app_config: 包含内购相关配置的 AppConfig 实例。
         """
-        app_config = InAppConfig(bundle_id)
+        app_config = InAppConfig(bundle_id, user_id)
         self.bundle_id = bundle_id
         self.config = app_config
         self.private_key = self._load_private_key(self.config.key_filename)