iOS StoreKit Transaction Identifier 与 Receipt 不匹配
Posted
技术标签:
【中文标题】iOS StoreKit Transaction Identifier 与 Receipt 不匹配【英文标题】:iOS StoreKit Transaction Identifier does not match Receipt 【发布时间】:2018-01-24 02:17:40 【问题描述】:在收到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
似乎原始交易标识符匹配(为什么会匹配,这是新购买?),但其他两个不匹配。它们来自哪里,它们匹配什么?我不明白两者之间的关系及其意义。
【问题讨论】:
我遇到了同样的问题:***.com/questions/68165228/… 【参考方案1】: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
属性。
除了记录在案的场景外,我不清楚这两个字段在什么场景下是相同或不同的。
【讨论】:
您的回答对我帮助很大,但我只是想知道交易ID是否在订阅中不匹配,如何识别交易?如何在retore工作流中匹配服务器端的事务?@Jordan H以上是关于iOS StoreKit Transaction Identifier 与 Receipt 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AppStoreReceiptUrl 在 Xamarin.iOS 中验证 StoreKit 交易
iOS Auto Renewable Subscription 最低功能和 StoreKit 之外的免费试用