苹果如何通知iOS应用程序退款的应用程序内购买(IAP)?

我已经在我的应用程序中成功实现了Apple iOS IAP,并在沙箱中进行了testing。 很好用。

我担心用户可以用IAP购买东西,下载到我的应用程序,然后抱怨苹果,并获得退款。 退款没有明显的方式报告给我的应用程序。 他们是否被简单地从我在“恢复”操作期间收到的产品列表中排除? 是否有一些未logging的交易types在退款时在我的SKPaymentTransactionObserver中asynchronous显示?

现在,我正在假设我需要在执行还原之前删除用户的IAP事务,并且任何退还的内容都不会包含在还原的事务列表中。 这是正确的做法吗? 有什么方法可以在沙盒中testing吗?

有没有人在生产环境中看到退款,并可以解释他们如何工作?

应用内购买指南讨论了订阅“取消”的概念。 这是我见过的唯一讨论这个问题的地方。

有关取消date字段的更多详细信息,也可以在App Store收据validation文档中find。

cancellation_date 

解码收据后,你可以得到取消date,这将告诉你以下几点:

对于Apple客户支持取消的交易,取消的时间和date。

退款是给出的,但你的应用程序根本没有得到他们的通知。 无论是应用程序内购买,应用程序下载还是任何其他iTunes内容,即使用户要求退款,用户也仍然可以使用该内容。

策略是:

  1. 您保存数据库中与用户帐户关联的latest_receipt (“MIIUJgYJKoZIhvc …”base64)字段。

  2. 你每天查询苹果来validation所有的收据,通过发送他们从保存的latest_receipt字段的base64收据。

  3. 在收据中检查是否存在cancellation_date字段。 如果你find它,请按照文件处理 :

把取消的收据当作没有任何购物一样进行处理。

您也一样检查订阅续订(检查expires_date_ms字段)。