pscbonline-ios/PSCBOnline/Sources/PaymentHandler.swift

114 lines
3.7 KiB
Swift
Raw Permalink Normal View History

2024-07-08 15:20:00 +03:00
//
// PaymentHandler.swift
// PSCB-OOS-iOS
//
// Created by Antonov Ilia on 16.10.2020.
//
import Foundation
import PassKit
public typealias PaymentCompletionHandler = (Bool) -> Void
public class ApplePayHandler: NSObject {
static let supportedNetworks: [PKPaymentNetwork] = [.visa, .masterCard]
// MARK: - Fields
public let merchantId: String
public let merchantKey: String
public let summaryItems: [PKPaymentSummaryItem]
// MARK: - Properties
var paymentController: PKPaymentAuthorizationController?
var paymentStatus: PKPaymentAuthorizationStatus = .failure
var completionHandler: PaymentCompletionHandler?
var payment: Payment?
public init?(merchantId: String, merchantKey: String, summaryItems: [PKPaymentSummaryItem]) {
guard PKPaymentAuthorizationController.canMakePayments(usingNetworks: Self.supportedNetworks) else {
print("Could not instantiate ApplePayHandler. Cannot make payments with provided networks")
return nil
}
self.merchantId = merchantId
self.merchantKey = merchantKey
self.summaryItems = summaryItems
}
public func handle(payment: Payment, completion: @escaping PaymentCompletionHandler) {
self.completionHandler = completion
self.payment = payment
NSLog("About to handle payment: \(payment)")
paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController?.delegate = self
paymentController?.present { (presented) in
if !presented {
NSLog("Could not present PKPaymentAuthorizationController")
self.completionHandler!(false)
} else {
NSLog("PKPaymentAuthorizationController presented")
}
}
}
// MARK: - Private details
private var paymentRequest: PKPaymentRequest {
let request = PKPaymentRequest()
request.countryCode = "RU"
request.merchantIdentifier = "merchant.pscb.pay"
request.currencyCode = "RUB"
request.supportedNetworks = Self.supportedNetworks
request.merchantCapabilities = .capability3DS
request.paymentSummaryItems = summaryItems
return request
}
}
// MARK: - Extension for PKPaymentAuthorizationControllerDelegate
extension ApplePayHandler: PKPaymentAuthorizationControllerDelegate {
public func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController,
didAuthorizePayment payment: PKPayment,
completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
// print("Payment string")
// let paymentString = try! payment.serializeToString()
// print(paymentString)
//
// //
//
// self.paymentStatus = .success
completion(PKPaymentAuthorizationStatus.success)
}
@available(iOS 11.0, *)
public func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
//
// NSLog("About to send request to backend")
// let paymentString = try! payment.serializeToString()
//
// NSLog("Payment JSON: \(paymentString)")
//
let result = PKPaymentAuthorizationResult(status: .success, errors: nil)
completion(result)
self.completionHandler?(true)
}
public func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
controller.dismiss(completion: nil)
}
}