فهرست منبع

苹果内购, 循环扣款appAccountToken。

linhaohong 9 ماه پیش
والد
کامیت
762da22306
1فایلهای تغییر یافته به همراه13 افزوده شده و 3 حذف شده
  1. 13 3
      Controller/InAppPurchaseController.py

+ 13 - 3
Controller/InAppPurchaseController.py

@@ -174,12 +174,14 @@ class InAppPurchaseView(View):
                     # 第一种情况: 套餐已过期再次订阅
                     if device_apple_package_qs[0].uid == uid and device_apple_package_qs[0].subscription_status == 2:
                         # 使用App Store服务器通知接口订阅
+                        Order_Model.objects.filter(orderID=order_id).delete()
                         pay_result_url = CommonService.get_payment_status_url(lang, 'success')
                         return response.json(0, {'url': pay_result_url})
 
                     # 第二种情况: 套餐未过期已取消再次订阅
                     elif device_apple_package_qs[0].uid == uid and device_apple_package_qs[0].subscription_status == 3:
                         # 使用App Store服务器通知接口修改订阅状态
+                        Order_Model.objects.filter(orderID=order_id).delete()
                         pay_result_url = CommonService.get_payment_status_url(lang, 'success')
                         return response.json(0, {'url': pay_result_url})
 
@@ -506,6 +508,8 @@ class InAppPurchaseView(View):
                     # originalTransactionId 原始购买的交易标识符
                     original_transaction_id = decoded_transaction_information.originalTransactionId
                     transaction_id = decoded_transaction_information.transactionId
+                    app_account_token = decoded_transaction_information.appAccountToken
+                    app_account_token = json.loads(app_account_token)
                     logger.info(
                         f"App Store服务器通知,再次订阅originalTransactionId原始购买的交易标识符{original_transaction_id}")
                     if not original_transaction_id:
@@ -514,8 +518,7 @@ class InAppPurchaseView(View):
                     # 查旧订单消息
                     ord_order_qs = Order_Model.objects.filter(original_transaction_id=original_transaction_id)
                     if not ord_order_qs.exists():
-                        logger.info(
-                            f"App Store服务器通知未查询到旧订单信息, originalTransactionId:{original_transaction_id}, 返回状态 400")
+                        logger.info(f"App Store服务器通知未查询到旧订单信息, originalTransactionId:{original_transaction_id}, 返回状态 400")
                         return HttpResponse(status=400)
 
                     # 解决云存充值成功, 由于一些原因返回500 导致苹果未扣款的问题
@@ -529,6 +532,12 @@ class InAppPurchaseView(View):
                     uid = ord_order[0]["UID"]
                     pay_type = ord_order[0]["payType"]
                     user_id = ord_order[0]["userID_id"]
+
+                    new_user_id = app_account_token["user_id"]
+                    if new_user_id != user_id:
+                        uid = app_account_token["UID"]
+                        user_id = new_user_id
+
                     # 用产品id找到使用的套餐
                     product_id = decoded_transaction_information.productId
                     rank_id = InAppPurchasePackage.objects.filter(product_id=product_id).values("rank")[0]["rank"]
@@ -624,7 +633,8 @@ class InAppPurchaseView(View):
                 put_time = now_time + 11.5 * 60 * 60
                 InAppRefund.objects.create(transaction_id=transaction_id, orderID=orderID,
                                            uid=uid, app_type=app_type, created_time=now_time,
-                                           updated_time=now_time, put_time=put_time, app_account_token=app_account_token)
+                                           updated_time=now_time, put_time=put_time,
+                                           app_account_token=app_account_token)
                 return HttpResponse(status=200)
 
             elif str(decoded_payload.rawNotificationType) == "DID_CHANGE_RENEWAL_STATUS":