【问题标题】:In what scenarios is SKPaymentTransaction.transactionIdentifier the same as the validated receipt's transaction_id?在什么情况下 SKPaymentTransaction.transactionIdentifier 与验证收据的 transaction_id 相同?
【发布时间】:2020-01-01 23:02:21
【问题描述】:

SKPaymentTransaction.transactionIdentifier 的文档说明:

此值与交易中的transaction_id 格式相同 收据;但是,这些值可能不一样。

还有transaction_id 的文档说明:

此值与交易的格式相同 transactionIdentifier财产;但是,这些值可能不是 一样。

您可以将此值用于:

• 管理您帐户中的订阅者 数据库。存储transaction_idoriginal_transaction_idproduct_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


    【解决方案1】:

    在测试中,我们确定transactionIdentifier 与消费购买的验证收据中的交易transaction_id 的值相同。

    但是,我们不愿意依赖这种情况,因为文档中的注释指出它可能不是相同的值。因此,我们使用transaction.payment.productIdentifiertransaction.transactionDate 的组合来唯一标识交易,即documented 对应于收据中的original_purchase_date_ms。这允许后端在应用提交的信息的收据中找到正确的交易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2018-11-14
      • 2018-05-17
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多