【发布时间】:2020-01-01 23:02:21
【问题描述】:
SKPaymentTransaction.transactionIdentifier 的文档说明:
此值与交易中的
transaction_id格式相同 收据;但是,这些值可能不一样。
还有transaction_id 的文档说明:
此值与交易的格式相同
transactionIdentifier财产;但是,这些值可能不是 一样。您可以将此值用于:
• 管理您帐户中的订阅者 数据库。存储
transaction_id、original_transaction_id和product_id用于每笔交易,作为存储的最佳实践 每个客户的交易记录。 App Store 产生新价值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:) 并使用 transactions 数组中的两个项目来通知我们有 purchased 事务我们需要完成。我们需要将收据提交到我们的服务器以记录交易,但我们还需要在每笔交易中发送一些附加信息,例如购买它的用户 ID。这意味着我需要将此信息与关联的transactionIdentifier 一起保存在磁盘上,以便稍后获取该数据。我可以将一组用户 ID 和收据发送到服务器。但是后端如何知道收据中的哪个交易与数组中的哪个用户 id 匹配?我不相信in_app 数组可以保证以任何特定方式排序,并且可能与提供给paymentQueue(_:updatedTransactions:) 的transactions 数组的顺序不匹配。那么当有多个交易要记录时,我们如何正确链接它们以便将购买应用到正确的用户帐户服务器端?在这种情况下,应用内可用的transactionIdentifier 是否保证与验证收据中的transaction_id 相同?
【问题讨论】:
标签: ios swift storekit receipt-validation