如何解决订阅收据中缺少`latest_receipt_info`的问题?

时间:2019-02-20 07:56:37

标签: ios app-store

我已经建立了一个服务器端点来验证用户的收据。我的用户在iOS设备上,可以从AppStore购买订阅。

今天,我在日志中注意到某些用户的JSON收据缺少latest_receipt_info

{
  'receipt': {
    'receipt_type': 'Production',
    'adam_id': 13052xxxx,
    'app_item_id': 13052xxxx,
    'bundle_id': 'com.xxx.xxx.vpn',
    'application_version': '2',
    'download_id': 7504221xxxx,
    'version_external_identifier': 8303xxxx,
    'receipt_creation_date': '2019-02-20 05:27:15 Etc/GMT',
    'receipt_creation_date_ms': '1550640435000',
    'receipt_creation_date_pst': '2019-02-19 21:27:15 America/Los_Angeles',
    'request_date': '2019-02-20 06:53:53 Etc/GMT',
    'request_date_ms': '1550645633891',
    'request_date_pst': '2019-02-19 22:53:53 America/Los_Angeles',
    'original_purchase_date': '2019-02-11 09:03:16 Etc/GMT',
    'original_purchase_date_ms': '1549875796000',
    'original_purchase_date_pst': '2019-02-11 01:03:16 America/Los_Angeles',
    'original_application_version': '2',
    'in_app': []
  },
  'status': 0,
  'environment': 'Production'
}

在我的服务器端点中,我拒绝任何没有latest_receipt_info的收据:

def verify_receipt(receipt):
    r = requests.post(config.APPLE_STORE_URL, json=Subscription.produce_receipt_with_credentials(receipt))
    now = datetime.utcnow()
    if 'latest_receipt_info' in r.json():
        for item in r.json()['latest_receipt_info']:
            dt, tz = item['expires_date'].rsplit(maxsplit=1)
            expires_date = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.timezone(tz))
            expires_date = expires_date.astimezone(pytz.utc)
            expires_date = expires_date.replace(tzinfo=None)
            if expires_date > now:
                return True, expires_date, r.json()['latest_receipt'], item
    else:
        current_app.logger.info('latest_receipt_info not found: %s', r.json())
    return False, None, None, None

但是似乎我可能会误认为我的方法,因为文档中说明了有关状态的信息:

  

状态:如果收据有效,则为0,或者为错误代码之一   在表2-1中列出。

换句话说,状态为0,表示有效。但是我没有看到任何expiry_date或可以验证收据的过期日期的任何内容。

我在文档中找不到任何内容。我该怎么办?我应该自动信任状态为0的收据吗?

文档还对latest_receipt_info说了这一点,我不清楚:

  

latest_receipt_info:仅返回包含以下内容的收据   自动续订的订阅。

但是,除非用户明确取消订阅,否则应用商店上的每个订阅都会自动更新。是什么使这些收据没有latest_receipt_info?这是否意味着他们已取消它,并且处于最后周期?谢谢您的建议。

0 个答案:

没有答案