| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | from django.db.models import Qfrom Ansjer.config import LOGGER, CONFIG_INFO, CONFIG_TEST, PAY_TYPE_IN_APP_PURCHASE, BASE_DIRfrom appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersionfrom appstoreserverlibrary.models.Environment import Environmentfrom appstoreserverlibrary.receipt_utility import ReceiptUtilityfrom appstoreserverlibrary.models.HistoryResponse import HistoryResponsefrom appstoreserverlibrary.models.TransactionHistoryRequest import TransactionHistoryRequest, ProductType, Orderfrom appstoreserverlibrary.signed_data_verifier import SignedDataVerifierfrom Model.models import Order_Model, DeviceApplePackageENV = Environment.SANDBOX if CONFIG_INFO == CONFIG_TEST else Environment.PRODUCTIONclass InAppSubscription:    def __init__(self):        key_id = 'N42WMFCV6A'        issuer_id = '69a6de8c-789b-47e3-e053-5b8c7c11a4d1'        bundle_id = 'com.ansjer.zccloud'        environment = ENV        key_path = '{}/Ansjer/file/in_app_purchase/SubscriptionKey_N42WMFCV6A.p8'.format(BASE_DIR)        with open(key_path, 'rb') as file:            # 读取文件内容            private_key = file.read()        self.client = AppStoreServerAPIClient(private_key, key_id, issuer_id, bundle_id, environment)    def check_subscriptions(self, uid, subscription_group_id):        """        检查用户是否订阅        :param uid:        :return: True/False True表示已订阅        """        # 查询订单信息        has_order_qs = Order_Model.objects.filter(UID=uid, payType=5).exclude(original_transaction_id="")        if not has_order_qs.exists():            return False        has_order = has_order_qs.values('transaction_id', 'original_transaction_id', 'orderID', 'addTime').order_by(            '-addTime')        # 判断用户是否取消订阅        device_apple_package = DeviceApplePackage.objects.filter(            original_transaction_id=has_order[0]['original_transaction_id']).values("subscription_status")        if not device_apple_package.exists():            return False        elif device_apple_package[0]['subscription_status'] != 1:            return False        # 通过 transaction_id 获取订阅状态        subscription_statuses = self.client.get_all_subscription_statuses(has_order[0]['transaction_id'])        if not subscription_statuses.data:            return False        LOGGER.info("subscription_statuses:{}".format(subscription_statuses))        for subscription_status in subscription_statuses.data:            if str(subscription_status.subscriptionGroupIdentifier) == subscription_group_id:                for subscription_status_item in subscription_status.lastTransactions:                    if str(subscription_status_item.status) == "Status.ACTIVE":                        return True        else:            return False
 |