فهرست منبع

修改内购周期订阅逻辑

linhaohong 1 سال پیش
والد
کامیت
3b7c529340
1فایلهای تغییر یافته به همراه8 افزوده شده و 18 حذف شده
  1. 8 18
      Controller/InAppPurchaseController.py

+ 8 - 18
Controller/InAppPurchaseController.py

@@ -43,7 +43,7 @@ class InAppPurchaseView(View):
 
     def validation(self, request_dict, request, operation):
         if operation == 'AppStoreServerNotifications':  # App Store服务器通知
-            return self.app_store_server_notifications(request)
+            return self.app_store_server_notifications(request, request_dict)
         token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
         if token_code != 0:
             return response.json(token_code)
@@ -131,6 +131,7 @@ class InAppPurchaseView(View):
 
             product_id = None
             originalTransaction_id = None
+            agreement_id = ""
             if payload and payload.productId and payload.originalTransactionId:
                 product_id = payload.productId
                 originalTransaction_id = payload.originalTransactionId
@@ -141,14 +142,7 @@ class InAppPurchaseView(View):
 
             # 之前订阅过任意套餐返回不可再次订阅
             if Store_Meal.objects.filter(product_id=product_id, cycle_config_id__isnull=False).exists():
-                transaction_subscription = client.get_all_subscription_statuses(transaction_id)
-                if transaction_subscription.data:
-                    for subscription in transaction_subscription.data[0].lastTransactions:
-                        if str(subscription.status) == "Status.ACTIVE":
-                            key = str(originalTransaction_id) + "_SUBSCRIBED"
-                            redis_originalTransaction_id = redis_obj.get_data(key)
-                            if redis_originalTransaction_id != str(originalTransaction_id):
-                                return response.json(10048, f"订阅状态为 {subscription.status} ")
+                agreement_id = originalTransaction_id
 
             pay_type = PAY_TYPE_IN_APP_PURCHASE
             now_time = int(time.time())
@@ -220,7 +214,9 @@ class InAppPurchaseView(View):
                 orderID=order_id, UID=uid, channel=channel, userID_id=user_id, desc=content, payType=pay_type,
                 payTime=now_time, price=price, currency=currency, addTime=now_time, updTime=now_time,
                 order_type=order_type, commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank_id,
-                ai_rank_id=1, status=1, create_vod=1, store_meal_name=store_meal_name, uid_bucket_id=uid_bucket_id)
+                ai_rank_id=1, status=1, create_vod=1, store_meal_name=store_meal_name, uid_bucket_id=uid_bucket_id,
+                agreement_id=agreement_id
+            )
 
             # 发送云存开通信息
             date_time = time.strftime("%Y-%m-%d", time.localtime())
@@ -311,7 +307,7 @@ class InAppPurchaseView(View):
         ali_sms.send_code_sms_cloud(phone=phone, params=params, sign_name=sign_ms, temp_msg=temp_msg)
 
     @classmethod
-    def app_store_server_notifications(cls, request):
+    def app_store_server_notifications(cls, request, request_dict):
         logger = logging.getLogger('apple_pay')
         try:
             logger.info('App Store服务器通知请求类型:{}'.format(request.method))
@@ -470,12 +466,6 @@ class InAppPurchaseView(View):
                     # INITIAL_BUY(首次购买),则表示用户首次购买或通过家庭共享访问该订阅。如果子类型为
                     decoded_transaction_information = verifier.verify_and_decode_signed_transaction(
                         decoded_payload.data.signedTransactionInfo)
-                    originalTransaction_id = decoded_transaction_information.originalTransactionId
-
-                    # redis上锁,保证验证时是同一个订单
-                    redis_obj = RedisObject()
-                    redis_key = str(originalTransaction_id) + "_SUBSCRIBED"
-                    redis_obj.set_data(redis_key, originalTransaction_id, 3600)
 
                     # 之前订阅过不可重复订阅
                     key_id = 'N42WMFCV6A'
@@ -509,7 +499,7 @@ class InAppPurchaseView(View):
                     return HttpResponse(status=500)
                 return HttpResponse(status=200)
             else:
-                logger.info('App Store服务器通知不是post请求')
+                logger.info(f'App Store服务器通知不是post请求, 参数{request_dict}')
                 return HttpResponse(status=400)
         except Exception as e:
             logger.info('App Store服务器通知异常:{}'.