如何获取订阅的原始交易收据?
Posted
技术标签:
【中文标题】如何获取订阅的原始交易收据?【英文标题】:How to get the original transaction receipt for a subscription? 【发布时间】:2013-10-04 09:27:51 【问题描述】:在我的应用程序中,我尝试实现“恢复购买”按钮,但我不知道如何获取订阅的最新购买收据。我只有一个 SKProduct,一个可自动续订的订阅。
我只需要获取最新的收据并将其发送到服务器进行验证。
我试过这个:
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
for (SKPaymentTransaction *transaction in queue.transactions)
if (transaction.transactionState == SKPaymentTransactionStatePurchasing)
NSLog(@"Purchasing");
if (transaction.transactionState == SKPaymentTransactionStatePurchased)
NSLog(@"Purchasing");
if (transaction.transactionState == SKPaymentTransactionStateRestored)
NSLog(@"Restored");
if (transaction.transactionState == SKPaymentTransactionStateFailed)
NSLog(@"Failed");
但我明白了:
2013-10-04 12:21:48.994 App[5289:60b] Purchasing
2013-10-04 12:21:48.995 App[5289:60b] Purchasing
2013-10-04 12:21:48.996 App[5289:60b] Purchasing
2013-10-04 12:21:48.996 App[5289:60b] Purchasing
2013-10-04 12:21:48.997 App[5289:60b] Purchasing
2013-10-04 12:21:48.998 App[5289:60b] Purchasing
2013-10-04 12:21:48.999 App[5289:60b] Purchasing
2013-10-04 12:21:48.999 App[5289:60b] Purchasing
2013-10-04 12:21:49.000 App[5289:60b] Purchasing
2013-10-04 12:21:49.000 App[5289:60b] Restored
2013-10-04 12:21:49.001 App[5289:60b] Restored
2013-10-04 12:21:49.001 App[5289:60b] Restored
我只需要最新的收据。我怎么能得到那个? 问题是,由于某种原因,用户购买了订阅,但未能在我的服务器上验证。为什么失败 - 我不知道。
【问题讨论】:
为什么需要完整的收据?我认为购买日期可以满足您的需求。 因为我需要在我的服务器上验证收据以判断它是否处于活动状态。 我也遇到了同样的问题。我想得到最新的收据。如果交易处于待处理状态,我们会在收据中显示什么内容? 【参考方案1】:获取收据的方法如下:
斯威夫特
获取收据数据 要从设备上的应用程序中检索收据数据,请使用 NSBundle 的 appStoreReceiptURL 方法来定位应用程序的收据,并将数据编码为 Base64。将此 Base64 编码的数据发送到您的服务器。
// Get the receipt if it's available
if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
FileManager.default.fileExists(atPath: appStoreReceiptURL.path)
do
let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)
print(receiptData)
let receiptString = receiptData.base64EncodedString(options: [])
// Read receiptData
catch print("Couldn't read receipt data with error: " + error.localizedDescription)
目标-C
// Load the receipt from the app bundle.
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
if (!receipt)
/* No local receipt -- handle the error. */
/* Read receiptData here... */
对于自动续订的订阅项目,解析响应以获取有关当前有效订阅期的信息。当您验证订阅收据时,latest_receipt 包含最新的编码收据,与值相同 对于请求中的收据数据,latest_receipt_info 包含所有 订阅的交易,包括初始购买 以及随后的续订,但不包括任何恢复。
我相信这就是你所需要的。
更多详情请查看here。
【讨论】:
以上是关于如何获取订阅的原始交易收据?的主要内容,如果未能解决你的问题,请参考以下文章
PAYMENT.SALE.COMPLETED webhook 事件中的 PayPal 订阅 ID 和交易 ID 在哪里?如何获取他们的详细信息?