一次购买的Apple In-app Purchase transaction_id有时会发生变化

PE *_*Xie 11 in-app-purchase ios receipt-validation

一旦我从客户收到收据并通过苹果服务器进行验证,我就会在此收据中获得新购买的交易ID(这是自动订购购买).几天后,我从同一客户端收到一张新收据并进行验证,发生了奇怪的事情:旧购买的交易ID发生了变化.

我将旧收据中此次购买的数据与新收据中的数据进行比较,唯一更改的是transaction_id字段,original_transaction_id,purchase_date,expires_date,web_order_line_item_id和其他字段完全相同.

比我检查数据库,我发现大约1%的交易记录有相同的情况.并且有一个特点,他们的大部分交易ID都增加或减少了1-2.

我以前认为交易ID是购买的标识符.有没有人遇到同样的问题或知道原因?

pla*_*mbo 7

是的,我们也看到了这种情况。我们看到这是由“还原购买”按钮的点击触发的。

如果您的“恢复购买”按钮使用restoreCompletedTransactionsAPI,则这将导致您的交易ID发生更改。我们已经证实这得到了Apple开发人员的支持。

显然,您可以打电话给SKReceiptRefreshRequest它,它只会获取最新的收据,而不是重播所有交易。据我了解,这不会导致交易ID发生变化。

有趣的是,我们目睹了在web_order_line_item_id对的调用中这些值没有改变restoreCompletedTransactions。但是,当我们要求确认时,我们最多只能得到苹果开发人员支持的模棱两可的答复:

关于web_order_line_item_id字段,该值将在每次后续更新时更改。

您可以使用此功能,只要随着续订事件的到来继续存储新值即可。

我们将其表示web_order_line_item_id为每个续订购买都是唯一的。既不确认也不拒绝在调用期间保持不变restoreCompletedTransactions

此外,我发现在Apple / Google / Amazon定期计费中录制此会议非常有用(尽管不适用于此特定情况):

罗莎·古铁雷斯(Rosa Gutierrez)-反复发生的噩梦。实施跨平台的应用内订阅购买


luk*_*uke 5

基于最新的 Apple 开发人员文档,

web_order_line_item_id - 跨设备购买事件的唯一标识符,包括订阅续订事件。此值是识别订阅购买的主键。

transaction_id - 您可以使用此值:

  1. 在您的帐户数据库中管理订阅者。存储每个交易的transaction_id、original_transaction_id和product_id,作为存储每个客户的交易记录的最佳实践。每次订阅自动续订或在新设备上恢复时,App Store 都会为 transaction_id 生成一个新值。
  2. 将购买交易与恢复或续订交易区分开来。在购买交易中,transaction_id 始终与 original_transaction_id 匹配。对于订阅,它表示第一次订阅购买。对于恢复或续订,transaction_id 与 original_transaction_id 不匹配。如果用户多次恢复或续订同一个购买,每次恢复或续订都有不同的transaction_id。

  • 那么,您如何处理用户A购买的可更新订阅->然后删除应用程序/时间流逝/订阅自动续订->现在用户B使用不同的帐户(但仍然是相同的iTunes帐户)登录并恢复购买->什么ID应该持久保存在服务器上,当 userB 恢复购买时应该比较什么?(在这种情况下,我们必须弄清楚订阅实际上属于 userA,而 userB 不应该能够从中受益)。 (2认同)
  • @PawelKlapuch 我使用 App Store 服务器通知来跟踪订阅续订事件。所以我的数据库有所有订阅续订信息,无论 userA 是否删除了该应用程序都没关系。仅当用户 B 使用相同的 iTunes 帐户且订阅仍处于活动状态时,他才能恢复购买。因此,当 userB 恢复购买时,我将使用 web_order_line_item_id 检查该订阅是否已存在于数据库中,因为它是唯一标识符。如果是,则通知用户 B iTunes 帐户在另一个应用程序帐户上有有效的订阅。 (2认同)