Swift3 苹果内购

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)
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值