1、引入头文件
import StoreKit
2、在viewDidLoad添加
SKPaymentQueue.default().add(self) //添加代理 SKPaymentTransactionObserver,SKProductsRequestDelegate
2、支付
if (SKPaymentQueue.canMakePayments()) { self.getProductInfo(payID: "苹果内购商品ID") }else{ MDHubHelper.share.showError(msg: NSLocalizedString(str: "无法购买")) } func getProductInfo(payID:String) { SKPaymentQueue.default().add(self) let array = NSArray.init(object: payID) let request = SKProductsRequest.init(productIdentifiers: NSSet(array: array as! [Any]) as! Set<String>) request.delegate = self request.start() } func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) { } func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) { } func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { } func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: self.completeTransaction(transaction: transaction) //请求服务端 case .purchasing: MDHubHelper.share.showStatus(msg:NSLocalizedString(str: "正在支付")) //正在交易 case .failed: MDHubHelper.share.showError(msg: NSLocalizedString(str: "支付失败")) self.failedTransaction(transaction: transaction) case .restored: MDHubHelper.share.showError(msg: NSLocalizedString(str: "已购买该商品")) self.restoreTransaction(transaction: transaction) default: self.failedTransaction(transaction: transaction) break } } } func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { let myProduct = response.products if (myProduct.count == 0) { MDHubHelper.share.showError(msg: NSLocalizedString(str: "无内购信息")) return } lPayment = SKPayment.init(product: myProduct[0]) SKPaymentQueue.default().add(lPayment) } //自定义函数 func completeTransaction(transaction:SKPaymentTransaction) { let recvURL = Bundle.main.appStoreReceiptURL let receiptData = NSData(contentsOf: recvURL!) let encodeStr = receiptData?.base64EncodedString(options: .endLineWithLineFeed) MDNetRequest.share.notifyApplePaySuccess(url: UrlApplePay, params: ["order_id":self.orderId!,"receipt":encodeStr!,"transactionId":transaction.transactionIdentifier!,"session_id":MDDataSource.share.session!], successBlock: { MDHubHelper.share.hidHubView() MDHubHelper.share.showError(msg: NSLocalizedString(str:"购买成功")) }, failBlock: { MDHubHelper.share.hidHubView() MDHubHelper.share.showError(msg: NSLocalizedString(str: "通知服务器失败")) }) { (err) in MDHubHelper.share.showError(msg: NSLocalizedString(str: "请求服务器错误")) } SKPaymentQueue.default().finishTransaction(transaction) } func failedTransaction(transaction:SKPaymentTransaction) { SKPaymentQueue.default().finishTransaction(transaction) } func restoreTransaction(transaction:SKPaymentTransaction) { SKPaymentQueue.default().finishTransaction(transaction) }
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!