/* Options: Date: 2024-11-21 05:34:26 SwiftVersion: 5.0 Version: 6.10 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.paysecure.acculynk.net //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: WICSaleRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/WICSale", "POST") // @DataContract public class WICSaleRequest : IReturn, Codable { public typealias Return = WICSale // @DataMember public var credentials:RequestorCredentials // @DataMember public var amount:Int // @DataMember public var discountAmount:Int // @DataMember public var tranId:String // @DataMember public var referenceKey:String // @DataMember public var currencyCode:String // @DataMember public var deliveryAddress:Avs // @DataMember public var merchantDetails:MerchantDescriptor // @DataMember public var wicProducts:[WICProduct] = [] // @DataMember public var custom1:String // @DataMember public var custom2:String // @DataMember public var custom3:String // @DataMember public var custom4:String // @DataMember public var custom5:String // @DataMember public var signatureHash:String // @DataMember public var extendedData:ExtendedData required public init(){} } // @DataContract public class WICSale : PaysecureVersion { // @DataMember public var approvalCode:String // @DataMember public var tranId:String // @DataMember public var errorMessage:String // @DataMember public var errorCode:String // @DataMember public var approvedAmount:Int // @DataMember public var discountAmount:Int // @DataMember public var network:String // @DataMember public var earliestBenefitExpirationDate:String // @DataMember public var wicBalances:[WICBalance] = [] // @DataMember public var wicProducts:[WICProduct] = [] // @DataMember public var responseCode:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case approvalCode case tranId case errorMessage case errorCode case approvedAmount case discountAmount case network case earliestBenefitExpirationDate case wicBalances case wicProducts case responseCode } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) approvalCode = try container.decodeIfPresent(String.self, forKey: .approvalCode) tranId = try container.decodeIfPresent(String.self, forKey: .tranId) errorMessage = try container.decodeIfPresent(String.self, forKey: .errorMessage) errorCode = try container.decodeIfPresent(String.self, forKey: .errorCode) approvedAmount = try container.decodeIfPresent(Int.self, forKey: .approvedAmount) discountAmount = try container.decodeIfPresent(Int.self, forKey: .discountAmount) network = try container.decodeIfPresent(String.self, forKey: .network) earliestBenefitExpirationDate = try container.decodeIfPresent(String.self, forKey: .earliestBenefitExpirationDate) wicBalances = try container.decodeIfPresent([WICBalance].self, forKey: .wicBalances) ?? [] wicProducts = try container.decodeIfPresent([WICProduct].self, forKey: .wicProducts) ?? [] responseCode = try container.decodeIfPresent(String.self, forKey: .responseCode) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if approvalCode != nil { try container.encode(approvalCode, forKey: .approvalCode) } if tranId != nil { try container.encode(tranId, forKey: .tranId) } if errorMessage != nil { try container.encode(errorMessage, forKey: .errorMessage) } if errorCode != nil { try container.encode(errorCode, forKey: .errorCode) } if approvedAmount != nil { try container.encode(approvedAmount, forKey: .approvedAmount) } if discountAmount != nil { try container.encode(discountAmount, forKey: .discountAmount) } if network != nil { try container.encode(network, forKey: .network) } if earliestBenefitExpirationDate != nil { try container.encode(earliestBenefitExpirationDate, forKey: .earliestBenefitExpirationDate) } if wicBalances.count > 0 { try container.encode(wicBalances, forKey: .wicBalances) } if wicProducts.count > 0 { try container.encode(wicProducts, forKey: .wicProducts) } if responseCode != nil { try container.encode(responseCode, forKey: .responseCode) } } } public class RequestorCredentials : Codable { // @Required() public var merchantId:String? // @Required() public var userName:String? // @Required() public var password:String? // @Required() public var version:String? required public init(){} } public class Avs : Codable { public var address:String public var city:String public var state:String public var zip:String public var country:String public var email:String public var ipAddress:String public var telephoneNumber:String public var telephoneType:TelephoneType public var deliveryMethod:Int public var firstName:String public var middleName:String public var lastName:String required public init(){} } public class MerchantDescriptor : MerchantDescriptorBase { public var name:String public var address:String public var city:String public var state:String public var zip:String public var country:String public var customerServiceNumber:String public var mcc:String public var fnSnum:String public var email:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case name case address case city case state case zip case country case customerServiceNumber case mcc case fnSnum case email } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) name = try container.decodeIfPresent(String.self, forKey: .name) address = try container.decodeIfPresent(String.self, forKey: .address) city = try container.decodeIfPresent(String.self, forKey: .city) state = try container.decodeIfPresent(String.self, forKey: .state) zip = try container.decodeIfPresent(String.self, forKey: .zip) country = try container.decodeIfPresent(String.self, forKey: .country) customerServiceNumber = try container.decodeIfPresent(String.self, forKey: .customerServiceNumber) mcc = try container.decodeIfPresent(String.self, forKey: .mcc) fnSnum = try container.decodeIfPresent(String.self, forKey: .fnSnum) email = try container.decodeIfPresent(String.self, forKey: .email) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if name != nil { try container.encode(name, forKey: .name) } if address != nil { try container.encode(address, forKey: .address) } if city != nil { try container.encode(city, forKey: .city) } if state != nil { try container.encode(state, forKey: .state) } if zip != nil { try container.encode(zip, forKey: .zip) } if country != nil { try container.encode(country, forKey: .country) } if customerServiceNumber != nil { try container.encode(customerServiceNumber, forKey: .customerServiceNumber) } if mcc != nil { try container.encode(mcc, forKey: .mcc) } if fnSnum != nil { try container.encode(fnSnum, forKey: .fnSnum) } if email != nil { try container.encode(email, forKey: .email) } } } // @DataContract public class ExtendedData : Codable { // @DataMember public var track2DataForEMVTransaction:String // @DataMember public var senderInfo:SenderInfo // @DataMember public var cashbackAmount:Int // @DataMember public var network:NetworkName // @DataMember public var receiverInfo:ReceiverInfo // @DataMember public var billPayGroup:BillPayGroup // @DataMember public var walletData:WalletDescriptor // @DataMember public var secureData:SecureDescriptor // @DataMember public var level2Data:Level2Descriptor // @DataMember public var paymentFacilitatorData:PaymentFacilitatorDescriptor // @DataMember public var tokenData:TokenDescriptor // @DataMember public var otpTranId:String // @DataMember public var currentShipment:Int // @DataMember public var totalShipments:Int // @DataMember public var isTokenRequested:Bool // @DataMember public var cardonFileIndicator:CardonFileIndicatorDescriptor // @DataMember public var cardAccountUpdater:CardAccountUpdaterInfo // @DataMember public var retryAttemptCount:Int // @DataMember public var totalAuthAmount:Int // @DataMember public var signatureHashVersion:String // @DataMember public var orderTypeDetail:OrderTypeInfo // @DataMember public var billPayGroupIndicator:BillPayGroupIndicator // @DataMember public var chargeTypeDetail:ChargeTypeInfo // @DataMember public var safEligible:SAFEligibleFlag required public init(){} } public class WICProduct : Codable { public var productCodeInd:WICProductCodeInd public var productCode:String public var itemPrice:Int public var itemQuantity:Int public var actionCode:WICActionCode public var originalItemPrice:Int public var originalItemQuantity:Int required public init(){} } // @DataContract public class ExtendedResponse : Codable { // @DataMember(EmitDefaultValue=false) public var cardAccountUpdater:CardAccountUpdaterDescriptor // @DataMember(EmitDefaultValue=false) public var productId:String // @DataMember(EmitDefaultValue=false) public var networkResponseCode:String // @DataMember(EmitDefaultValue=false) public var networkTransactionId:String // @DataMember(EmitDefaultValue=false) public var chEmailAddrResult:String required public init(){} } // @DataContract public class RequestTimestamps : Codable { // @DataMember(EmitDefaultValue=false) public var appLayer:InOutTimes // @DataMember(EmitDefaultValue=false) public var parentLookup:InOutTimes // @DataMember(EmitDefaultValue=false) public var retryLookup:InOutTimes // @DataMember(EmitDefaultValue=false) public var getCardData:InOutTimes // @DataMember(EmitDefaultValue=false) public var cardTokenize:InOutTimes // @DataMember(EmitDefaultValue=false) public var cardEncrypt:InOutTimes // @DataMember(EmitDefaultValue=false) public var dbInsert:InOutTimes // @DataMember(EmitDefaultValue=false) public var backendProcess:InOutTimes // @DataMember(EmitDefaultValue=false) public var dbUpdate:InOutTimes // @DataMember(EmitDefaultValue=false) public var parentUpdate:InOutTimes // @DataMember(EmitDefaultValue=false) public var network:InOutTimes required public init(){} } // @DataContract public class PaysecureVersion : PaysecureResponseInternal { // @DataMember(EmitDefaultValue=false) public var localDateTime:String // @DataMember(EmitDefaultValue=false) public var token:String // @DataMember(EmitDefaultValue=false) public var extendedData:ExtendedResponse required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case localDateTime case token case extendedData } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) localDateTime = try container.decodeIfPresent(String.self, forKey: .localDateTime) token = try container.decodeIfPresent(String.self, forKey: .token) extendedData = try container.decodeIfPresent(ExtendedResponse.self, forKey: .extendedData) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if localDateTime != nil { try container.encode(localDateTime, forKey: .localDateTime) } if token != nil { try container.encode(token, forKey: .token) } if extendedData != nil { try container.encode(extendedData, forKey: .extendedData) } } } // @DataContract public class PaysecureResponseInternal : Codable { // @DataMember(EmitDefaultValue=false) public var timestamps:RequestTimestamps required public init(){} } public class WICBalance : Codable { public var wicCategory:String public var wicSubcategory:String public var wicQuantity:Int required public init(){} } public enum CardInfoType : String, Codable { case CardNumber case Token case Track case EMV case Encrypted case DPAN case ApplePay case GooglePay case SamsungPay case CPToken case EncryptedEnhanced case EncryptedJWE } public enum TelephoneType : String, Codable { case D case H case N case W } public class MerchantDataElements : Codable { public var refundSettlementTypeDetails:Int public var sendRecurringPOSEntryModeFeature:Bool public var useOrgPOSCode:Bool required public init(){} } public class MerchantDescriptorBase : Codable { public var dataElements:MerchantDataElements required public init(){} } public class SenderInfo : Codable { public var referenceNumber:String public var accountNumber:String /** * Name Format FirstName{Space}LastName. For Example :- Alvaro Morata */ public var name:String public var address:String public var city:String public var state:String public var country:String /** * DateOfBirth Format MMDDYYYY. For Example :- 05051960 */ public var dateOfBirth:String public var zip:String public var phoneNumber:String public var fundingSource:FundingSourceType required public init(){} } public enum NetworkName : String, Codable { case Default case NYCE case CU24 case XCEL case STAR case PULS case SHZM case VISA case MAST case DISC case AMEX case ALIP case UPIN case STAC case STNE case MAES case INTL } public class ReceiverInfo : Codable { public var referenceNumber:String public var accountNumber:String /** * Name Format FirstName{Space}LastName. For Example :- Alvaro Morata */ public var name:String public var address:String public var city:String public var state:String public var country:String public var zip:String public var phoneNumber:String required public init(){} } public enum BillPayGroup : String, Codable { case Default case Single case Recurring case Installment case Deferred } public class WalletDescriptor : Codable { public var type:String public var encryptedData:String public var applicationDataHash:String public var ephemeralPublicKey:String public var publicKeyHash:String public var transactionId:String public var signature:String public var version:String public var applicationData:String public var merchantIdentifier:String public var specialPayment:String public var digitalWalletIndicator:DigitalWalletInfo required public init(){} } public class SecureDescriptor : Codable { public var cavv:String public var secureTransactionId:String required public init(){} } public class Level2Descriptor : Codable { public var taxDetails:TaxIndicator public var merchantReferenceNumber:String public var merchantTaxId:String public var orderNumber:String public var taxAmount:Int public var destinationPostalCode:String public var productDescription:String required public init(){} } public class PaymentFacilitatorDescriptor : Codable { public var paymentFacilitatorIndicator:String public var pfPhoneNumber:String public var subMerchID:String public var sellerID:String required public init(){} } public class TokenDescriptor : Codable { public var tokenType:TokenTypes public var tokenCryptogramData1:String public var tokenCryptogramData2:String required public init(){} } public class CardonFileIndicatorDescriptor : Codable { public var cardonFile:CardonFileInfo public var storedCredentialIndicator:StoredCredentialIndicatorInfo public var transactionInitiate:TransactionInitiateInfo public var scheduleIndicator:ScheduleIndicatorInfo public var networkTransactionId:String required public init(){} } public enum CardAccountUpdaterInfo : String, Codable { case Default case Supported case NotSupported } public enum OrderTypeInfo : String, Codable { case Default case Standing case Subscription } public class BillPayGroupIndicator : Codable { public var mitTotalPaymentCount:String public var mitAmountType:String public var mitAmount:String public var mitUniqueID:String public var mitFrequency:String public var mitValidationFlag:String public var mitValidationReference:String public var mitSequenceIndicator:String required public init(){} } public enum ChargeTypeInfo : String, Codable { case Default case PartialShipment case Delayed case NoShow case Resubmission } public enum SAFEligibleFlag : String, Codable { case Default case True case False } public enum WICProductCodeInd : Int, Codable { case PLU = 1 case UPC = 2 } public enum WICActionCode : String, Codable { case Approved case CategoryNotPrescribed case SubcategoryNotPrescribed case InsufficientUnits case ProduceCodeNotSubscribed case ApprovedLowerPrice } public class CardAccountUpdaterDescriptor : Codable { public var cardDataType:CardInfoType public var cardNumberInfo:String public var expiryDate:String public var status:String public var errorCode:String public var cardToken:String required public init(){} } // @DataContract public class InOutTimes : Codable { required public init(){} } public enum FundingSourceType : String, Codable { case DepositAccount case Credit case Debit case Prepaid } public enum DigitalWalletInfo : String, Codable { case Default case Staged case Passthrough } public enum TaxIndicator : String, Codable { case Default case NoTaxInfoProvided case TaxInfoProvided case TaxExemptItem } public enum TokenTypes : String, Codable { case Default case UCAF case DSRP case UCAFDSRP case VisaVerified case DigitalWallet case VisaVerifiedDigitalWallet } public enum CardonFileInfo : String, Codable { case Default case Supported case NotSupported } public enum StoredCredentialIndicatorInfo : String, Codable { case Default case Initial case Subsequent } public enum TransactionInitiateInfo : String, Codable { case Default case Merchant case Terminal case Customer } public enum ScheduleIndicatorInfo : String, Codable { case Default case Scheduled case Unscheduled }