SKPaymentTransaction.transactionIdentifier在什么情况下与经过验证的收据的transaction_id相同?

问题描述 投票:0回答:1

SKPaymentTransaction.transactionIdentifier注释的文档:

此值与交易中SKPaymentTransaction.transactionIdentifier的格式相同收据;但是,值可能不相同。

以及transaction_id注释的文档:

此值与交易的格式相同transaction_id属性;但是,值可能不是相同。

您可以使用此值来:

•管理您帐户中的订户数据库。存储transaction_idtransactionIdentifiertransaction_id每笔交易,作为存储的最佳做法每个客户的交易记录。 App Store产生新价值每次订阅自动续订时,original_transaction_id为在新设备上恢复。

•将购买交易与恢复或续订交易。在购买交易中,product_id始终与transaction_id匹配。对于订阅,它表示首次订阅购买。为一个恢复或续订,transaction_idoriginal_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:)相同?

ios swift storekit receipt-validation
1个回答
0
投票

在测试中,我们确定transactionIdentifier与消费品的有效收据中交易的transaction_id值相同。

但是,由于文档中的注释说明其可能具有不同的值,因此我们不愿依赖这种情况。因此,我们使用transactionIdentifiertransaction_id的组合(即transaction.payment.productIdentifier对应于收据中的transaction.transactionDate)对备用项进行唯一标识。这样,后端就可以在收据中找到正确的交易,以获取应用程序提交的信息。

© www.soinside.com 2019 - 2024. All rights reserved.