【问题标题】:StoreKit: Transaction ID and Original Transaction ID ChaosStoreKit:交易 ID 和原始交易 ID 混乱
【发布时间】:2020-08-27 00:48:20
【问题描述】:

我已经为此苦苦挣扎了几天。我希望我现在明白了,但我想和你一起检查一下。

每笔交易都有一个 SKPaymentTransaction。在常规购买中,原始交易属性为空。在恢复或自动续订中,原始交易是原始交易 SKPaymentTransaction。

在我看来,棘手的部分是收到的收据。所以收据中的每笔交易都包含一个 transaction_id 和一个 original_transaction_id。在一次性购买中它们是相同的,在订阅中,original_transaction_id 是用户订阅的第一笔交易的 transaction_id。

所以我的第一个问题:如果我想在收据中检查购买的有效性 -> SKPayment 交易的 transactionID 仅出现在收据中,如果它不是恢复或续订。否则 SKPaymentTransaction transactionID 不在收据中。但由于在这些情况下 SKPaymentTransaction 具有 originalTransaction 属性,因此 originalTransaction.transactionID 出现在收据中。对吗?

现在我一直在努力解决的问题,第二个问题:所以 SKPaymentTransaction 的 originalTransaction 属性不一定与收据中的 original_transaction_id 有任何关系,对吗?我的意思是有几个续订的订阅 - 如果我恢复它们,我会得到一个带有交易 ID 的 SKPaymentTransaction,它不在收据中。然后我取这个 SKPaymentTransaction 的 originalTransaction.transactionID 并在收据中查找它,但不是在 original_transaction_id 字段中,而是在收据的 transaction_id 字段中,对吗?

我希望我现在明白了..我真的认为 Apple 的文档相当混乱..

【问题讨论】:

    标签: subscription storekit receipt-validation


    【解决方案1】:

    是的,在您的SKPaymentTransaction 中有一个属性originalTransaction。您可以在收据中找到您的 original_transaction_id。然而,这不是验证收据的好方法,因为它应该使用服务器来完成,以避免中间人攻击。 我建议您按照 Apple 的建议通过服务器验证收据。 有一些现成的解决方案,比如我们的 - Apphud 或 RevenueCat。

    我还建议您阅读有关什么是收据验证以及为什么需要它的文章:https://blog.apphud.com/receipt-validation/

    【讨论】:

      【解决方案2】:

      在您的设备上恢复交易将生成唯一的 transaction_id。因此,如果您这样做,则在此之后将找不到 original_transaction_id。同样的情况发生在不同的设备上,例如iPad,iPhone。如果您需要一个稳定的标识符,这些交易的 web_order_line_item_id 不会改变。

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 2016-03-17
        • 2021-03-13
        • 2012-11-02
        • 2017-09-21
        • 1970-01-01
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多