The below is a condensed version of Elavon's developer portal, outlining the various transaction process flows for CSDK.
Start of Service (Opening the Application)
1) Send openPaymentGateway command
2) Capture/Store the paymentGatewayId for use throughout the day
3) Send setDeviceConnectionConfiguration command with parameters of the peripherals that will be used
4) Send startCardReadersSearch command
5) Poll getCardReadersSearchStatus command until data->cardReadersSearch->completed = true
a) If successful in locating the reader, it will be listed in an array data->cardReadersSearch-
>cardReaders
b) If failure, send getDeviceConnectionConfiguration command to validate the configurations from
step 3 were setup properly
Process a Card Present Sale (EMV/NFC/MSR)
1) Send startPaymentTransaction command: include paymentGatewayId from "Start of Service" step 2 & transactionType = SALE
2) Capture/Store the chanId for use throughout this transaction
3) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
b) If the array requiredInformation appears in the response, parse the value and send a
continuePaymentTransaction command with the requiste information (see "Process a Card Not
Present Sale" step # for reference)
4) Parse through the response in step 3a for data->paymentGatewayCommand-
>paymentTransactionData->result
a) If APPROVED, capture/store the rest of the information within data->paymentGatewayCommand-
>paymentTransactionData and handle as needed within your payment solution (internal record
keeping, receipt creating/printing, notifying the merchant and cardholder)
b) If DECLINED, notify the merchant and cardholder and prompt for another form of payment or
different card (potentially start over at step 1)
c) If FAILED, parse the information within data->paymentGatewayCommand-
>paymentTransactionData->errors to determine the issue and handle accordingly (communication
issues, card reader failures, card failure, user failure)
Process a Void of a Sale
1) Send startPaymentTransaction command: include paymentGatewayId from "Start of Service" step 2, transactionType = VOID, & originalTransId (captured from "Process a Card Present Sale" step 4a)
2) Capture/Store the chanId for use throughout this transaction
3) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
4) Parse through the response for data->paymentGatewayCommand->paymentTransactionData->result
a) If APPROVED, capture/store the rest of the information within data->paymentGatewayCommand-
>paymentTransactionData and handle as needed within your payment solution (internal record
keeping, receipt creating/printing, notifying the merchant and cardholder)
b) If DECLINED, notify the merchant and cardholder (potentially start over at step 1 or look to
completing a Stand-Alone Refund)
c) If FAILED, parse the information within data->paymentGatewayCommand-
>paymentTransactionData->errors to determine the issue and handle accordingly (communication
issues, card reader failures, card failure, user failure)
Process a Stand-Alone Refund
1) Send startPaymentTransaction command: include paymentGatewayId from "Start of Service" step 2 & transactionType = STANDALONE_REFUND
2) Capture/Store the chanId for use throughout this transaction
3) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
4) Parse through the response for data->paymentGatewayCommand->paymentTransactionData->result
a) If APPROVED, capture/store the rest of the information within data->paymentGatewayCommand-
>paymentTransactionData and handle as needed within your payment solution (internal record
keeping, receipt creating/printing, notifying the merchant and cardholder)
b) If DECLINED, notify the merchant and cardholder (potentially start over at step 1)
c) If FAILED, parse the information within data->paymentGatewayCommand-
>paymentTransactionData->errors to determine the issue and handle accordingly (communication
issues, card reader failures, card failure, user failure)
Process a Linked Refund
1) Send startPaymentTransaction command: include paymentGatewayId from "Start of Service" step 2,
transactionType = LINKED_REFUND, & originalTransId (captured from "Process a Card Present Sale"
step 4a)
2) Capture/Store the chanId for use throughout this transaction
3) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
4) Parse through the response for data->paymentGatewayCommand->paymentTransactionData->result
a) If APPROVED, capture/store the rest of the information within data->paymentGatewayCommand-
>paymentTransactionData and handle as needed within your payment solution (internal record
keeping, receipt creating/printing, notifying the merchant and cardholder)
b) If DECLINED, notify the merchant and cardholder (potentially start over at step 1 or look to
completing a Stand-Alone Refund)
c) If FAILED, parse the information within data->paymentGatewayCommand-
>paymentTransactionData->errors to determine the issue and handle accordingly (communication issues, card reader failures, card failure, user failure)
Process a Card Not Present Sale
1) Send startPaymentTransaction command: include paymentGatewayId from "Start of Service" step 2,
transactionType = SALE, & cardEntryTypes = ["MANUALLY_ENTERED"]
2) Capture/Store the chanId for use throughout this transaction
3) Send continuePaymentTransaction command: include paymentGatewayId, chanId, and cardPresent set
to either true or false
4) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
5) Parse through the response for data->paymentGatewayCommand->paymentTransactionData->result
a) If APPROVED, capture/store the rest of the information within data->paymentGatewayCommand-
>paymentTransactionData and handle as needed within your payment solution (internal record
keeping, receipt creating/printing, notifying the merchant and cardholder)
b) If DECLINED, notify the merchant and cardholder (potentially start over at step 1 or look to
completing a Stand-Alone Refund)
c) If FAILED, parse the information within data->paymentGatewayCommand-
>paymentTransactionData->errors to determine the issue and handle accordingly (communication
issues, card reader failures, card failure, user failure)
Cancel an Active Transaction (while the cardholder is interacting with the PinPad/Peripheral/Device)
1) Send cancelPaymentTransaction command: include paymentGatewayId & chanId
2) Poll getPaymentTransactionStatus command: include paymentGatewayId & chanId
a) Continue polling until data->paymentGatewayCommand->completed = true
3) Parse through the response for data->paymentGatewayCommand->paymentTransactionData->result
c) This will show "FAILED", with data->paymentGatewayCommand->paymentTransactionData->errors
= "ECLCommerceError ECLTransactionCanceled"
Lookup a Transaction
1) Send searchPaymentTransaction command: include paymentGatewayId & any relevant data that would
be associated with the specific transaction being searched
2) Parse through the response for data->paymentGatewayCommand->transactionSearchResults-
>transactions for any transaction objects for the specific transaction being searched