PaySecure Pinless Web Services 2023:07:03:07

<back to all web services

AchAuthorizeDebitRequest

The following routes are available for this service:
POST/ACHDebit
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InOutTimes:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RequestTimestamps:
    app_layer: Optional[InOutTimes] = None
    parent_lookup: Optional[InOutTimes] = None
    retry_lookup: Optional[InOutTimes] = None
    get_card_data: Optional[InOutTimes] = None
    card_tokenize: Optional[InOutTimes] = None
    card_encrypt: Optional[InOutTimes] = None
    db_insert: Optional[InOutTimes] = None
    backend_process: Optional[InOutTimes] = None
    db_update: Optional[InOutTimes] = None
    parent_update: Optional[InOutTimes] = None
    network: Optional[InOutTimes] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaysecureResponseInternal:
    timestamps: Optional[RequestTimestamps] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ACHExtendedDataResponse:
    network_response_code: Optional[str] = None
    network_error_code: Optional[str] = None
    decline_reference_code: Optional[str] = None
    network_transaction_id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AchPaysecureVersion(PaysecureResponseInternal):
    local_date_time: Optional[str] = None
    extended_data: Optional[ACHExtendedDataResponse] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AchProviderResponse:
    network_response_code: Optional[str] = None
    transaction_status_code: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AchAuthorizeDebit(AchPaysecureVersion):
    tran_id: Optional[str] = None
    approval_code: Optional[str] = None
    response_code: Optional[str] = None
    network: Optional[str] = None
    approved_amount: int = 0
    error_message: Optional[str] = None
    error_code: Optional[str] = None
    ach_provider_details: Optional[AchProviderResponse] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RequestorCredentials:
    # @Required()
    merchant_id: Optional[str] = None

    # @Required()
    user_name: Optional[str] = None

    # @Required()
    password: Optional[str] = None

    # @Required()
    version: Optional[str] = None


class ACHType(str, Enum):
    TOKEN = 'Token'
    CP_TOKEN = 'CPToken'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ACHTokenDescriptor:
    ach_token_type: Optional[ACHType] = None
    ach_token_data: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ACHExtendedData:
    cashback_amount: int = 0
    connect_pay_sub_scriber_id: Optional[str] = None
    organization_id: Optional[str] = None
    device_finger_print: Optional[str] = None
    merchant_session_id: Optional[str] = None
    currency_code: Optional[str] = None
    payment_type: Optional[str] = None
    verify_customer: bool = False
    customer_external_id: Optional[str] = None
    description: Optional[str] = None
    customer_name: Optional[str] = None
    address_line1: Optional[str] = None
    address_line2: Optional[str] = None
    city: Optional[str] = None
    state: Optional[str] = None
    zip: Optional[str] = None
    country: Optional[str] = None
    email: Optional[str] = None
    telephone_number: Optional[str] = None
    return_url: Optional[str] = None
    cancel_url: Optional[str] = None
    establish_data: Optional[str] = None
    redirect_url: Optional[str] = None
    retry_attempt_count: int = 0
    signature_hash_version: Optional[str] = None
    deadline_hash_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AchAuthorizeDebitRequest:
    credentials: Optional[RequestorCredentials] = None
    ach_token: Optional[ACHTokenDescriptor] = None
    amount: int = 0
    reference_key: Optional[str] = None
    custom1: Optional[str] = None
    custom2: Optional[str] = None
    custom3: Optional[str] = None
    custom4: Optional[str] = None
    custom5: Optional[str] = None
    signature_hash: Optional[str] = None
    currency_code: Optional[str] = None
    extended_data: Optional[ACHExtendedData] = None

Python AchAuthorizeDebitRequest 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 /ACHDebit 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
	},
	ACHToken: 
	{
		ACHTokenType: Token,
		ACHTokenData: String
	},
	Amount: 0,
	ReferenceKey: String,
	Custom1: String,
	Custom2: String,
	Custom3: String,
	Custom4: String,
	Custom5: String,
	SignatureHash: String,
	CurrencyCode: 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,
	ApprovedAmount: 0,
	ErrorMessage: String,
	ErrorCode: String,
	AchProviderDetails: 
	{
		NetworkResponseCode: String,
		TransactionStatusCode: 0
	},
	LocalDateTime: String,
	ExtendedData: 
	{
		NetworkResponseCode: String,
		NetworkErrorCode: String,
		DeclineReferenceCode: String,
		NetworkTransactionId: 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
		}
	}
}