diff --git a/Sources/Xendit/Models/DTOs/XenditAuthenticationRequest.swift b/Sources/Xendit/Models/DTOs/XenditAuthenticationRequest.swift index da97f88..024e3a7 100644 --- a/Sources/Xendit/Models/DTOs/XenditAuthenticationRequest.swift +++ b/Sources/Xendit/Models/DTOs/XenditAuthenticationRequest.swift @@ -8,7 +8,7 @@ import Foundation @objcMembers -@objc(XenditAuthenticationRequest) open class XenditAuthenticationRequest: NSObject, JsonSerializable { +@objc(XenditAuthenticationRequest) open class XenditAuthenticationRequest: NSObject { public var amount: NSNumber public var tokenId: String @@ -25,35 +25,4 @@ import Foundation self.currency = currency self.cardData = cardData } - - func toJsonObject() -> [String : Any] { - - var json: [String: Any] = [ - "amount": amount, - "credit_card_token_id": tokenId, - "currency": currency - ] - - if (midLabel != nil) { - json["mid_label"] = midLabel - } - - if (billingDetails != nil) { - json["billing_details"] = billingDetails!.toJsonObject() - } - - if (cardCvn != nil) { - json["card_cvn"] = cardCvn - } - - if (customer != nil) { - json["customer"] = customer!.toJsonObject() - } - - if (cardData != nil) { - json["card_data"] = cardData!.toJsonObject() - } - - return json - } } diff --git a/Sources/Xendit/Models/DTOs/XenditCardHolderInformation.swift b/Sources/Xendit/Models/DTOs/XenditCardHolderInformation.swift index 3439019..e245b14 100644 --- a/Sources/Xendit/Models/DTOs/XenditCardHolderInformation.swift +++ b/Sources/Xendit/Models/DTOs/XenditCardHolderInformation.swift @@ -33,12 +33,16 @@ import Foundation self.cardHolderPhoneNumber = cardHolderPhoneNumber } + func isEmpty() -> Bool { + return self.cardHolderEmail != nil && self.cardHolderFirstName != nil && self.cardHolderLastName != nil && self.cardHolderPhoneNumber != nil + } + func toJsonObject() -> [String : Any] { var json: [String: Any] = [:] if cardHolderFirstName != nil { json["card_holder_first_name"] = cardHolderFirstName } if cardHolderLastName != nil { json["card_holder_last_name"] = cardHolderLastName } if cardHolderEmail != nil { json["card_holder_email"] = cardHolderEmail } - if cardHolderPhoneNumber != nil { json["card_holder_mobile_number"] = cardHolderPhoneNumber } + if cardHolderPhoneNumber != nil { json["card_holder_phone_number"] = cardHolderPhoneNumber } return json } diff --git a/Sources/Xendit/Models/DTOs/XenditTokenizationRequest.swift b/Sources/Xendit/Models/DTOs/XenditTokenizationRequest.swift index 72a14a1..6db1ef4 100644 --- a/Sources/Xendit/Models/DTOs/XenditTokenizationRequest.swift +++ b/Sources/Xendit/Models/DTOs/XenditTokenizationRequest.swift @@ -54,13 +54,25 @@ import Foundation var cardDataJson: [String: String] = [ "account_number": cardData.cardNumber, "exp_month": cardData.cardExpMonth, - "exp_year": cardData.cardExpYear, - "card_holder_first_name": cardData.cardHolderFirstName ?? "", - "card_holder_last_name": cardData.cardHolderLastName ?? "", - "card_holder_email": cardData.cardHolderEmail ?? "", - "card_holder_phone_number": cardData.cardHolderPhoneNumber ?? "" + "exp_year": cardData.cardExpYear ] + if let firstName = cardData.cardHolderFirstName, !firstName.isEmpty { + cardDataJson["card_holder_first_name"] = firstName + } + + if let lastName = cardData.cardHolderLastName, !lastName.isEmpty { + cardDataJson["card_holder_last_name"] = lastName + } + + if let email = cardData.cardHolderEmail, !email.isEmpty { + cardDataJson["card_holder_email"] = email + } + + if let phoneNumber = cardData.cardHolderPhoneNumber, !phoneNumber.isEmpty { + cardDataJson["card_holder_mobile_number"] = phoneNumber + } + if cardData.cardCvn != nil && cardData.cardCvn != "" { cardDataJson["cvn"] = cardData.cardCvn } diff --git a/Sources/Xendit/XDTCards.swift b/Sources/Xendit/XDTCards.swift index 05b7235..234a020 100644 --- a/Sources/Xendit/XDTCards.swift +++ b/Sources/Xendit/XDTCards.swift @@ -213,8 +213,8 @@ public class XDTCards: CanTokenize, CanAuthenticate { requestBody["card_cvn"] = cardCvn } - if let cardData { - requestBody["card_data"] = cardData + if let cardData, !cardData.isEmpty() { + requestBody["card_data"] = cardData.toJsonObject() } var extraHeaders: [String: String] = [:] diff --git a/Sources/Xendit/Xendit.swift b/Sources/Xendit/Xendit.swift index a444a4a..893e054 100755 --- a/Sources/Xendit/Xendit.swift +++ b/Sources/Xendit/Xendit.swift @@ -53,7 +53,8 @@ import XenditObjC let amount = authenticationRequest.amount let customer = authenticationRequest.customer let currency = authenticationRequest.currency - XDTCards.createAuthentication(fromViewController: fromViewController, tokenId: tokenId, amount: amount, currency: currency, onBehalfOf: onBehalfOf, customer: customer, cardCvn: authenticationRequest.cardCvn, completion: completion) + let cardData = authenticationRequest.cardData + XDTCards.createAuthentication(fromViewController: fromViewController, tokenId: tokenId, amount: amount, currency: currency, onBehalfOf: onBehalfOf, customer: customer, cardCvn: authenticationRequest.cardCvn, cardData: cardData, completion: completion) } @available(*, deprecated, message: "Use createToken(UIViewController, XenditTokenizationRequest, String, Callback) instead")