// // SPIAPManager.swift // MoviaBox // // Created by 佳尔 on 2025/5/6. // import UIKit class SPIAPManager: NSObject { typealias CompletionHandler = ((_ finish: Bool) -> Void) ///内购模版前缀 static let IAPPrefix = "moviabox." static let manager = SPIAPManager() ///成功回调 private var completionHandler: CompletionHandler? private lazy var iapManager: JXIAPManager = { let manager = JXIAPManager() manager.delegate = self return manager }() private var orderCode: String? private var payId: String? ///开始内购 func startRecharge(model: SPPayTemplateItem, handler: CompletionHandler? = nil) { guard let payId = model.id else { handler?(false) return } self.completionHandler = handler let productId = SPIAPManager.IAPPrefix + (model.ios_template_id ?? "") SPHUD.show() SPWalletAPI.requestCreateOrder(payId: payId) { orderModel in guard let orderModel = orderModel else { SPHUD.dismiss() self.completionHandler?(false) return } self.orderCode = orderModel.order_code self.payId = payId self.iapManager.start(productId: productId, orderId: self.orderCode ?? "") } } } //MARK: -------------- JXIAPManagerDelegate -------------- extension SPIAPManager: JXIAPManagerDelegate { func jx_iapPaySuccess(productId: String, receipt: String, transactionIdentifier: String?) { guard let orderCode = self.orderCode, let payId = self.payId else { return } SPWalletAPI.requestVerifyOrder(orderCode: orderCode, payId: payId, productId: productId, purchaseToken: receipt) { model in SPHUD.dismiss() if model?.status == "success" { self.orderCode = nil self.payId = nil self.completionHandler?(true) } else { self.completionHandler?(false) } } } func jx_iapPayFailed(productId: String, code: JXIAPManagerCode) { self.orderCode = nil self.payId = nil SPHUD.dismiss() if code == .noProduct { SPToast.show(text: "Invalid in-app purchase".localized) } self.completionHandler?(false) } }