POST | /EbtRefund |
---|
import Foundation
import ServiceStack
// @DataContract
public class EbtRefundRequest : Codable
{
// @DataMember
public var credentials:RequestorCredentials
// @DataMember
public var tranId:String
// @DataMember
public var amount:Int
// @DataMember
public var expirationDate:String
// @DataMember
public var referenceKey:String
// @DataMember
public var merchantDetails:MerchantDescriptor
// @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
// @DataMember
public var integratorID:String
required public init(){}
}
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 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) }
}
}
public class MerchantDescriptorBase : Codable
{
public var dataElements:MerchantDataElements
required public init(){}
}
public class MerchantDataElements : Codable
{
public var refundSettlementTypeDetails:Int
public var sendRecurringPOSEntryModeFeature:Bool
public var useOrgPOSCode:Bool
required public init(){}
}
// @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 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 FundingSourceType : String, Codable
{
case DepositAccount
case Credit
case Debit
case Prepaid
}
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 enum DigitalWalletInfo : String, Codable
{
case Default
case Staged
case Passthrough
}
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 enum TaxIndicator : String, Codable
{
case Default
case NoTaxInfoProvided
case TaxInfoProvided
case TaxExemptItem
}
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 enum TokenTypes : String, Codable
{
case Default
case UCAF
case DSRP
case UCAFDSRP
case VisaVerified
case DigitalWallet
case VisaVerifiedDigitalWallet
}
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 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
}
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
}
// @DataContract
public class EbtRefund : PaysecureResponseInternal
{
// @DataMember
public var tranId:String
// @DataMember
public var approvalCode:String
// @DataMember
public var responseCode:String
// @DataMember
public var remainingBalanceCash:Int
// @DataMember
public var cashCurrencyCode:String
// @DataMember
public var remainingBalanceSNAP:Int
// @DataMember
public var snapCurrencyCode:String
// @DataMember
public var errorMessage:String
// @DataMember
public var errorCode:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case tranId
case approvalCode
case responseCode
case remainingBalanceCash
case cashCurrencyCode
case remainingBalanceSNAP
case snapCurrencyCode
case errorMessage
case errorCode
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
tranId = try container.decodeIfPresent(String.self, forKey: .tranId)
approvalCode = try container.decodeIfPresent(String.self, forKey: .approvalCode)
responseCode = try container.decodeIfPresent(String.self, forKey: .responseCode)
remainingBalanceCash = try container.decodeIfPresent(Int.self, forKey: .remainingBalanceCash)
cashCurrencyCode = try container.decodeIfPresent(String.self, forKey: .cashCurrencyCode)
remainingBalanceSNAP = try container.decodeIfPresent(Int.self, forKey: .remainingBalanceSNAP)
snapCurrencyCode = try container.decodeIfPresent(String.self, forKey: .snapCurrencyCode)
errorMessage = try container.decodeIfPresent(String.self, forKey: .errorMessage)
errorCode = try container.decodeIfPresent(String.self, forKey: .errorCode)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if tranId != nil { try container.encode(tranId, forKey: .tranId) }
if approvalCode != nil { try container.encode(approvalCode, forKey: .approvalCode) }
if responseCode != nil { try container.encode(responseCode, forKey: .responseCode) }
if remainingBalanceCash != nil { try container.encode(remainingBalanceCash, forKey: .remainingBalanceCash) }
if cashCurrencyCode != nil { try container.encode(cashCurrencyCode, forKey: .cashCurrencyCode) }
if remainingBalanceSNAP != nil { try container.encode(remainingBalanceSNAP, forKey: .remainingBalanceSNAP) }
if snapCurrencyCode != nil { try container.encode(snapCurrencyCode, forKey: .snapCurrencyCode) }
if errorMessage != nil { try container.encode(errorMessage, forKey: .errorMessage) }
if errorCode != nil { try container.encode(errorCode, forKey: .errorCode) }
}
}
// @DataContract
public class PaysecureResponseInternal : Codable
{
// @DataMember(EmitDefaultValue=false)
public var timestamps:RequestTimestamps
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 InOutTimes : Codable
{
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /EbtRefund HTTP/1.1
Host: api.paysecure.acculynk.net
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<EbtRefundRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
<Amount>0</Amount>
<Credentials>
<MerchantId>String</MerchantId>
<Password>String</Password>
<UserName>String</UserName>
<Version>String</Version>
</Credentials>
<Custom1>String</Custom1>
<Custom2>String</Custom2>
<Custom3>String</Custom3>
<Custom4>String</Custom4>
<Custom5>String</Custom5>
<ExpirationDate>String</ExpirationDate>
<ExtendedData>
<BillPayGroup>Default</BillPayGroup>
<BillPayGroupIndicator>
<MITAmount>String</MITAmount>
<MITAmountType>String</MITAmountType>
<MITFrequency>String</MITFrequency>
<MITSequenceIndicator>String</MITSequenceIndicator>
<MITTotalPaymentCount>String</MITTotalPaymentCount>
<MITUniqueID>String</MITUniqueID>
<MITValidationFlag>String</MITValidationFlag>
<MITValidationReference>String</MITValidationReference>
</BillPayGroupIndicator>
<CardAccountUpdater>Default</CardAccountUpdater>
<CardonFileIndicator>
<CardonFile>Default</CardonFile>
<NetworkTransactionId>String</NetworkTransactionId>
<ScheduleIndicator>Default</ScheduleIndicator>
<StoredCredentialIndicator>Default</StoredCredentialIndicator>
<TransactionInitiate>Default</TransactionInitiate>
</CardonFileIndicator>
<CashbackAmount>0</CashbackAmount>
<ChargeTypeDetail>Default</ChargeTypeDetail>
<CurrentShipment>0</CurrentShipment>
<IsTokenRequested>false</IsTokenRequested>
<Level2Data>
<DestinationPostalCode>String</DestinationPostalCode>
<MerchantReferenceNumber>String</MerchantReferenceNumber>
<MerchantTaxId>String</MerchantTaxId>
<OrderNumber>String</OrderNumber>
<ProductDescription>String</ProductDescription>
<TaxAmount>0</TaxAmount>
<TaxDetails>Default</TaxDetails>
</Level2Data>
<Network>Default</Network>
<OTPTranId>String</OTPTranId>
<OrderTypeDetail>Default</OrderTypeDetail>
<PaymentFacilitatorData>
<PFPhoneNumber>String</PFPhoneNumber>
<PaymentFacilitatorIndicator>String</PaymentFacilitatorIndicator>
<SellerID>String</SellerID>
<SubMerchID>String</SubMerchID>
</PaymentFacilitatorData>
<ReceiverInfo>
<AccountNumber>String</AccountNumber>
<Address>String</Address>
<City>String</City>
<Country>String</Country>
<Name>String</Name>
<PhoneNumber>String</PhoneNumber>
<ReferenceNumber>String</ReferenceNumber>
<State>String</State>
<Zip>String</Zip>
</ReceiverInfo>
<RetryAttemptCount>0</RetryAttemptCount>
<SAFEligible>Default</SAFEligible>
<SecureData>
<CAVV>String</CAVV>
<SecureTransactionId>String</SecureTransactionId>
</SecureData>
<SenderInfo>
<AccountNumber>String</AccountNumber>
<Address>String</Address>
<City>String</City>
<Country>String</Country>
<DateOfBirth>String</DateOfBirth>
<FundingSource>DepositAccount</FundingSource>
<Name>String</Name>
<PhoneNumber>String</PhoneNumber>
<ReferenceNumber>String</ReferenceNumber>
<State>String</State>
<Zip>String</Zip>
</SenderInfo>
<SignatureHashVersion>String</SignatureHashVersion>
<TokenData>
<TokenCryptogramData1>String</TokenCryptogramData1>
<TokenCryptogramData2>String</TokenCryptogramData2>
<TokenType>Default</TokenType>
</TokenData>
<TotalAuthAmount>0</TotalAuthAmount>
<TotalShipments>0</TotalShipments>
<Track2DataForEMVTransaction>String</Track2DataForEMVTransaction>
<WalletData>
<ApplicationData>String</ApplicationData>
<ApplicationDataHash>String</ApplicationDataHash>
<DigitalWalletIndicator>Default</DigitalWalletIndicator>
<EncryptedData>String</EncryptedData>
<EphemeralPublicKey>String</EphemeralPublicKey>
<MerchantIdentifier>String</MerchantIdentifier>
<PublicKeyHash>String</PublicKeyHash>
<Signature>String</Signature>
<SpecialPayment>String</SpecialPayment>
<TransactionId>String</TransactionId>
<Type>String</Type>
<Version>String</Version>
</WalletData>
</ExtendedData>
<IntegratorID>String</IntegratorID>
<MerchantDetails>
<DataElements>
<RefundSettlementTypeDetails>0</RefundSettlementTypeDetails>
<SendRecurringPOSEntryModeFeature>false</SendRecurringPOSEntryModeFeature>
<UseOrgPOSCode>false</UseOrgPOSCode>
</DataElements>
<Address>String</Address>
<City>String</City>
<Country>String</Country>
<CustomerServiceNumber>String</CustomerServiceNumber>
<Email>String</Email>
<FNSnum>String</FNSnum>
<MCC>String</MCC>
<Name>String</Name>
<State>String</State>
<Zip>String</Zip>
</MerchantDetails>
<ReferenceKey>String</ReferenceKey>
<SignatureHash>String</SignatureHash>
<TranId>String</TranId>
</EbtRefundRequest>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <EbtRefund xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types"> <Timestamps> <AppLayer> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </AppLayer> <BackendProcess> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </BackendProcess> <CardEncrypt> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </CardEncrypt> <CardTokenize> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </CardTokenize> <DBInsert> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </DBInsert> <DBUpdate> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </DBUpdate> <GetCardData> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </GetCardData> <Network> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </Network> <ParentLookup> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </ParentLookup> <ParentUpdate> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </ParentUpdate> <RetryLookup> <InTime>0001-01-01T00:00:00</InTime> <OutTime>0001-01-01T00:00:00</OutTime> </RetryLookup> </Timestamps> <ApprovalCode>String</ApprovalCode> <CashCurrencyCode>String</CashCurrencyCode> <ErrorCode>String</ErrorCode> <ErrorMessage>String</ErrorMessage> <RemainingBalanceCash>0</RemainingBalanceCash> <RemainingBalanceSNAP>0</RemainingBalanceSNAP> <ResponseCode>String</ResponseCode> <SNAPCurrencyCode>String</SNAPCurrencyCode> <TranId>String</TranId> </EbtRefund>