iOS StoreKit交易标识符与收据不匹配。

4

我在收到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

看起来原始交易标识符匹配(它是一个新的购买,为什么会匹配?),但另外两个不匹配。它们来自哪里,又是什么匹配的?我不理解两者之间的关系和它们的重要性。


我遇到了同样的问题:https://stackoverflow.com/questions/68165228/why-could-not-find-transaction-record-on-the-server-side-in-apple-app-purchase - Dolphin
1个回答

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(来自文档存档)在Transaction Identifier下说明了:

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

除了在文档中记录的情况之外,在哪些情况下这两个字段是相同的或不相同的并不清楚。

你的回答对我很有帮助,但我想知道如果订阅中的交易 ID 不匹配,如何识别交易?在恢复工作流程中,如何在服务器端匹配交易?@Jordan H - Dolphin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接