AppleInAppPurchaseSubscriptionObject.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.db.models import Q
  2. from Ansjer.config import LOGGER, CONFIG_INFO, CONFIG_TEST, PAY_TYPE_IN_APP_PURCHASE, BASE_DIR
  3. from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion
  4. from appstoreserverlibrary.models.Environment import Environment
  5. from appstoreserverlibrary.receipt_utility import ReceiptUtility
  6. from appstoreserverlibrary.models.HistoryResponse import HistoryResponse
  7. from appstoreserverlibrary.models.TransactionHistoryRequest import TransactionHistoryRequest, ProductType, Order
  8. from appstoreserverlibrary.signed_data_verifier import SignedDataVerifier
  9. from Model.models import Order_Model, DeviceApplePackage
  10. ENV = Environment.SANDBOX if CONFIG_INFO == CONFIG_TEST else Environment.PRODUCTION
  11. class InAppSubscription:
  12. def __init__(self):
  13. key_id = 'N42WMFCV6A'
  14. issuer_id = '69a6de8c-789b-47e3-e053-5b8c7c11a4d1'
  15. bundle_id = 'com.ansjer.zccloud'
  16. environment = ENV
  17. key_path = '{}/Ansjer/file/in_app_purchase/SubscriptionKey_N42WMFCV6A.p8'.format(BASE_DIR)
  18. with open(key_path, 'rb') as file:
  19. # 读取文件内容
  20. private_key = file.read()
  21. self.client = AppStoreServerAPIClient(private_key, key_id, issuer_id, bundle_id, environment)
  22. def check_subscriptions(self, uid, subscription_group_id):
  23. """
  24. 检查用户是否订阅
  25. :param uid:
  26. :return: True/False True表示已订阅
  27. """
  28. has_order_qs = Order_Model.objects.filter(UID=uid, payType=5).exclude(original_transaction_id="")
  29. if not has_order_qs.exists():
  30. return False
  31. has_order = has_order_qs.values('transaction_id', 'orderID', 'addTime').order_by('-addTime')
  32. subscription_statuses = self.client.get_all_subscription_statuses(has_order[0]['transaction_id'])
  33. if not subscription_statuses.data:
  34. return False
  35. LOGGER.info("subscription_statuses:{}".format(subscription_statuses))
  36. for subscription_status in subscription_statuses.data:
  37. if str(subscription_status.subscriptionGroupIdentifier) == subscription_group_id:
  38. for subscription_status_item in subscription_status.lastTransactions:
  39. if str(subscription_status_item.status) == "Status.ACTIVE":
  40. return True
  41. else:
  42. return False