iOS StoreKit交易标识符与收据

时间:2017-08-16 04:21:25

标签: ios storekit receipt-validation

我在收到SKPaymentTransactionStatePurchased通知后使用收据验证购买,其中包括用户刚刚购买的订阅的到期日期。

要正确识别收据中刚刚发生的交易,我会按transaction.transactionIdentifiertransaction_id进行匹配。我遇到的问题是事务标识符永远不会匹配。

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

我还查看了transaction.originalTransaction.transactionIdentifieroriginal_transaction_id,但这四个值中的任何一个似乎都不匹配。

这里发生了什么?在沙箱中测试时,任何人都有类似的问题吗?文档明确指出transaction_id应与事务的transactionIdentifier属性匹配。这可能是个错误吗?

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

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

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

1 个答案:

答案 0 :(得分:0)

SKPaymentTransaction.transactionIdentifier注释的文档:

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

还有transaction_id注释的文档:

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

您可以使用此值执行以下操作:

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

•将购买交易与 恢复或续订交易。在购买交易中, transaction_id始终与original_transaction_id匹配。对于 订阅,它表示首次购买订阅。为一个 恢复或续订,transaction_idoriginal_transaction_id。如果用户还原或更新相同的内容 购买多次,每个还原或续订都有不同的内容 transaction_id

我还将注意到Receipt Validation Programming Guide(来自文档档案)在“事务标识符”下显示:

此值对应于交易的transactionIdentifier 属性。

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