我在收到SKPaymentTransactionStatePurchased
通知后使用收据验证购买,其中包括用户刚刚购买的订阅的到期日期。
要正确识别收据中刚刚发生的交易,我会按transaction.transactionIdentifier
和transaction_id
进行匹配。我遇到的问题是事务标识符永远不会匹配。
我已经能够通过手动检查purchase_date
和product_id
来确定收据中的正确交易,但transaction_id
与交易完全不同。
我还查看了transaction.originalTransaction.transactionIdentifier
和original_transaction_id
,但这四个值中的任何一个似乎都不匹配。
这里发生了什么?在沙箱中测试时,任何人都有类似的问题吗?文档明确指出transaction_id
应与事务的transactionIdentifier
属性匹配。这可能是个错误吗?
编辑1: 以下是单次购买订阅(之前已过期)的不同交易标识符
transaction.transactionIdentifier = 1000000325087359
transaction.originalTransaction.transactionIdentifier = 1000000297785006
transaction_id = 1000000325087377
original_transaction_id = 1000000297785006
似乎原始交易标识符匹配(为什么它们会是新购买?),但其他两个则没有。他们来自哪里,他们匹配什么?我不明白两者之间的关系及其意义。
答案 0 :(得分:0)
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
属性。
除了在记录的场景中,这两个字段在什么情况下是不相同的,我不清楚。