80 lines
2.3 KiB
Swift
80 lines
2.3 KiB
Swift
//
|
|
// 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))
|
|
}
|
|
|
|
}
|