PaySecure Pinless Web Services 2023:07:03:07

<back to all web services

AchRefundRequest

The following routes are available for this service:
POST/ACHRefund
import java.math.*
import java.util.*
import net.servicestack.client.*


@DataContract
open class AchRefundRequest
{
    @DataMember
    var Credentials:RequestorCredentials? = null

    @DataMember
    var TranId:String? = null

    @DataMember
    var Amount:Int? = null

    @DataMember
    var ReferenceKey:String? = null

    @DataMember
    var MerchantDetails:MerchantDescriptor? = null

    @DataMember
    var Custom1:String? = null

    @DataMember
    var Custom2:String? = null

    @DataMember
    var Custom3:String? = null

    @DataMember
    var Custom4:String? = null

    @DataMember
    var Custom5:String? = null

    @DataMember
    var SignatureHash:String? = null

    @DataMember
    var AVS:Avs? = null

    @DataMember
    var ExtendedData:ACHExtendedData? = null
}

open class RequestorCredentials
{
    @Required()
    var MerchantId:String? = null

    @Required()
    var UserName:String? = null

    @Required()
    var Password:String? = null

    @Required()
    var Version:String? = null
}

open class MerchantDescriptor : MerchantDescriptorBase()
{
    var Name:String? = null
    var Address:String? = null
    var City:String? = null
    var State:String? = null
    var Zip:String? = null
    var Country:String? = null
    var CustomerServiceNumber:String? = null
    var MCC:String? = null
    var FNSnum:String? = null
    var Email:String? = null
}

open class MerchantDescriptorBase
{
    var DataElements:MerchantDataElements? = null
}

open class MerchantDataElements
{
    var RefundSettlementTypeDetails:Int? = null
    var SendRecurringPOSEntryModeFeature:Boolean? = null
    var UseOrgPOSCode:Boolean? = null
}

open class Avs
{
    var Address:String? = null
    var City:String? = null
    var State:String? = null
    var Zip:String? = null
    var Country:String? = null
    var Email:String? = null
    var IPAddress:String? = null
    var TelephoneNumber:String? = null
    var TelephoneType:TelephoneType? = null
    var DeliveryMethod:Int? = null
    var FirstName:String? = null
    var MiddleName:String? = null
    var LastName:String? = null
}

enum class TelephoneType
{
    D,
    H,
    N,
    W,
}

@DataContract
open class ACHExtendedData
{
    @DataMember
    var CashbackAmount:Int? = null

    @DataMember
    var ConnectPaySubScriberId:String? = null

    @DataMember
    var OrganizationId:String? = null

    @DataMember
    var DeviceFingerPrint:String? = null

    @DataMember
    var MerchantSessionId:String? = null

    @DataMember
    var CurrencyCode:String? = null

    @DataMember
    var PaymentType:String? = null

    @DataMember
    var VerifyCustomer:Boolean? = null

    @DataMember
    var CustomerExternalId:String? = null

    @DataMember
    var Description:String? = null

    @DataMember
    var CustomerName:String? = null

    @DataMember
    var AddressLine1:String? = null

    @DataMember
    var AddressLine2:String? = null

    @DataMember
    var City:String? = null

    @DataMember
    var State:String? = null

    @DataMember
    var Zip:String? = null

    @DataMember
    var Country:String? = null

    @DataMember
    var Email:String? = null

    @DataMember
    var TelephoneNumber:String? = null

    @DataMember
    var ReturnUrl:String? = null

    @DataMember
    var CancelUrl:String? = null

    @DataMember
    var EstablishData:String? = null

    @DataMember
    var RedirectUrl:String? = null

    @DataMember
    var RetryAttemptCount:Int? = null

    @DataMember
    var SignatureHashVersion:String? = null

    @DataMember
    var DeadlineHashDate:Date? = null
}

@DataContract
open class Refund : PaysecureVersion()
{
    @DataMember
    var TranId:String? = null

    @DataMember
    var ApprovalCode:String? = null

    @DataMember
    var ResponseCode:String? = null

    @DataMember
    var Network:String? = null

    @DataMember
    var ErrorMessage:String? = null

    @DataMember
    var ErrorCode:String? = null
}

@DataContract
open class PaysecureVersion : PaysecureResponseInternal()
{
    @DataMember(EmitDefaultValue=false)
    var LocalDateTime:String? = null

    @DataMember(EmitDefaultValue=false)
    var Token:String? = null

    @DataMember(EmitDefaultValue=false)
    var ExtendedData:ExtendedResponse? = null
}

