代码之家  ›  专栏  ›  技术社区  ›  Houman

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

  •  0
  • Houman  · 技术社区  · 6 年前

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

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

    我就是这样检查的虽然在我的服务器上是Python,但我希望代码足够清晰,任何人都能理解:

    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
    

    本质上,我是在收集每个收据的过期日期的最新收据信息如果其中至少有一个是在未来设定的,那么保费支票是有效的。

    但在我的情况下,即使苹果已经退还了订阅费,他们仍将其保留到下一次续费。

    那么,定期检查收据有什么意义呢如果我们 不能赶上提前取消吗?

    对于现有用户来说,在用户名错误中保存到期日期并在期满日期过期时本地检查不会更有效和更快。 然后 检查下一张收据的有效性?

    银行代码:

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

    更新:

    所以根据我得到的答案,我想 cancellation_reason cancellation_date 会在最近的收据中这些字段旁边吗?

    "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 在没有真正测试能力的情况下投入生产?

    0 回复  |  直到 6 年前
        1
  •  1
  •   enc_life    6 年前

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

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

    把一张被取消的收据当作从未购买过一样对待 制造的。