pscbonline-ios/PSCBOnline/Sources/Serializable/PKPaymentToken+Serializable...

80 lines
2.3 KiB
Swift
Raw Normal View History

2024-07-08 15:20:00 +03:00
//
// PKPaymentToken+Serializable.swift
// PSCB-OOS-iOS
//
// Created by OA on 17.10.2020.
//
import Foundation
import PassKit
// MARK: - Comfront to serializable
extension PKPaymentToken: Serializable {
// Serializes token to a JSONLike dictionary
public func serializeToJSON() -> JSONDict {
let paymentJson: JSONDict? = try? JSONSerialization.jsonObject(
with: self.paymentData, options: .mutableContainers
) as? JSONDict
var paymentType: String = "debit"
var methodAndNetwork: JSONDict = [
"network": "",
"type": paymentType,
"displayName": ""
]
if #available(iOS 9.0, *) {
methodAndNetwork = [
"network": self.paymentMethod.network?.rawValue ?? "",
"type": paymentType,
"displayName": self.paymentMethod.displayName ?? ""
]
switch self.paymentMethod.type {
case .debit:
paymentType = "debit"
case .credit:
paymentType = "credit"
case .store:
paymentType = "store"
case .prepaid:
paymentType = "prepaid"
default:
paymentType = "unknown"
}
}
return [
"paymentData": paymentJson,
"transactionIdentifier": self.transactionIdentifier,
"paymentMethod": methodAndNetwork
] as JSONDict
}
}
// MARK: - To string cryptogram
extension PKPaymentToken {
private func paymentJSONData() -> JSONDict? {
let json = self.serializeToJSON()
let data = json["paymentData"] as! JSONDict?
return data
}
/// Creates a Base64 encoded cryptogram string accepted by PSCB OOS protocol
/// May throw JSON serialization errors if token could not be converted to JSON string before writing a cryptogram.
///
/// - Returns: Base64 encoded string
public func toCryptogramString() throws -> String {
let json = self.paymentJSONData()
let data = try JSONSerialization.data(withJSONObject: json!, options: [])
// let string = String(data: data, encoding: .utf8)!
return data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
}
}