4

我在收到SKPaymentTransactionStatePurchased通知后使用收据来验证购买,除其他外,还可以获取用户刚刚购买的订阅的到期日期。

为了正确识别收据中刚刚发生的交易,我用transaction.transactionIdentifierand匹配它transaction_id。我遇到的问题是交易标识符永远不会匹配。

我已经能够通过手动检查purchase_dateand来识别收据中的正确交易product_id,但它transaction_id与交易完全不同。

我也看过transaction.originalTransaction.transactionIdentifierand original_transaction_id,但这四个值似乎在任何时候都不匹配。

这里发生了什么?在沙盒中测试时有人遇到过类似的问题吗?该文件明确指出,transaction_id应与transactionIdentifier交易的财产相匹配。这可能是一个错误吗?

编辑 1: 这是单次购买订阅的不同交易标识符(之前已过期)

transaction.transactionIdentifier = 1000000325087359
transaction.originalTransaction.transactionIdentifier = 1000000297785006
transaction_id = 1000000325087377
original_transaction_id = 1000000297785006

似乎原始交易标识符匹配(为什么会匹配,这是新购买?),但其他两个不匹配。它们来自哪里,它们匹配什么?我不明白两者之间的关系及其意义。

4

1 回答 1

0

注释的文档SKPaymentTransaction.transactionIdentifier

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

以及注释文档transaction_id

transactionIdentifier该值与交易的属性具有相同的格式 ;但是,这些值可能不一样。

您可以使用此值来:

• 在您的帐户数据库中管理订阅者。存储每个交易的transaction_idoriginal_transaction_idproduct_id,作为存储每个客户的交易记录的最佳实践。transaction_id每次订阅自动续订或在新设备上恢复时,App Store 都会生成一个新值。

• 将购买交易与恢复或续订交易区分开来。在购买交易中, transaction_id总是匹配original_transaction_id。对于订阅,它表示第一次订阅购买。对于恢复或续订,transaction_idoriginal_transaction_id. 如果用户多次恢复或续订同一购买,则每次恢复或续订都有不同的 transaction_id.

我还将注意到收据验证编程指南(来自文档存档)在事务标识符下的状态:

该值对应于事务的transactionIdentifier 属性。

除了记录的场景外,我不清楚这两个字段在什么情况下是相同的或不同的。

于 2020-01-01T22:40:24.210 回答