SKPaymentTransaction.transactionIdentifier
注释的文档:
此值与交易中
SKPaymentTransaction.transactionIdentifier
的格式相同收据;但是,值可能不相同。
以及transaction_id
注释的文档:
此值与交易的格式相同
transaction_id
属性;但是,值可能不是相同。您可以使用此值来:
•管理您帐户中的订户数据库。存储
transaction_id
,transactionIdentifier
和transaction_id
每笔交易,作为存储的最佳做法每个客户的交易记录。 App Store产生新价值每次订阅自动续订时,original_transaction_id
为在新设备上恢复。•将购买交易与恢复或续订交易。在购买交易中,
product_id
始终与transaction_id
匹配。对于订阅,它表示首次订阅购买。为一个恢复或续订,transaction_id
与original_transaction_id
。如果用户还原或更新相同的内容购买多次,每个还原或续订都有不同的内容transaction_id
。
还将注意到事务标识符下的original_transaction_id
(来自文档档案):
此值对应于交易的
transaction_id
财产。
注意到这一点,我的问题是:Receipt Validation Programming Guide何时与经过验证的收据的transactionIdentifier
相同,或者什么时候不是?
在我们的应用程序中,我们仅处理消耗性应用程序内购买,没有订阅。在这种情况下,这两个值是否相同?我问是因为我需要能够记录购买服务器端以及有关购买它的用户的信息。请参阅下文,以了解该过程及其所带来的问题。
假设某个用户购买了一种易耗品,并且记录该交易的请求失败,例如因为我们的服务器已关闭,所以我们不致电SKPaymentTransaction.transactionIdentifier
。现在,假设某人注销并登录到另一个用户帐户并购买了另一种消耗品,那么我们仍然无法对其进行记录。收据中现在有两种消耗品。当他们启动应用程序时,接下来会调用transaction_id
并在finishTransaction:
数组中包含两个项目,以通知我们我们需要完成paymentQueue(_:updatedTransactions:)
个交易。我们需要将收据提交到我们的服务器以记录交易,但是我们还需要随每笔交易发送一些其他信息,例如购买收据的用户ID。这意味着我需要将该信息与关联的transactions
保留在磁盘上,以便稍后获得该数据。我可以将用户ID和收据的数组发送到服务器。但是后端如何知道收据中的哪个事务与数组中的哪个用户ID相匹配?我认为purchased
数组不能保证以任何特定方式排序,并且可能与transactionIdentifier
提供的in_app
数组的顺序不匹配。因此,当有多笔交易要记录时,我们如何正确链接它们,以便将购买交易应用到正确的服务器用户帐户?在这种情况下,是否可以确保应用内可用的transactions
与经过验证的收据中的paymentQueue(_:updatedTransactions:)
相同?
在测试中,我们确定transactionIdentifier
与消费品的有效收据中交易的transaction_id
值相同。
但是,由于文档中的注释说明其可能具有不同的值,因此我们不愿依赖这种情况。因此,我们使用transactionIdentifier
和transaction_id
的组合(即transaction.payment.productIdentifier
对应于收据中的transaction.transactionDate
)对备用项进行唯一标识。这样,后端就可以在收据中找到正确的交易,以获取应用程序提交的信息。