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

时间:2017-02-18 08:31:13

标签: ios in-app-purchase receipt-validation

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

我将旧收据中此次购买的数据与新收据中的数据进行比较,唯一的变化是transaction_id字段,original_transaction_id,purchase_date,expires_date, web_order_line_item_id 等字段是完全相同。

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

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

2 个答案:

答案 0 :(得分:4)

是的,我们也看到了这种情况。我们认为这是由“恢复购买”引发的。按钮点击。

如果您正在恢复购买'按钮使用restoreCompletedTransactions API,这会导致您的交易ID发生变化。我们已经通过Apple开发人员的支持证实了这一点。

显然你可以打电话给SKReceiptRefreshRequest而不是重播所有交易。我的理解是,这不会导致交易ID发生变化。

有传闻说,我们已经看到web_order_line_item_id值在restoreCompletedTransactions的调用中没有变化。但是,当我们要求确认时,我们只收到了来自Apple开发人员支持的模糊答案:

  

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

     

只要您在续订订阅事件进入时继续存储新值,就可以使用此功能。

我们认为这意味着每次续订购买web_order_line_item_id都是唯一的。对于restoreCompletedTransactions

的调用,既不确认也不否认它保持不变

此外,我发现此次会议录音在Apple / Google / Amazon重复计费上非常有用(但不是针对这种特殊情况):

Rosa Gutierrez - The recurring nightmare. Implementing cross platform in-app subscription purchases

答案 1 :(得分:1)

基于最新的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。