@DataContract
open class PaysecureResponseInternal
{
    @DataMember(EmitDefaultValue=false)
    var Timestamps:RequestTimestamps? = null
}

@DataContract
open class RequestTimestamps
{
    @DataMember(EmitDefaultValue=false)
    var AppLayer:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var ParentLookup:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var RetryLookup:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var GetCardData:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var CardTokenize:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var CardEncrypt:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var DBInsert:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var BackendProcess:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var DBUpdate:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var ParentUpdate:InOutTimes? = null

    @DataMember(EmitDefaultValue=false)
    var Network:InOutTimes? = null
}

@DataContract
open class InOutTimes
{
}

@DataContract
open class ExtendedResponse
{
    @DataMember(EmitDefaultValue=false)
    var CardAccountUpdater:CardAccountUpdaterDescriptor? = null

    @DataMember(EmitDefaultValue=false)
    var ProductId:String? = null

    @DataMember(EmitDefaultValue=false)
    var NetworkResponseCode:String? = null

    @DataMember(EmitDefaultValue=false)
    var NetworkTransactionId:String? = null

    @DataMember(EmitDefaultValue=false)
    var CHEmailAddrResult:String? = null
}

open class CardAccountUpdaterDescriptor
{
    var CardDataType:CardInfoType? = null
    var CardNumberInfo:String? = null
    var ExpiryDate:String? = null
    var Status:String? = null
    var ErrorCode:String? = null
    var CardToken:String? = null
}

enum class CardInfoType
{
    CardNumber,
    Token,
    Track,
    Emv,
    Encrypted,
    Dpan,
    ApplePay,
    GooglePay,
    SamsungPay,
    CpToken,
    EncryptedEnhanced,
    EncryptedJWE,
}

Kotlin AchRefundRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /ACHRefund HTTP/1.1 
Host: api.paysecure.acculynk.net 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	Credentials: 
	{
		MerchantId: String,
		UserName: String,
		Password: String,
		Version: String
	},
	TranId: String,
	Amount: 0,
	ReferenceKey: String,
	MerchantDetails: 
	{
		Name: String,
		Address: String,
		City: String,
		State: String,
		Zip: String,
		Country: String,
		CustomerServiceNumber: String,
		MCC: String,
		FNSnum: String,
		Email: String,
		DataElements: 
		{
			RefundSettlementTypeDetails: 0,
			SendRecurringPOSEntryModeFeature: False,
			UseOrgPOSCode: False
		}
	},
	Custom1: String,
	Custom2: String,
	Custom3: String,
	Custom4: String,
	Custom5: String,
	SignatureHash: String,
	AVS: 
	{
		Address: String,
		City: String,
		State: String,
		Zip: String,
		Country: String,
		Email: String,
		IPAddress: String,
		TelephoneNumber: String,
		TelephoneType: D,
		DeliveryMethod: 0,
		FirstName: String,
		MiddleName: String,
		LastName: String
	},
	ExtendedData: 
	{
		CashbackAmount: 0,
		ConnectPaySubScriberId: String,
		OrganizationId: String,
		DeviceFingerPrint: String,
		MerchantSessionId: String,
		CurrencyCode: String,
		PaymentType: String,
		VerifyCustomer: False,
		CustomerExternalId: String,
		Description: String,
		CustomerName: String,
		AddressLine1: String,
		AddressLine2: String,
		City: String,
		State: String,
		Zip: String,
		Country: String,
		Email: String,
		TelephoneNumber: String,
		ReturnUrl: String,
		CancelUrl: String,
		EstablishData: String,
		RedirectUrl: String,
		RetryAttemptCount: 0,
		SignatureHashVersion: String,
		DeadlineHashDate: 0001-01-01
	}
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	TranId: String,
	ApprovalCode: String,
	ResponseCode: String,
	Network: String,
	ErrorMessage: String,
	ErrorCode: String,
	LocalDateTime: String,
	Token: String,
	ExtendedData: 
	{
		CardAccountUpdater: 
		{
			CardDataType: CardNumber,
			CardNumberInfo: String,
			ExpiryDate: String,
			Status: String,
			ErrorCode: String,
			CardToken: String
		},
		ProductId: String,
		NetworkResponseCode: String,
		NetworkTransactionId: String,
		CHEmailAddrResult: String
	},
	Timestamps: 
	{
		AppLayer: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		ParentLookup: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		RetryLookup: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		GetCardData: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		CardTokenize: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		CardEncrypt: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		DBInsert: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		BackendProcess: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		DBUpdate: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		ParentUpdate: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		},
		Network: 
		{
			InTime: 0001-01-01,
			OutTime: 0001-01-01
		}
	}
}