iOS IAP订阅/应用商店服务器到服务器通知.用unified_receipt替换verifyReceipt API



我正在升级一个已经使用App Store服务器通知的现有iOS IAP订阅系统。我现有的解决方案使用现在已弃用的latest_receiptlatest_receipt_infolatest_expired_receiptlatest_expired_receipt_info字段。根据苹果公司的说法,这些字段现在都被单个unified_receipt字段所取代。

在观看了所有必需的WWDC视频并筛选了可用的小文档后,我仍然有一些问题没有得到回答。

latest_receipt_info字段记录为:

一个数组,包含latest_receipt中解码值的最新100个应用内购买交易。

这意味着此数组将包含客户的整个交易历史。这不仅包括相关订阅,还包括客户可能购买的任何交易产品。

我的问题是如何在这个数组中找到相关的事务?在这种情况下,相关事务将是触发事件的事务(例如CANCEL(。我需要这个事务来更新我们的后端数据库,以反映当前的订阅状态。例如,在CANCEL事件中将订阅结束日期更新为cancellation_date

关于pending_renewal_info阵列,我也有类似的问题。根据现有文档,我不清楚是否所有订阅有效(甚至可能过期?(的客户都会在该阵列中有一个条目。

一个元素数组,指的是过去打开或失败的自动续订。

我还需要在该字段中找到相关事务,以执行诸如切换DID_CHANGE_RENEWAL_STATUS事件的订阅状态或更新DID_FAIL_TO_RENEW事件的计费状态之类的操作。从文档来看,pending_renewal_info中似乎没有足够的信息来计算当前的订阅续订状态。

总的来说,我的问题实际上可以归结为:

我能确定unified_receipt.latest_receipt_infounified_receipt.pending_renewal_info中都会有一个条目与顶级事件auto_renew_product_id匹配吗?如果是,我应该如何在相应的数组中找到相关的对象?每个auto_renew_product_id只会有一个条目吗?还是应该搜索数组并提取第一个匹配项?

我发现unified_receipt.latest_receipt_info数组中的事务是按购买日期从最晚到最早排序的。确保您可以找到顶级事件auto_renew_product_id

但是,为了更新订阅状态或计费状态,我使用/verifyRecipt的返回值,您可以通过向Apple verifyReceipt服务器请求收据数据和密码来获得该值(https://developer.apple.com/documentation/appstorereceipts/verifyreceipt)。注意,输入的接收数据是unified_receipt.latest_receipt,并且响应共享与unified_receipt相同的结构。

最新更新