首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查订阅是否已取消?

如何检查订阅是否已取消?
EN

Stack Overflow用户
提问于 2019-06-04 16:40:21
回答 1查看 706关注 0票数 1

我已经要求退款我自己的应用程序的月度订阅。苹果公司给了我退款。但我的订阅仍然有效,我可以使用高级功能。

我的应用程序每次使用收据时都会检查收据的有效性,这证明收据的有效期仍然有效。

这就是我检查它的方式。尽管它是在我的服务器上用Python编写的,但我希望它的代码足够清晰,任何人都能理解:

代码语言:javascript
复制
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

本质上,我是在“latest_receipt_info”集合中检查每个收据的“expires_date”。如果在将来至少设置了其中一个,则保费检查有效。

但在我的案例中,尽管苹果已经退还了订阅,但他们将其保留为活动状态,直到下次续费。

那么定期检查收据的意义是什么呢?如果我们不能提前取消的话?

对于现有用户来说,如果只将到期日期保存在UserDefaults中,并在到期日期已经到期时在本地检查,然后使用检查下一个收据的有效性,不是更高效、更快吗?

SWIFT:

UserDefaults.standard.set(expiryDate, forKey: Constants.expiryDate)

更新:

因此,根据我收到的答案,我认为在最新的接收中,cancellation_reasoncancellation_date将位于这些字段的旁边。

代码语言:javascript
复制
"latest_receipt_info": [
    {
      "quantity": "1",
      "product_id": "com.x.sub.weekly",
      "transaction_id": "100000053x",
      "original_transaction_id": "100000053x",
      "purchase_date": "2019-06-03 19:52:05 Etc/GMT",
      "purchase_date_ms": "1559591525000",
      "purchase_date_pst": "2019-06-03 12:52:05 America/Los_Angeles",
      "original_purchase_date": "2019-06-03 19:52:06 Etc/GMT",
      "original_purchase_date_ms": "1559591526000",
      "original_purchase_date_pst": "2019-06-03 12:52:06 America/Los_Angeles",
      "expires_date": "2019-06-03 19:55:05 Etc/GMT",
      "expires_date_ms": "1559591705000",
      "expires_date_pst": "2019-06-03 12:55:05 America/Los_Angeles",
      "web_order_line_item_id": "10000000x",
      "is_trial_period": "false",
      "is_in_intro_offer_period": "false"
      "cancellation_reason": "0", 
      "cancellation_date" "2019-06-03 21:55:05 Etc/GMT"
    },

我希望有一种方法可以模仿这一点。在没有真正能够测试它的情况下,我如何基于docs编写代码并投入生产呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 00:52:29

对于退款,您需要检查cancellation_reason字段,该字段将指示客户支持已退还用户。还会有一个cancellation_date指示取消发生的时间。

如果该字段存在,则您的保费支票应无效:

将已取消的入库单视为未进行任何采购。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56440302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档