如何解决SwiftyStoreKit - 何时执行收据验证
我正在使用 SwiftyStoreKit 来执行订阅:
private func subscribeUser(withId subscriptionId: String) {
SwiftyStoreKit.purchaseProduct(subscriptionId,atomically: false) { result in
switch result {
case .success(let product):
if product.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(product.transaction)
}
// Get the receipt
SwiftyStoreKit.fetchReceipt(forceRefresh: true) { result in
switch result {
case .success(let receiptData):
// Encrypt the receipt
let encryptedReceipt = receiptData.base64EncodedString(options: [])
// Set up verification url
let url = "https://myUrl/verifyReceipt"
// Send receipt to server
APIConnect.verifyReceipt(
url: url,params: ["receipt" : encryptedReceipt],completion: self.processSubscription)
case .error(let error):
print("SUBSCRIPTIONPAYMENTVC | subscribeUser | Fetch receipt Failed: \(error)")
}
}
case .error(let error):
switch error.code {
// alert user accordingly
}
}
}
}
在收据发送到我们的服务器并验证后,响应被处理:
func processSubscription(receiptJSON: JSON) {
print("SUBSCRIPTIONPAYMENTVC | verifySubscription | Done Verifying Subscription")
// Check response
if receiptJSON["status"] > 0 {
// alert user accordingly
} else {
// Get data from receipt
let lastReceiptIndex = receiptJSON["latest_receipt_info"].arrayValue.count - 1
// Set up varibles
productId = receiptJSON["latest_receipt_info"][lastReceiptIndex]["product_id"].stringValue
originalTransactionId = receiptJSON["latest_receipt_info"][lastReceiptIndex]["original_transaction_id"].stringValue
startDate = receiptJSON["latest_receipt_info"][lastReceiptIndex]["original_purchase_date_ms"].stringValue
endDate = receiptJSON["latest_receipt_info"][lastReceiptIndex]["expires_date_ms"].stringValue
latestReceipt = receiptJSON["latest_receipt"].stringValue
// Add user to database
addUserToDB()
}
}
但是,即使 processSubscription 可能收到状态 > 0,用户是否也已被收费?我是否在错误的时间调用收据验证?购买究竟发生在何处,如何通过验证阻止购买?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。