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

一旦我从客户那里得到一个收据并通过苹果服务器validation它,那么我在这个收据中得到了一个新购买的交易ID(这是一个自动订购购买)。 几天之后,我从同一个客户那里得到一个新的收据并进行validation,奇怪的事情发生了:那个旧购买的交易ID改变了。

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

比我检查数据库,我发现约1%的交易logging有相同的情况。 而且还有一个特点,他们的交易ID大部分是增加或减less了1-2

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

是的,我们也看到了这种情况。 我们看到这由'恢复购买'button点击触发。

如果您的“恢复购买”button使用restoreCompletedTransactions API,则会导致您的交易ID发生更改。 我们已经证实,这与苹果开发者的支持。

显然你可以调用SKReceiptRefreshRequest来代替重播所有的事务。 这是我的理解,这不会导致交易id改变。

我们已经看到, web_order_line_item_id值不会在调用restoreCompletedTransactions发生变化。 但是,当我们要求确认时,我们只得到了苹果开发人员支持部门的一个模糊的答案:

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

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

我们认为这意味着web_order_line_item_id每个续订购买都是唯一的。 这既不能确认也不能否认在对restoreCompletedTransactions调用中保持不变

另外,我发现在苹果/谷歌/亚马逊(Amazon)周期性计费上这个会议logging非常有用(虽然不是这种特殊情况):

罗莎古铁雷斯 – 经常性的恶梦。 实施跨平台的应用内订阅购买